001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.Child;
043import ca.uhn.fhir.model.api.annotation.ChildOrder;
044import ca.uhn.fhir.model.api.annotation.DatatypeDef;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047
048import org.hl7.fhir.instance.model.api.ICompositeType;
049import  org.hl7.fhir.r5.model.Enumerations.BindingStrength;
050import  org.hl7.fhir.r5.model.Enumerations.BindingStrengthEnumFactory;
051import  org.hl7.fhir.r5.utils.ToolingExtensions;
052import  org.hl7.fhir.instance.model.api.IBaseDatatypeElement;
053import  org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
054/**
055 * ElementDefinition Type: Captures constraints on each element within the resource, profile, or extension.
056 */
057@DatatypeDef(name="ElementDefinition")
058public class ElementDefinition extends BackboneType implements ICompositeType {
059
060    public enum AdditionalBindingPurposeVS {
061        /**
062         * A required binding, for use when the binding strength is 'extensible' or 'preferred'
063         */
064        MAXIMUM, 
065        /**
066         * The minimum allowable value set - any conformant system SHALL support all these codes
067         */
068        MINIMUM, 
069        /**
070         * This value set is used as a required binding (in addition to the base binding (not a replacement), usually in a particular usage context)
071         */
072        REQUIRED, 
073        /**
074         * This value set is used as an extensible binding (in addition to the base binding (not a replacement), usually in a particular usage context)
075         */
076        EXTENSIBLE, 
077        /**
078         * This value set is a candidate to substitute for the overall conformance value set in some situations; usually these are defined in the documentation
079         */
080        CANDIDATE, 
081        /**
082         * New records are required to use this value set, but legacy records may use other codes. The definition of 'new record' is difficult, since systems often create new records based on pre-existing data. Usually 'current' bindings are mandated by an external authority that makes clear rules around this
083         */
084        CURRENT, 
085        /**
086         * This is the value set that is preferred in a given context (documentation should explain why)
087         */
088        PREFERRED, 
089        /**
090         * This value set is provided for user look up in a given context. Typically, these valuesets only include a subset of codes relevant for input in a context
091         */
092        UI, 
093        /**
094         * This value set is a good set of codes to start with when designing your system
095         */
096        STARTER, 
097        /**
098         * This value set is a component of the base value set. Usually this is called out so that documentation can be written about a portion of the value set
099         */
100        COMPONENT, 
101        /**
102         * added to help the parsers with the generic types
103         */
104        NULL;
105        public static AdditionalBindingPurposeVS fromCode(String codeString) throws FHIRException {
106            if (codeString == null || "".equals(codeString))
107                return null;
108        if ("maximum".equals(codeString))
109          return MAXIMUM;
110        if ("minimum".equals(codeString))
111          return MINIMUM;
112        if ("required".equals(codeString))
113          return REQUIRED;
114        if ("extensible".equals(codeString))
115          return EXTENSIBLE;
116        if ("candidate".equals(codeString))
117          return CANDIDATE;
118        if ("current".equals(codeString))
119          return CURRENT;
120        if ("preferred".equals(codeString))
121          return PREFERRED;
122        if ("ui".equals(codeString))
123          return UI;
124        if ("starter".equals(codeString))
125          return STARTER;
126        if ("component".equals(codeString))
127          return COMPONENT;
128        if (Configuration.isAcceptInvalidEnums())
129          return null;
130        else
131          throw new FHIRException("Unknown AdditionalBindingPurposeVS code '"+codeString+"'");
132        }
133        public String toCode() {
134          switch (this) {
135            case MAXIMUM: return "maximum";
136            case MINIMUM: return "minimum";
137            case REQUIRED: return "required";
138            case EXTENSIBLE: return "extensible";
139            case CANDIDATE: return "candidate";
140            case CURRENT: return "current";
141            case PREFERRED: return "preferred";
142            case UI: return "ui";
143            case STARTER: return "starter";
144            case COMPONENT: return "component";
145            case NULL: return null;
146            default: return "?";
147          }
148        }
149        public String getSystem() {
150          switch (this) {
151            case MAXIMUM: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
152            case MINIMUM: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
153            case REQUIRED: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
154            case EXTENSIBLE: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
155            case CANDIDATE: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
156            case CURRENT: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
157            case PREFERRED: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
158            case UI: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
159            case STARTER: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
160            case COMPONENT: return "http://hl7.org/fhir/CodeSystem/additional-binding-purpose";
161            case NULL: return null;
162            default: return "?";
163          }
164        }
165        public String getDefinition() {
166          switch (this) {
167            case MAXIMUM: return "A required binding, for use when the binding strength is 'extensible' or 'preferred'";
168            case MINIMUM: return "The minimum allowable value set - any conformant system SHALL support all these codes";
169            case REQUIRED: return "This value set is used as a required binding (in addition to the base binding (not a replacement), usually in a particular usage context)";
170            case EXTENSIBLE: return "This value set is used as an extensible binding (in addition to the base binding (not a replacement), usually in a particular usage context)";
171            case CANDIDATE: return "This value set is a candidate to substitute for the overall conformance value set in some situations; usually these are defined in the documentation";
172            case CURRENT: return "New records are required to use this value set, but legacy records may use other codes. The definition of 'new record' is difficult, since systems often create new records based on pre-existing data. Usually 'current' bindings are mandated by an external authority that makes clear rules around this";
173            case PREFERRED: return "This is the value set that is preferred in a given context (documentation should explain why)";
174            case UI: return "This value set is provided for user look up in a given context. Typically, these valuesets only include a subset of codes relevant for input in a context";
175            case STARTER: return "This value set is a good set of codes to start with when designing your system";
176            case COMPONENT: return "This value set is a component of the base value set. Usually this is called out so that documentation can be written about a portion of the value set";
177            case NULL: return null;
178            default: return "?";
179          }
180        }
181        public String getDisplay() {
182          switch (this) {
183            case MAXIMUM: return "Maximum Binding";
184            case MINIMUM: return "Minimum Binding";
185            case REQUIRED: return "Required Binding";
186            case EXTENSIBLE: return "Conformance Binding";
187            case CANDIDATE: return "Candidate Binding";
188            case CURRENT: return "Current Binding";
189            case PREFERRED: return "Preferred Binding";
190            case UI: return "UI Suggested Binding";
191            case STARTER: return "Starter Binding";
192            case COMPONENT: return "Component Binding";
193            case NULL: return null;
194            default: return "?";
195          }
196        }
197    }
198
199  public static class AdditionalBindingPurposeVSEnumFactory implements EnumFactory<AdditionalBindingPurposeVS> {
200    public AdditionalBindingPurposeVS fromCode(String codeString) throws IllegalArgumentException {
201      if (codeString == null || "".equals(codeString))
202            if (codeString == null || "".equals(codeString))
203                return null;
204        if ("maximum".equals(codeString))
205          return AdditionalBindingPurposeVS.MAXIMUM;
206        if ("minimum".equals(codeString))
207          return AdditionalBindingPurposeVS.MINIMUM;
208        if ("required".equals(codeString))
209          return AdditionalBindingPurposeVS.REQUIRED;
210        if ("extensible".equals(codeString))
211          return AdditionalBindingPurposeVS.EXTENSIBLE;
212        if ("candidate".equals(codeString))
213          return AdditionalBindingPurposeVS.CANDIDATE;
214        if ("current".equals(codeString))
215          return AdditionalBindingPurposeVS.CURRENT;
216        if ("preferred".equals(codeString))
217          return AdditionalBindingPurposeVS.PREFERRED;
218        if ("ui".equals(codeString))
219          return AdditionalBindingPurposeVS.UI;
220        if ("starter".equals(codeString))
221          return AdditionalBindingPurposeVS.STARTER;
222        if ("component".equals(codeString))
223          return AdditionalBindingPurposeVS.COMPONENT;
224        throw new IllegalArgumentException("Unknown AdditionalBindingPurposeVS code '"+codeString+"'");
225        }
226        public Enumeration<AdditionalBindingPurposeVS> fromType(PrimitiveType<?> code) throws FHIRException {
227          if (code == null)
228            return null;
229          if (code.isEmpty())
230            return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.NULL, code);
231          String codeString = ((PrimitiveType) code).asStringValue();
232          if (codeString == null || "".equals(codeString))
233            return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.NULL, code);
234        if ("maximum".equals(codeString))
235          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.MAXIMUM, code);
236        if ("minimum".equals(codeString))
237          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.MINIMUM, code);
238        if ("required".equals(codeString))
239          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.REQUIRED, code);
240        if ("extensible".equals(codeString))
241          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.EXTENSIBLE, code);
242        if ("candidate".equals(codeString))
243          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.CANDIDATE, code);
244        if ("current".equals(codeString))
245          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.CURRENT, code);
246        if ("preferred".equals(codeString))
247          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.PREFERRED, code);
248        if ("ui".equals(codeString))
249          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.UI, code);
250        if ("starter".equals(codeString))
251          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.STARTER, code);
252        if ("component".equals(codeString))
253          return new Enumeration<AdditionalBindingPurposeVS>(this, AdditionalBindingPurposeVS.COMPONENT, code);
254        throw new FHIRException("Unknown AdditionalBindingPurposeVS code '"+codeString+"'");
255        }
256    public String toCode(AdditionalBindingPurposeVS code) {
257       if (code == AdditionalBindingPurposeVS.NULL)
258           return null;
259       if (code == AdditionalBindingPurposeVS.MAXIMUM)
260        return "maximum";
261      if (code == AdditionalBindingPurposeVS.MINIMUM)
262        return "minimum";
263      if (code == AdditionalBindingPurposeVS.REQUIRED)
264        return "required";
265      if (code == AdditionalBindingPurposeVS.EXTENSIBLE)
266        return "extensible";
267      if (code == AdditionalBindingPurposeVS.CANDIDATE)
268        return "candidate";
269      if (code == AdditionalBindingPurposeVS.CURRENT)
270        return "current";
271      if (code == AdditionalBindingPurposeVS.PREFERRED)
272        return "preferred";
273      if (code == AdditionalBindingPurposeVS.UI)
274        return "ui";
275      if (code == AdditionalBindingPurposeVS.STARTER)
276        return "starter";
277      if (code == AdditionalBindingPurposeVS.COMPONENT)
278        return "component";
279      return "?";
280   }
281    public String toSystem(AdditionalBindingPurposeVS code) {
282      return code.getSystem();
283      }
284    }
285
286    public enum AggregationMode {
287        /**
288         * The reference is a local reference to a contained resource.
289         */
290        CONTAINED, 
291        /**
292         * The reference to a resource that has to be resolved externally to the resource that includes the reference.
293         */
294        REFERENCED, 
295        /**
296         * When the resource is in a Bundle, the resource the reference points to will be found in the same bundle as the resource that includes the reference.
297         */
298        BUNDLED, 
299        /**
300         * added to help the parsers with the generic types
301         */
302        NULL;
303        public static AggregationMode fromCode(String codeString) throws FHIRException {
304            if (codeString == null || "".equals(codeString))
305                return null;
306        if ("contained".equals(codeString))
307          return CONTAINED;
308        if ("referenced".equals(codeString))
309          return REFERENCED;
310        if ("bundled".equals(codeString))
311          return BUNDLED;
312        if (Configuration.isAcceptInvalidEnums())
313          return null;
314        else
315          throw new FHIRException("Unknown AggregationMode code '"+codeString+"'");
316        }
317        public String toCode() {
318          switch (this) {
319            case CONTAINED: return "contained";
320            case REFERENCED: return "referenced";
321            case BUNDLED: return "bundled";
322            case NULL: return null;
323            default: return "?";
324          }
325        }
326        public String getSystem() {
327          switch (this) {
328            case CONTAINED: return "http://hl7.org/fhir/resource-aggregation-mode";
329            case REFERENCED: return "http://hl7.org/fhir/resource-aggregation-mode";
330            case BUNDLED: return "http://hl7.org/fhir/resource-aggregation-mode";
331            case NULL: return null;
332            default: return "?";
333          }
334        }
335        public String getDefinition() {
336          switch (this) {
337            case CONTAINED: return "The reference is a local reference to a contained resource.";
338            case REFERENCED: return "The reference to a resource that has to be resolved externally to the resource that includes the reference.";
339            case BUNDLED: return "When the resource is in a Bundle, the resource the reference points to will be found in the same bundle as the resource that includes the reference.";
340            case NULL: return null;
341            default: return "?";
342          }
343        }
344        public String getDisplay() {
345          switch (this) {
346            case CONTAINED: return "Contained";
347            case REFERENCED: return "Referenced";
348            case BUNDLED: return "Bundled";
349            case NULL: return null;
350            default: return "?";
351          }
352        }
353    }
354
355  public static class AggregationModeEnumFactory implements EnumFactory<AggregationMode> {
356    public AggregationMode fromCode(String codeString) throws IllegalArgumentException {
357      if (codeString == null || "".equals(codeString))
358            if (codeString == null || "".equals(codeString))
359                return null;
360        if ("contained".equals(codeString))
361          return AggregationMode.CONTAINED;
362        if ("referenced".equals(codeString))
363          return AggregationMode.REFERENCED;
364        if ("bundled".equals(codeString))
365          return AggregationMode.BUNDLED;
366        throw new IllegalArgumentException("Unknown AggregationMode code '"+codeString+"'");
367        }
368        public Enumeration<AggregationMode> fromType(PrimitiveType<?> code) throws FHIRException {
369          if (code == null)
370            return null;
371          if (code.isEmpty())
372            return new Enumeration<AggregationMode>(this, AggregationMode.NULL, code);
373          String codeString = ((PrimitiveType) code).asStringValue();
374          if (codeString == null || "".equals(codeString))
375            return new Enumeration<AggregationMode>(this, AggregationMode.NULL, code);
376        if ("contained".equals(codeString))
377          return new Enumeration<AggregationMode>(this, AggregationMode.CONTAINED, code);
378        if ("referenced".equals(codeString))
379          return new Enumeration<AggregationMode>(this, AggregationMode.REFERENCED, code);
380        if ("bundled".equals(codeString))
381          return new Enumeration<AggregationMode>(this, AggregationMode.BUNDLED, code);
382        throw new FHIRException("Unknown AggregationMode code '"+codeString+"'");
383        }
384    public String toCode(AggregationMode code) {
385       if (code == AggregationMode.NULL)
386           return null;
387       if (code == AggregationMode.CONTAINED)
388        return "contained";
389      if (code == AggregationMode.REFERENCED)
390        return "referenced";
391      if (code == AggregationMode.BUNDLED)
392        return "bundled";
393      return "?";
394   }
395    public String toSystem(AggregationMode code) {
396      return code.getSystem();
397      }
398    }
399
400    public enum ConstraintSeverity {
401        /**
402         * If the constraint is violated, the resource is not conformant.
403         */
404        ERROR, 
405        /**
406         * If the constraint is violated, the resource is conformant, but it is not necessarily following best practice.
407         */
408        WARNING, 
409        /**
410         * added to help the parsers with the generic types
411         */
412        NULL;
413        public static ConstraintSeverity fromCode(String codeString) throws FHIRException {
414            if (codeString == null || "".equals(codeString))
415                return null;
416        if ("error".equals(codeString))
417          return ERROR;
418        if ("warning".equals(codeString))
419          return WARNING;
420        if (Configuration.isAcceptInvalidEnums())
421          return null;
422        else
423          throw new FHIRException("Unknown ConstraintSeverity code '"+codeString+"'");
424        }
425        public String toCode() {
426          switch (this) {
427            case ERROR: return "error";
428            case WARNING: return "warning";
429            case NULL: return null;
430            default: return "?";
431          }
432        }
433        public String getSystem() {
434          switch (this) {
435            case ERROR: return "http://hl7.org/fhir/constraint-severity";
436            case WARNING: return "http://hl7.org/fhir/constraint-severity";
437            case NULL: return null;
438            default: return "?";
439          }
440        }
441        public String getDefinition() {
442          switch (this) {
443            case ERROR: return "If the constraint is violated, the resource is not conformant.";
444            case WARNING: return "If the constraint is violated, the resource is conformant, but it is not necessarily following best practice.";
445            case NULL: return null;
446            default: return "?";
447          }
448        }
449        public String getDisplay() {
450          switch (this) {
451            case ERROR: return "Error";
452            case WARNING: return "Warning";
453            case NULL: return null;
454            default: return "?";
455          }
456        }
457    }
458
459  public static class ConstraintSeverityEnumFactory implements EnumFactory<ConstraintSeverity> {
460    public ConstraintSeverity fromCode(String codeString) throws IllegalArgumentException {
461      if (codeString == null || "".equals(codeString))
462            if (codeString == null || "".equals(codeString))
463                return null;
464        if ("error".equals(codeString))
465          return ConstraintSeverity.ERROR;
466        if ("warning".equals(codeString))
467          return ConstraintSeverity.WARNING;
468        throw new IllegalArgumentException("Unknown ConstraintSeverity code '"+codeString+"'");
469        }
470        public Enumeration<ConstraintSeverity> fromType(PrimitiveType<?> code) throws FHIRException {
471          if (code == null)
472            return null;
473          if (code.isEmpty())
474            return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.NULL, code);
475          String codeString = ((PrimitiveType) code).asStringValue();
476          if (codeString == null || "".equals(codeString))
477            return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.NULL, code);
478        if ("error".equals(codeString))
479          return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.ERROR, code);
480        if ("warning".equals(codeString))
481          return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.WARNING, code);
482        throw new FHIRException("Unknown ConstraintSeverity code '"+codeString+"'");
483        }
484    public String toCode(ConstraintSeverity code) {
485       if (code == ConstraintSeverity.NULL)
486           return null;
487       if (code == ConstraintSeverity.ERROR)
488        return "error";
489      if (code == ConstraintSeverity.WARNING)
490        return "warning";
491      return "?";
492   }
493    public String toSystem(ConstraintSeverity code) {
494      return code.getSystem();
495      }
496    }
497
498    public enum DiscriminatorType {
499        /**
500         * The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding.
501         */
502        VALUE, 
503        /**
504         * The slices are differentiated by the presence or absence of the nominated element. There SHALL be no more than two slices. The slices are differentiated by the fact that one must have a max of 0 and the other must have a min of 1 (or more).  The order in which the slices are declared doesn't matter.
505         */
506        EXISTS, 
507        /**
508         * The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding. This has the same meaning as 'value' and is deprecated.
509         */
510        PATTERN, 
511        /**
512         * The slices are differentiated by type of the nominated element.
513         */
514        TYPE, 
515        /**
516         * The slices are differentiated by conformance of the nominated element to a specified profile. Note that if the path specifies .resolve() then the profile is the target profile on the reference. In this case, validation by the possible profiles is required to differentiate the slices.
517         */
518        PROFILE, 
519        /**
520         * The slices are differentiated by their index. This is only possible if all but the last slice have min=max cardinality, and the (optional) last slice contains other undifferentiated elements.
521         */
522        POSITION, 
523        /**
524         * added to help the parsers with the generic types
525         */
526        NULL;
527        public static DiscriminatorType fromCode(String codeString) throws FHIRException {
528            if (codeString == null || "".equals(codeString))
529                return null;
530        if ("value".equals(codeString))
531          return VALUE;
532        if ("exists".equals(codeString))
533          return EXISTS;
534        if ("pattern".equals(codeString))
535          return PATTERN;
536        if ("type".equals(codeString))
537          return TYPE;
538        if ("profile".equals(codeString))
539          return PROFILE;
540        if ("position".equals(codeString))
541          return POSITION;
542        if (Configuration.isAcceptInvalidEnums())
543          return null;
544        else
545          throw new FHIRException("Unknown DiscriminatorType code '"+codeString+"'");
546        }
547        public String toCode() {
548          switch (this) {
549            case VALUE: return "value";
550            case EXISTS: return "exists";
551            case PATTERN: return "pattern";
552            case TYPE: return "type";
553            case PROFILE: return "profile";
554            case POSITION: return "position";
555            case NULL: return null;
556            default: return "?";
557          }
558        }
559        public String getSystem() {
560          switch (this) {
561            case VALUE: return "http://hl7.org/fhir/discriminator-type";
562            case EXISTS: return "http://hl7.org/fhir/discriminator-type";
563            case PATTERN: return "http://hl7.org/fhir/discriminator-type";
564            case TYPE: return "http://hl7.org/fhir/discriminator-type";
565            case PROFILE: return "http://hl7.org/fhir/discriminator-type";
566            case POSITION: return "http://hl7.org/fhir/discriminator-type";
567            case NULL: return null;
568            default: return "?";
569          }
570        }
571        public String getDefinition() {
572          switch (this) {
573            case VALUE: return "The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding.";
574            case EXISTS: return "The slices are differentiated by the presence or absence of the nominated element. There SHALL be no more than two slices. The slices are differentiated by the fact that one must have a max of 0 and the other must have a min of 1 (or more).  The order in which the slices are declared doesn't matter.";
575            case PATTERN: return "The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding. This has the same meaning as 'value' and is deprecated.";
576            case TYPE: return "The slices are differentiated by type of the nominated element.";
577            case PROFILE: return "The slices are differentiated by conformance of the nominated element to a specified profile. Note that if the path specifies .resolve() then the profile is the target profile on the reference. In this case, validation by the possible profiles is required to differentiate the slices.";
578            case POSITION: return "The slices are differentiated by their index. This is only possible if all but the last slice have min=max cardinality, and the (optional) last slice contains other undifferentiated elements.";
579            case NULL: return null;
580            default: return "?";
581          }
582        }
583        public String getDisplay() {
584          switch (this) {
585            case VALUE: return "Value";
586            case EXISTS: return "Exists";
587            case PATTERN: return "Pattern";
588            case TYPE: return "Type";
589            case PROFILE: return "Profile";
590            case POSITION: return "Position";
591            case NULL: return null;
592            default: return "?";
593          }
594        }
595    }
596
597  public static class DiscriminatorTypeEnumFactory implements EnumFactory<DiscriminatorType> {
598    public DiscriminatorType fromCode(String codeString) throws IllegalArgumentException {
599      if (codeString == null || "".equals(codeString))
600            if (codeString == null || "".equals(codeString))
601                return null;
602        if ("value".equals(codeString))
603          return DiscriminatorType.VALUE;
604        if ("exists".equals(codeString))
605          return DiscriminatorType.EXISTS;
606        if ("pattern".equals(codeString))
607          return DiscriminatorType.PATTERN;
608        if ("type".equals(codeString))
609          return DiscriminatorType.TYPE;
610        if ("profile".equals(codeString))
611          return DiscriminatorType.PROFILE;
612        if ("position".equals(codeString))
613          return DiscriminatorType.POSITION;
614        throw new IllegalArgumentException("Unknown DiscriminatorType code '"+codeString+"'");
615        }
616        public Enumeration<DiscriminatorType> fromType(PrimitiveType<?> code) throws FHIRException {
617          if (code == null)
618            return null;
619          if (code.isEmpty())
620            return new Enumeration<DiscriminatorType>(this, DiscriminatorType.NULL, code);
621          String codeString = ((PrimitiveType) code).asStringValue();
622          if (codeString == null || "".equals(codeString))
623            return new Enumeration<DiscriminatorType>(this, DiscriminatorType.NULL, code);
624        if ("value".equals(codeString))
625          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.VALUE, code);
626        if ("exists".equals(codeString))
627          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.EXISTS, code);
628        if ("pattern".equals(codeString))
629          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.PATTERN, code);
630        if ("type".equals(codeString))
631          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.TYPE, code);
632        if ("profile".equals(codeString))
633          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.PROFILE, code);
634        if ("position".equals(codeString))
635          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.POSITION, code);
636        throw new FHIRException("Unknown DiscriminatorType code '"+codeString+"'");
637        }
638    public String toCode(DiscriminatorType code) {
639       if (code == DiscriminatorType.NULL)
640           return null;
641       if (code == DiscriminatorType.VALUE)
642        return "value";
643      if (code == DiscriminatorType.EXISTS)
644        return "exists";
645      if (code == DiscriminatorType.PATTERN)
646        return "pattern";
647      if (code == DiscriminatorType.TYPE)
648        return "type";
649      if (code == DiscriminatorType.PROFILE)
650        return "profile";
651      if (code == DiscriminatorType.POSITION)
652        return "position";
653      return "?";
654   }
655    public String toSystem(DiscriminatorType code) {
656      return code.getSystem();
657      }
658    }
659
660    public enum PropertyRepresentation {
661        /**
662         * In XML, this property is represented as an attribute not an element.
663         */
664        XMLATTR, 
665        /**
666         * This element is represented using the XML text attribute (primitives only).
667         */
668        XMLTEXT, 
669        /**
670         * The type of this element is indicated using xsi:type.
671         */
672        TYPEATTR, 
673        /**
674         * Use CDA narrative instead of XHTML.
675         */
676        CDATEXT, 
677        /**
678         * The property is represented using XHTML.
679         */
680        XHTML, 
681        /**
682         * added to help the parsers with the generic types
683         */
684        NULL;
685        public static PropertyRepresentation fromCode(String codeString) throws FHIRException {
686            if (codeString == null || "".equals(codeString))
687                return null;
688        if ("xmlAttr".equals(codeString))
689          return XMLATTR;
690        if ("xmlText".equals(codeString))
691          return XMLTEXT;
692        if ("typeAttr".equals(codeString))
693          return TYPEATTR;
694        if ("cdaText".equals(codeString))
695          return CDATEXT;
696        if ("xhtml".equals(codeString))
697          return XHTML;
698        if (Configuration.isAcceptInvalidEnums())
699          return null;
700        else
701          throw new FHIRException("Unknown PropertyRepresentation code '"+codeString+"'");
702        }
703        public String toCode() {
704          switch (this) {
705            case XMLATTR: return "xmlAttr";
706            case XMLTEXT: return "xmlText";
707            case TYPEATTR: return "typeAttr";
708            case CDATEXT: return "cdaText";
709            case XHTML: return "xhtml";
710            case NULL: return null;
711            default: return "?";
712          }
713        }
714        public String getSystem() {
715          switch (this) {
716            case XMLATTR: return "http://hl7.org/fhir/property-representation";
717            case XMLTEXT: return "http://hl7.org/fhir/property-representation";
718            case TYPEATTR: return "http://hl7.org/fhir/property-representation";
719            case CDATEXT: return "http://hl7.org/fhir/property-representation";
720            case XHTML: return "http://hl7.org/fhir/property-representation";
721            case NULL: return null;
722            default: return "?";
723          }
724        }
725        public String getDefinition() {
726          switch (this) {
727            case XMLATTR: return "In XML, this property is represented as an attribute not an element.";
728            case XMLTEXT: return "This element is represented using the XML text attribute (primitives only).";
729            case TYPEATTR: return "The type of this element is indicated using xsi:type.";
730            case CDATEXT: return "Use CDA narrative instead of XHTML.";
731            case XHTML: return "The property is represented using XHTML.";
732            case NULL: return null;
733            default: return "?";
734          }
735        }
736        public String getDisplay() {
737          switch (this) {
738            case XMLATTR: return "XML Attribute";
739            case XMLTEXT: return "XML Text";
740            case TYPEATTR: return "Type Attribute";
741            case CDATEXT: return "CDA Text Format";
742            case XHTML: return "XHTML";
743            case NULL: return null;
744            default: return "?";
745          }
746        }
747    }
748
749  public static class PropertyRepresentationEnumFactory implements EnumFactory<PropertyRepresentation> {
750    public PropertyRepresentation fromCode(String codeString) throws IllegalArgumentException {
751      if (codeString == null || "".equals(codeString))
752            if (codeString == null || "".equals(codeString))
753                return null;
754        if ("xmlAttr".equals(codeString))
755          return PropertyRepresentation.XMLATTR;
756        if ("xmlText".equals(codeString))
757          return PropertyRepresentation.XMLTEXT;
758        if ("typeAttr".equals(codeString))
759          return PropertyRepresentation.TYPEATTR;
760        if ("cdaText".equals(codeString))
761          return PropertyRepresentation.CDATEXT;
762        if ("xhtml".equals(codeString))
763          return PropertyRepresentation.XHTML;
764        throw new IllegalArgumentException("Unknown PropertyRepresentation code '"+codeString+"'");
765        }
766        public Enumeration<PropertyRepresentation> fromType(PrimitiveType<?> code) throws FHIRException {
767          if (code == null)
768            return null;
769          if (code.isEmpty())
770            return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.NULL, code);
771          String codeString = ((PrimitiveType) code).asStringValue();
772          if (codeString == null || "".equals(codeString))
773            return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.NULL, code);
774        if ("xmlAttr".equals(codeString))
775          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XMLATTR, code);
776        if ("xmlText".equals(codeString))
777          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XMLTEXT, code);
778        if ("typeAttr".equals(codeString))
779          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.TYPEATTR, code);
780        if ("cdaText".equals(codeString))
781          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.CDATEXT, code);
782        if ("xhtml".equals(codeString))
783          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XHTML, code);
784        throw new FHIRException("Unknown PropertyRepresentation code '"+codeString+"'");
785        }
786    public String toCode(PropertyRepresentation code) {
787       if (code == PropertyRepresentation.NULL)
788           return null;
789       if (code == PropertyRepresentation.XMLATTR)
790        return "xmlAttr";
791      if (code == PropertyRepresentation.XMLTEXT)
792        return "xmlText";
793      if (code == PropertyRepresentation.TYPEATTR)
794        return "typeAttr";
795      if (code == PropertyRepresentation.CDATEXT)
796        return "cdaText";
797      if (code == PropertyRepresentation.XHTML)
798        return "xhtml";
799      return "?";
800   }
801    public String toSystem(PropertyRepresentation code) {
802      return code.getSystem();
803      }
804    }
805
806    public enum ReferenceVersionRules {
807        /**
808         * The reference may be either version independent or version specific.
809         */
810        EITHER, 
811        /**
812         * The reference must be version independent.
813         */
814        INDEPENDENT, 
815        /**
816         * The reference must be version specific.
817         */
818        SPECIFIC, 
819        /**
820         * added to help the parsers with the generic types
821         */
822        NULL;
823        public static ReferenceVersionRules fromCode(String codeString) throws FHIRException {
824            if (codeString == null || "".equals(codeString))
825                return null;
826        if ("either".equals(codeString))
827          return EITHER;
828        if ("independent".equals(codeString))
829          return INDEPENDENT;
830        if ("specific".equals(codeString))
831          return SPECIFIC;
832        if (Configuration.isAcceptInvalidEnums())
833          return null;
834        else
835          throw new FHIRException("Unknown ReferenceVersionRules code '"+codeString+"'");
836        }
837        public String toCode() {
838          switch (this) {
839            case EITHER: return "either";
840            case INDEPENDENT: return "independent";
841            case SPECIFIC: return "specific";
842            case NULL: return null;
843            default: return "?";
844          }
845        }
846        public String getSystem() {
847          switch (this) {
848            case EITHER: return "http://hl7.org/fhir/reference-version-rules";
849            case INDEPENDENT: return "http://hl7.org/fhir/reference-version-rules";
850            case SPECIFIC: return "http://hl7.org/fhir/reference-version-rules";
851            case NULL: return null;
852            default: return "?";
853          }
854        }
855        public String getDefinition() {
856          switch (this) {
857            case EITHER: return "The reference may be either version independent or version specific.";
858            case INDEPENDENT: return "The reference must be version independent.";
859            case SPECIFIC: return "The reference must be version specific.";
860            case NULL: return null;
861            default: return "?";
862          }
863        }
864        public String getDisplay() {
865          switch (this) {
866            case EITHER: return "Either Specific or independent";
867            case INDEPENDENT: return "Version independent";
868            case SPECIFIC: return "Version Specific";
869            case NULL: return null;
870            default: return "?";
871          }
872        }
873    }
874
875  public static class ReferenceVersionRulesEnumFactory implements EnumFactory<ReferenceVersionRules> {
876    public ReferenceVersionRules fromCode(String codeString) throws IllegalArgumentException {
877      if (codeString == null || "".equals(codeString))
878            if (codeString == null || "".equals(codeString))
879                return null;
880        if ("either".equals(codeString))
881          return ReferenceVersionRules.EITHER;
882        if ("independent".equals(codeString))
883          return ReferenceVersionRules.INDEPENDENT;
884        if ("specific".equals(codeString))
885          return ReferenceVersionRules.SPECIFIC;
886        throw new IllegalArgumentException("Unknown ReferenceVersionRules code '"+codeString+"'");
887        }
888        public Enumeration<ReferenceVersionRules> fromType(PrimitiveType<?> code) throws FHIRException {
889          if (code == null)
890            return null;
891          if (code.isEmpty())
892            return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.NULL, code);
893          String codeString = ((PrimitiveType) code).asStringValue();
894          if (codeString == null || "".equals(codeString))
895            return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.NULL, code);
896        if ("either".equals(codeString))
897          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.EITHER, code);
898        if ("independent".equals(codeString))
899          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.INDEPENDENT, code);
900        if ("specific".equals(codeString))
901          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.SPECIFIC, code);
902        throw new FHIRException("Unknown ReferenceVersionRules code '"+codeString+"'");
903        }
904    public String toCode(ReferenceVersionRules code) {
905       if (code == ReferenceVersionRules.NULL)
906           return null;
907       if (code == ReferenceVersionRules.EITHER)
908        return "either";
909      if (code == ReferenceVersionRules.INDEPENDENT)
910        return "independent";
911      if (code == ReferenceVersionRules.SPECIFIC)
912        return "specific";
913      return "?";
914   }
915    public String toSystem(ReferenceVersionRules code) {
916      return code.getSystem();
917      }
918    }
919
920    public enum SlicingRules {
921        /**
922         * No additional content is allowed other than that described by the slices in this profile.
923         */
924        CLOSED, 
925        /**
926         * Additional content is allowed anywhere in the list.
927         */
928        OPEN, 
929        /**
930         * Additional content is allowed, but only at the end of the list. Note that using this requires that the slices be ordered, which makes it hard to share uses. This should only be done where absolutely required.
931         */
932        OPENATEND, 
933        /**
934         * added to help the parsers with the generic types
935         */
936        NULL;
937        public static SlicingRules fromCode(String codeString) throws FHIRException {
938            if (codeString == null || "".equals(codeString))
939                return null;
940        if ("closed".equals(codeString))
941          return CLOSED;
942        if ("open".equals(codeString))
943          return OPEN;
944        if ("openAtEnd".equals(codeString))
945          return OPENATEND;
946        if (Configuration.isAcceptInvalidEnums())
947          return null;
948        else
949          throw new FHIRException("Unknown SlicingRules code '"+codeString+"'");
950        }
951        public String toCode() {
952          switch (this) {
953            case CLOSED: return "closed";
954            case OPEN: return "open";
955            case OPENATEND: return "openAtEnd";
956            case NULL: return null;
957            default: return "?";
958          }
959        }
960        public String getSystem() {
961          switch (this) {
962            case CLOSED: return "http://hl7.org/fhir/resource-slicing-rules";
963            case OPEN: return "http://hl7.org/fhir/resource-slicing-rules";
964            case OPENATEND: return "http://hl7.org/fhir/resource-slicing-rules";
965            case NULL: return null;
966            default: return "?";
967          }
968        }
969        public String getDefinition() {
970          switch (this) {
971            case CLOSED: return "No additional content is allowed other than that described by the slices in this profile.";
972            case OPEN: return "Additional content is allowed anywhere in the list.";
973            case OPENATEND: return "Additional content is allowed, but only at the end of the list. Note that using this requires that the slices be ordered, which makes it hard to share uses. This should only be done where absolutely required.";
974            case NULL: return null;
975            default: return "?";
976          }
977        }
978        public String getDisplay() {
979          switch (this) {
980            case CLOSED: return "Closed";
981            case OPEN: return "Open";
982            case OPENATEND: return "Open at End";
983            case NULL: return null;
984            default: return "?";
985          }
986        }
987    }
988
989  public static class SlicingRulesEnumFactory implements EnumFactory<SlicingRules> {
990    public SlicingRules fromCode(String codeString) throws IllegalArgumentException {
991      if (codeString == null || "".equals(codeString))
992            if (codeString == null || "".equals(codeString))
993                return null;
994        if ("closed".equals(codeString))
995          return SlicingRules.CLOSED;
996        if ("open".equals(codeString))
997          return SlicingRules.OPEN;
998        if ("openAtEnd".equals(codeString))
999          return SlicingRules.OPENATEND;
1000        throw new IllegalArgumentException("Unknown SlicingRules code '"+codeString+"'");
1001        }
1002        public Enumeration<SlicingRules> fromType(PrimitiveType<?> code) throws FHIRException {
1003          if (code == null)
1004            return null;
1005          if (code.isEmpty())
1006            return new Enumeration<SlicingRules>(this, SlicingRules.NULL, code);
1007          String codeString = ((PrimitiveType) code).asStringValue();
1008          if (codeString == null || "".equals(codeString))
1009            return new Enumeration<SlicingRules>(this, SlicingRules.NULL, code);
1010        if ("closed".equals(codeString))
1011          return new Enumeration<SlicingRules>(this, SlicingRules.CLOSED, code);
1012        if ("open".equals(codeString))
1013          return new Enumeration<SlicingRules>(this, SlicingRules.OPEN, code);
1014        if ("openAtEnd".equals(codeString))
1015          return new Enumeration<SlicingRules>(this, SlicingRules.OPENATEND, code);
1016        throw new FHIRException("Unknown SlicingRules code '"+codeString+"'");
1017        }
1018    public String toCode(SlicingRules code) {
1019       if (code == SlicingRules.NULL)
1020           return null;
1021       if (code == SlicingRules.CLOSED)
1022        return "closed";
1023      if (code == SlicingRules.OPEN)
1024        return "open";
1025      if (code == SlicingRules.OPENATEND)
1026        return "openAtEnd";
1027      return "?";
1028   }
1029    public String toSystem(SlicingRules code) {
1030      return code.getSystem();
1031      }
1032    }
1033
1034    @Block()
1035    public static class ElementDefinitionSlicingComponent extends Element implements IBaseDatatypeElement {
1036        /**
1037         * Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.
1038         */
1039        @Child(name = "discriminator", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1040        @Description(shortDefinition="Element values that are used to distinguish the slices", formalDefinition="Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices." )
1041        protected List<ElementDefinitionSlicingDiscriminatorComponent> discriminator;
1042
1043        /**
1044         * A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.
1045         */
1046        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1047        @Description(shortDefinition="Text description of how slicing works (or not)", formalDefinition="A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated." )
1048        protected StringType description;
1049
1050        /**
1051         * If the matching elements have to occur in the same order as defined in the profile.
1052         */
1053        @Child(name = "ordered", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1054        @Description(shortDefinition="If elements must be in same order as slices", formalDefinition="If the matching elements have to occur in the same order as defined in the profile." )
1055        protected BooleanType ordered;
1056
1057        /**
1058         * Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.
1059         */
1060        @Child(name = "rules", type = {CodeType.class}, order=4, min=1, max=1, modifier=false, summary=true)
1061        @Description(shortDefinition="closed | open | openAtEnd", formalDefinition="Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end." )
1062        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-slicing-rules")
1063        protected Enumeration<SlicingRules> rules;
1064
1065        private static final long serialVersionUID = -311635839L;
1066
1067    /**
1068     * Constructor
1069     */
1070      public ElementDefinitionSlicingComponent() {
1071        super();
1072      }
1073
1074    /**
1075     * Constructor
1076     */
1077      public ElementDefinitionSlicingComponent(SlicingRules rules) {
1078        super();
1079        this.setRules(rules);
1080      }
1081
1082        /**
1083         * @return {@link #discriminator} (Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.)
1084         */
1085        public List<ElementDefinitionSlicingDiscriminatorComponent> getDiscriminator() { 
1086          if (this.discriminator == null)
1087            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1088          return this.discriminator;
1089        }
1090
1091        /**
1092         * @return Returns a reference to <code>this</code> for easy method chaining
1093         */
1094        public ElementDefinitionSlicingComponent setDiscriminator(List<ElementDefinitionSlicingDiscriminatorComponent> theDiscriminator) { 
1095          this.discriminator = theDiscriminator;
1096          return this;
1097        }
1098
1099        public boolean hasDiscriminator() { 
1100          if (this.discriminator == null)
1101            return false;
1102          for (ElementDefinitionSlicingDiscriminatorComponent item : this.discriminator)
1103            if (!item.isEmpty())
1104              return true;
1105          return false;
1106        }
1107
1108        public ElementDefinitionSlicingDiscriminatorComponent addDiscriminator() { //3
1109          ElementDefinitionSlicingDiscriminatorComponent t = new ElementDefinitionSlicingDiscriminatorComponent();
1110          if (this.discriminator == null)
1111            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1112          this.discriminator.add(t);
1113          return t;
1114        }
1115
1116        public ElementDefinitionSlicingComponent addDiscriminator(ElementDefinitionSlicingDiscriminatorComponent t) { //3
1117          if (t == null)
1118            return this;
1119          if (this.discriminator == null)
1120            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1121          this.discriminator.add(t);
1122          return this;
1123        }
1124
1125        /**
1126         * @return The first repetition of repeating field {@link #discriminator}, creating it if it does not already exist {3}
1127         */
1128        public ElementDefinitionSlicingDiscriminatorComponent getDiscriminatorFirstRep() { 
1129          if (getDiscriminator().isEmpty()) {
1130            addDiscriminator();
1131          }
1132          return getDiscriminator().get(0);
1133        }
1134
1135        /**
1136         * @return {@link #description} (A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1137         */
1138        public StringType getDescriptionElement() { 
1139          if (this.description == null)
1140            if (Configuration.errorOnAutoCreate())
1141              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.description");
1142            else if (Configuration.doAutoCreate())
1143              this.description = new StringType(); // bb
1144          return this.description;
1145        }
1146
1147        public boolean hasDescriptionElement() { 
1148          return this.description != null && !this.description.isEmpty();
1149        }
1150
1151        public boolean hasDescription() { 
1152          return this.description != null && !this.description.isEmpty();
1153        }
1154
1155        /**
1156         * @param value {@link #description} (A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1157         */
1158        public ElementDefinitionSlicingComponent setDescriptionElement(StringType value) { 
1159          this.description = value;
1160          return this;
1161        }
1162
1163        /**
1164         * @return A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.
1165         */
1166        public String getDescription() { 
1167          return this.description == null ? null : this.description.getValue();
1168        }
1169
1170        /**
1171         * @param value A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.
1172         */
1173        public ElementDefinitionSlicingComponent setDescription(String value) { 
1174          if (Utilities.noString(value))
1175            this.description = null;
1176          else {
1177            if (this.description == null)
1178              this.description = new StringType();
1179            this.description.setValue(value);
1180          }
1181          return this;
1182        }
1183
1184        /**
1185         * @return {@link #ordered} (If the matching elements have to occur in the same order as defined in the profile.). This is the underlying object with id, value and extensions. The accessor "getOrdered" gives direct access to the value
1186         */
1187        public BooleanType getOrderedElement() { 
1188          if (this.ordered == null)
1189            if (Configuration.errorOnAutoCreate())
1190              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.ordered");
1191            else if (Configuration.doAutoCreate())
1192              this.ordered = new BooleanType(); // bb
1193          return this.ordered;
1194        }
1195
1196        public boolean hasOrderedElement() { 
1197          return this.ordered != null && !this.ordered.isEmpty();
1198        }
1199
1200        public boolean hasOrdered() { 
1201          return this.ordered != null && !this.ordered.isEmpty();
1202        }
1203
1204        /**
1205         * @param value {@link #ordered} (If the matching elements have to occur in the same order as defined in the profile.). This is the underlying object with id, value and extensions. The accessor "getOrdered" gives direct access to the value
1206         */
1207        public ElementDefinitionSlicingComponent setOrderedElement(BooleanType value) { 
1208          this.ordered = value;
1209          return this;
1210        }
1211
1212        /**
1213         * @return If the matching elements have to occur in the same order as defined in the profile.
1214         */
1215        public boolean getOrdered() { 
1216          return this.ordered == null || this.ordered.isEmpty() ? false : this.ordered.getValue();
1217        }
1218
1219        /**
1220         * @param value If the matching elements have to occur in the same order as defined in the profile.
1221         */
1222        public ElementDefinitionSlicingComponent setOrdered(boolean value) { 
1223            if (this.ordered == null)
1224              this.ordered = new BooleanType();
1225            this.ordered.setValue(value);
1226          return this;
1227        }
1228
1229        /**
1230         * @return {@link #rules} (Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.). This is the underlying object with id, value and extensions. The accessor "getRules" gives direct access to the value
1231         */
1232        public Enumeration<SlicingRules> getRulesElement() { 
1233          if (this.rules == null)
1234            if (Configuration.errorOnAutoCreate())
1235              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.rules");
1236            else if (Configuration.doAutoCreate())
1237              this.rules = new Enumeration<SlicingRules>(new SlicingRulesEnumFactory()); // bb
1238          return this.rules;
1239        }
1240
1241        public boolean hasRulesElement() { 
1242          return this.rules != null && !this.rules.isEmpty();
1243        }
1244
1245        public boolean hasRules() { 
1246          return this.rules != null && !this.rules.isEmpty();
1247        }
1248
1249        /**
1250         * @param value {@link #rules} (Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.). This is the underlying object with id, value and extensions. The accessor "getRules" gives direct access to the value
1251         */
1252        public ElementDefinitionSlicingComponent setRulesElement(Enumeration<SlicingRules> value) { 
1253          this.rules = value;
1254          return this;
1255        }
1256
1257        /**
1258         * @return Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.
1259         */
1260        public SlicingRules getRules() { 
1261          return this.rules == null ? null : this.rules.getValue();
1262        }
1263
1264        /**
1265         * @param value Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.
1266         */
1267        public ElementDefinitionSlicingComponent setRules(SlicingRules value) { 
1268            if (this.rules == null)
1269              this.rules = new Enumeration<SlicingRules>(new SlicingRulesEnumFactory());
1270            this.rules.setValue(value);
1271          return this;
1272        }
1273
1274        protected void listChildren(List<Property> children) {
1275          super.listChildren(children);
1276          children.add(new Property("discriminator", "", "Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.", 0, java.lang.Integer.MAX_VALUE, discriminator));
1277          children.add(new Property("description", "string", "A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.", 0, 1, description));
1278          children.add(new Property("ordered", "boolean", "If the matching elements have to occur in the same order as defined in the profile.", 0, 1, ordered));
1279          children.add(new Property("rules", "code", "Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.", 0, 1, rules));
1280        }
1281
1282        @Override
1283        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1284          switch (_hash) {
1285          case -1888270692: /*discriminator*/  return new Property("discriminator", "", "Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.", 0, java.lang.Integer.MAX_VALUE, discriminator);
1286          case -1724546052: /*description*/  return new Property("description", "string", "A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.", 0, 1, description);
1287          case -1207109523: /*ordered*/  return new Property("ordered", "boolean", "If the matching elements have to occur in the same order as defined in the profile.", 0, 1, ordered);
1288          case 108873975: /*rules*/  return new Property("rules", "code", "Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.", 0, 1, rules);
1289          default: return super.getNamedProperty(_hash, _name, _checkValid);
1290          }
1291
1292        }
1293
1294      @Override
1295      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1296        switch (hash) {
1297        case -1888270692: /*discriminator*/ return this.discriminator == null ? new Base[0] : this.discriminator.toArray(new Base[this.discriminator.size()]); // ElementDefinitionSlicingDiscriminatorComponent
1298        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1299        case -1207109523: /*ordered*/ return this.ordered == null ? new Base[0] : new Base[] {this.ordered}; // BooleanType
1300        case 108873975: /*rules*/ return this.rules == null ? new Base[0] : new Base[] {this.rules}; // Enumeration<SlicingRules>
1301        default: return super.getProperty(hash, name, checkValid);
1302        }
1303
1304      }
1305
1306      @Override
1307      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1308        switch (hash) {
1309        case -1888270692: // discriminator
1310          this.getDiscriminator().add((ElementDefinitionSlicingDiscriminatorComponent) value); // ElementDefinitionSlicingDiscriminatorComponent
1311          return value;
1312        case -1724546052: // description
1313          this.description = TypeConvertor.castToString(value); // StringType
1314          return value;
1315        case -1207109523: // ordered
1316          this.ordered = TypeConvertor.castToBoolean(value); // BooleanType
1317          return value;
1318        case 108873975: // rules
1319          value = new SlicingRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
1320          this.rules = (Enumeration) value; // Enumeration<SlicingRules>
1321          return value;
1322        default: return super.setProperty(hash, name, value);
1323        }
1324
1325      }
1326
1327      @Override
1328      public Base setProperty(String name, Base value) throws FHIRException {
1329        if (name.equals("discriminator")) {
1330          this.getDiscriminator().add((ElementDefinitionSlicingDiscriminatorComponent) value);
1331        } else if (name.equals("description")) {
1332          this.description = TypeConvertor.castToString(value); // StringType
1333        } else if (name.equals("ordered")) {
1334          this.ordered = TypeConvertor.castToBoolean(value); // BooleanType
1335        } else if (name.equals("rules")) {
1336          value = new SlicingRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
1337          this.rules = (Enumeration) value; // Enumeration<SlicingRules>
1338        } else
1339          return super.setProperty(name, value);
1340        return value;
1341      }
1342
1343  @Override
1344  public void removeChild(String name, Base value) throws FHIRException {
1345        if (name.equals("discriminator")) {
1346          this.getDiscriminator().remove((ElementDefinitionSlicingDiscriminatorComponent) value);
1347        } else if (name.equals("description")) {
1348          this.description = null;
1349        } else if (name.equals("ordered")) {
1350          this.ordered = null;
1351        } else if (name.equals("rules")) {
1352          value = new SlicingRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
1353          this.rules = (Enumeration) value; // Enumeration<SlicingRules>
1354        } else
1355          super.removeChild(name, value);
1356        
1357      }
1358
1359      @Override
1360      public Base makeProperty(int hash, String name) throws FHIRException {
1361        switch (hash) {
1362        case -1888270692:  return addDiscriminator(); 
1363        case -1724546052:  return getDescriptionElement();
1364        case -1207109523:  return getOrderedElement();
1365        case 108873975:  return getRulesElement();
1366        default: return super.makeProperty(hash, name);
1367        }
1368
1369      }
1370
1371      @Override
1372      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1373        switch (hash) {
1374        case -1888270692: /*discriminator*/ return new String[] {};
1375        case -1724546052: /*description*/ return new String[] {"string"};
1376        case -1207109523: /*ordered*/ return new String[] {"boolean"};
1377        case 108873975: /*rules*/ return new String[] {"code"};
1378        default: return super.getTypesForProperty(hash, name);
1379        }
1380
1381      }
1382
1383      @Override
1384      public Base addChild(String name) throws FHIRException {
1385        if (name.equals("discriminator")) {
1386          return addDiscriminator();
1387        }
1388        else if (name.equals("description")) {
1389          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.slicing.description");
1390        }
1391        else if (name.equals("ordered")) {
1392          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.slicing.ordered");
1393        }
1394        else if (name.equals("rules")) {
1395          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.slicing.rules");
1396        }
1397        else
1398          return super.addChild(name);
1399      }
1400
1401      public ElementDefinitionSlicingComponent copy() {
1402        ElementDefinitionSlicingComponent dst = new ElementDefinitionSlicingComponent();
1403        copyValues(dst);
1404        return dst;
1405      }
1406
1407      public void copyValues(ElementDefinitionSlicingComponent dst) {
1408        super.copyValues(dst);
1409        if (discriminator != null) {
1410          dst.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1411          for (ElementDefinitionSlicingDiscriminatorComponent i : discriminator)
1412            dst.discriminator.add(i.copy());
1413        };
1414        dst.description = description == null ? null : description.copy();
1415        dst.ordered = ordered == null ? null : ordered.copy();
1416        dst.rules = rules == null ? null : rules.copy();
1417      }
1418
1419      @Override
1420      public boolean equalsDeep(Base other_) {
1421        if (!super.equalsDeep(other_))
1422          return false;
1423        if (!(other_ instanceof ElementDefinitionSlicingComponent))
1424          return false;
1425        ElementDefinitionSlicingComponent o = (ElementDefinitionSlicingComponent) other_;
1426        return compareDeep(discriminator, o.discriminator, true) && compareDeep(description, o.description, true)
1427           && compareDeep(ordered, o.ordered, true) && compareDeep(rules, o.rules, true);
1428      }
1429
1430      @Override
1431      public boolean equalsShallow(Base other_) {
1432        if (!super.equalsShallow(other_))
1433          return false;
1434        if (!(other_ instanceof ElementDefinitionSlicingComponent))
1435          return false;
1436        ElementDefinitionSlicingComponent o = (ElementDefinitionSlicingComponent) other_;
1437        return compareValues(description, o.description, true) && compareValues(ordered, o.ordered, true) && compareValues(rules, o.rules, true)
1438          ;
1439      }
1440
1441      public boolean isEmpty() {
1442        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(discriminator, description
1443          , ordered, rules);
1444      }
1445
1446      public String fhirType() {
1447        return "ElementDefinition.slicing";
1448
1449      }
1450
1451      @Override
1452      public String toString() {
1453        return (ordered == null ? "??" : "true".equals(ordered.asStringValue()) ? "ordered" : "unordered")+"/"+
1454            (rules == null ? "??" : rules.asStringValue())+" "+discriminator.toString();
1455      }
1456    }
1457
1458    @Block()
1459    public static class ElementDefinitionSlicingDiscriminatorComponent extends Element implements IBaseDatatypeElement {
1460        /**
1461         * How the element value is interpreted when discrimination is evaluated.
1462         */
1463        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1464        @Description(shortDefinition="value | exists | type | profile | position", formalDefinition="How the element value is interpreted when discrimination is evaluated." )
1465        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/discriminator-type")
1466        protected Enumeration<DiscriminatorType> type;
1467
1468        /**
1469         * A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.
1470         */
1471        @Child(name = "path", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1472        @Description(shortDefinition="Path to element value", formalDefinition="A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based." )
1473        protected StringType path;
1474
1475        private static final long serialVersionUID = 1151159293L;
1476
1477    /**
1478     * Constructor
1479     */
1480      public ElementDefinitionSlicingDiscriminatorComponent() {
1481        super();
1482      }
1483
1484    /**
1485     * Constructor
1486     */
1487      public ElementDefinitionSlicingDiscriminatorComponent(DiscriminatorType type, String path) {
1488        super();
1489        this.setType(type);
1490        this.setPath(path);
1491      }
1492
1493        /**
1494         * @return {@link #type} (How the element value is interpreted when discrimination is evaluated.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1495         */
1496        public Enumeration<DiscriminatorType> getTypeElement() { 
1497          if (this.type == null)
1498            if (Configuration.errorOnAutoCreate())
1499              throw new Error("Attempt to auto-create ElementDefinitionSlicingDiscriminatorComponent.type");
1500            else if (Configuration.doAutoCreate())
1501              this.type = new Enumeration<DiscriminatorType>(new DiscriminatorTypeEnumFactory()); // bb
1502          return this.type;
1503        }
1504
1505        public boolean hasTypeElement() { 
1506          return this.type != null && !this.type.isEmpty();
1507        }
1508
1509        public boolean hasType() { 
1510          return this.type != null && !this.type.isEmpty();
1511        }
1512
1513        /**
1514         * @param value {@link #type} (How the element value is interpreted when discrimination is evaluated.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
1515         */
1516        public ElementDefinitionSlicingDiscriminatorComponent setTypeElement(Enumeration<DiscriminatorType> value) { 
1517          this.type = value;
1518          return this;
1519        }
1520
1521        /**
1522         * @return How the element value is interpreted when discrimination is evaluated.
1523         */
1524        public DiscriminatorType getType() { 
1525          return this.type == null ? null : this.type.getValue();
1526        }
1527
1528        /**
1529         * @param value How the element value is interpreted when discrimination is evaluated.
1530         */
1531        public ElementDefinitionSlicingDiscriminatorComponent setType(DiscriminatorType value) { 
1532            if (this.type == null)
1533              this.type = new Enumeration<DiscriminatorType>(new DiscriminatorTypeEnumFactory());
1534            this.type.setValue(value);
1535          return this;
1536        }
1537
1538        /**
1539         * @return {@link #path} (A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
1540         */
1541        public StringType getPathElement() { 
1542          if (this.path == null)
1543            if (Configuration.errorOnAutoCreate())
1544              throw new Error("Attempt to auto-create ElementDefinitionSlicingDiscriminatorComponent.path");
1545            else if (Configuration.doAutoCreate())
1546              this.path = new StringType(); // bb
1547          return this.path;
1548        }
1549
1550        public boolean hasPathElement() { 
1551          return this.path != null && !this.path.isEmpty();
1552        }
1553
1554        public boolean hasPath() { 
1555          return this.path != null && !this.path.isEmpty();
1556        }
1557
1558        /**
1559         * @param value {@link #path} (A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
1560         */
1561        public ElementDefinitionSlicingDiscriminatorComponent setPathElement(StringType value) { 
1562          this.path = value;
1563          return this;
1564        }
1565
1566        /**
1567         * @return A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.
1568         */
1569        public String getPath() { 
1570          return this.path == null ? null : this.path.getValue();
1571        }
1572
1573        /**
1574         * @param value A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.
1575         */
1576        public ElementDefinitionSlicingDiscriminatorComponent setPath(String value) { 
1577            if (this.path == null)
1578              this.path = new StringType();
1579            this.path.setValue(value);
1580          return this;
1581        }
1582
1583        protected void listChildren(List<Property> children) {
1584          super.listChildren(children);
1585          children.add(new Property("type", "code", "How the element value is interpreted when discrimination is evaluated.", 0, 1, type));
1586          children.add(new Property("path", "string", "A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.", 0, 1, path));
1587        }
1588
1589        @Override
1590        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1591          switch (_hash) {
1592          case 3575610: /*type*/  return new Property("type", "code", "How the element value is interpreted when discrimination is evaluated.", 0, 1, type);
1593          case 3433509: /*path*/  return new Property("path", "string", "A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.", 0, 1, path);
1594          default: return super.getNamedProperty(_hash, _name, _checkValid);
1595          }
1596
1597        }
1598
1599      @Override
1600      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1601        switch (hash) {
1602        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<DiscriminatorType>
1603        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
1604        default: return super.getProperty(hash, name, checkValid);
1605        }
1606
1607      }
1608
1609      @Override
1610      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1611        switch (hash) {
1612        case 3575610: // type
1613          value = new DiscriminatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1614          this.type = (Enumeration) value; // Enumeration<DiscriminatorType>
1615          return value;
1616        case 3433509: // path
1617          this.path = TypeConvertor.castToString(value); // StringType
1618          return value;
1619        default: return super.setProperty(hash, name, value);
1620        }
1621
1622      }
1623
1624      @Override
1625      public Base setProperty(String name, Base value) throws FHIRException {
1626        if (name.equals("type")) {
1627          value = new DiscriminatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1628          this.type = (Enumeration) value; // Enumeration<DiscriminatorType>
1629        } else if (name.equals("path")) {
1630          this.path = TypeConvertor.castToString(value); // StringType
1631        } else
1632          return super.setProperty(name, value);
1633        return value;
1634      }
1635
1636  @Override
1637  public void removeChild(String name, Base value) throws FHIRException {
1638        if (name.equals("type")) {
1639          value = new DiscriminatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1640          this.type = (Enumeration) value; // Enumeration<DiscriminatorType>
1641        } else if (name.equals("path")) {
1642          this.path = null;
1643        } else
1644          super.removeChild(name, value);
1645        
1646      }
1647
1648      @Override
1649      public Base makeProperty(int hash, String name) throws FHIRException {
1650        switch (hash) {
1651        case 3575610:  return getTypeElement();
1652        case 3433509:  return getPathElement();
1653        default: return super.makeProperty(hash, name);
1654        }
1655
1656      }
1657
1658      @Override
1659      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1660        switch (hash) {
1661        case 3575610: /*type*/ return new String[] {"code"};
1662        case 3433509: /*path*/ return new String[] {"string"};
1663        default: return super.getTypesForProperty(hash, name);
1664        }
1665
1666      }
1667
1668      @Override
1669      public Base addChild(String name) throws FHIRException {
1670        if (name.equals("type")) {
1671          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.slicing.discriminator.type");
1672        }
1673        else if (name.equals("path")) {
1674          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.slicing.discriminator.path");
1675        }
1676        else
1677          return super.addChild(name);
1678      }
1679
1680      public ElementDefinitionSlicingDiscriminatorComponent copy() {
1681        ElementDefinitionSlicingDiscriminatorComponent dst = new ElementDefinitionSlicingDiscriminatorComponent();
1682        copyValues(dst);
1683        return dst;
1684      }
1685
1686      public void copyValues(ElementDefinitionSlicingDiscriminatorComponent dst) {
1687        super.copyValues(dst);
1688        dst.type = type == null ? null : type.copy();
1689        dst.path = path == null ? null : path.copy();
1690      }
1691
1692      @Override
1693      public boolean equalsDeep(Base other_) {
1694        if (!super.equalsDeep(other_))
1695          return false;
1696        if (!(other_ instanceof ElementDefinitionSlicingDiscriminatorComponent))
1697          return false;
1698        ElementDefinitionSlicingDiscriminatorComponent o = (ElementDefinitionSlicingDiscriminatorComponent) other_;
1699        return compareDeep(type, o.type, true) && compareDeep(path, o.path, true);
1700      }
1701
1702      @Override
1703      public boolean equalsShallow(Base other_) {
1704        if (!super.equalsShallow(other_))
1705          return false;
1706        if (!(other_ instanceof ElementDefinitionSlicingDiscriminatorComponent))
1707          return false;
1708        ElementDefinitionSlicingDiscriminatorComponent o = (ElementDefinitionSlicingDiscriminatorComponent) other_;
1709        return compareValues(type, o.type, true) && compareValues(path, o.path, true);
1710      }
1711
1712      public boolean isEmpty() {
1713        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, path);
1714      }
1715
1716  public String fhirType() {
1717    return "ElementDefinition.slicing.discriminator";
1718
1719  }
1720
1721  @Override
1722  public String toString() {
1723    return (type == null ? "??" : type.getCode()) + "="+(path == null ? "??" : path.asStringValue());
1724  }
1725
1726  }
1727
1728    @Block()
1729    public static class ElementDefinitionBaseComponent extends Element implements IBaseDatatypeElement {
1730        /**
1731         * The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.
1732         */
1733        @Child(name = "path", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1734        @Description(shortDefinition="Path that identifies the base element", formalDefinition="The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base." )
1735        protected StringType path;
1736
1737        /**
1738         * Minimum cardinality of the base element identified by the path.
1739         */
1740        @Child(name = "min", type = {UnsignedIntType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1741        @Description(shortDefinition="Min cardinality of the base element", formalDefinition="Minimum cardinality of the base element identified by the path." )
1742        protected UnsignedIntType min;
1743
1744        /**
1745         * Maximum cardinality of the base element identified by the path.
1746         */
1747        @Child(name = "max", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1748        @Description(shortDefinition="Max cardinality of the base element", formalDefinition="Maximum cardinality of the base element identified by the path." )
1749        protected StringType max;
1750
1751        private static final long serialVersionUID = -1412704221L;
1752
1753    /**
1754     * Constructor
1755     */
1756      public ElementDefinitionBaseComponent() {
1757        super();
1758      }
1759
1760    /**
1761     * Constructor
1762     */
1763      public ElementDefinitionBaseComponent(String path, int min, String max) {
1764        super();
1765        this.setPath(path);
1766        this.setMin(min);
1767        this.setMax(max);
1768      }
1769
1770        /**
1771         * @return {@link #path} (The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
1772         */
1773        public StringType getPathElement() { 
1774          if (this.path == null)
1775            if (Configuration.errorOnAutoCreate())
1776              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.path");
1777            else if (Configuration.doAutoCreate())
1778              this.path = new StringType(); // bb
1779          return this.path;
1780        }
1781
1782        public boolean hasPathElement() { 
1783          return this.path != null && !this.path.isEmpty();
1784        }
1785
1786        public boolean hasPath() { 
1787          return this.path != null && !this.path.isEmpty();
1788        }
1789
1790        /**
1791         * @param value {@link #path} (The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
1792         */
1793        public ElementDefinitionBaseComponent setPathElement(StringType value) { 
1794          this.path = value;
1795          return this;
1796        }
1797
1798        /**
1799         * @return The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.
1800         */
1801        public String getPath() { 
1802          return this.path == null ? null : this.path.getValue();
1803        }
1804
1805        /**
1806         * @param value The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.
1807         */
1808        public ElementDefinitionBaseComponent setPath(String value) { 
1809            if (this.path == null)
1810              this.path = new StringType();
1811            this.path.setValue(value);
1812          return this;
1813        }
1814
1815        /**
1816         * @return {@link #min} (Minimum cardinality of the base element identified by the path.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
1817         */
1818        public UnsignedIntType getMinElement() { 
1819          if (this.min == null)
1820            if (Configuration.errorOnAutoCreate())
1821              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.min");
1822            else if (Configuration.doAutoCreate())
1823              this.min = new UnsignedIntType(); // bb
1824          return this.min;
1825        }
1826
1827        public boolean hasMinElement() { 
1828          return this.min != null && !this.min.isEmpty();
1829        }
1830
1831        public boolean hasMin() { 
1832          return this.min != null && !this.min.isEmpty();
1833        }
1834
1835        /**
1836         * @param value {@link #min} (Minimum cardinality of the base element identified by the path.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
1837         */
1838        public ElementDefinitionBaseComponent setMinElement(UnsignedIntType value) { 
1839          this.min = value;
1840          return this;
1841        }
1842
1843        /**
1844         * @return Minimum cardinality of the base element identified by the path.
1845         */
1846        public int getMin() { 
1847          return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
1848        }
1849
1850        /**
1851         * @param value Minimum cardinality of the base element identified by the path.
1852         */
1853        public ElementDefinitionBaseComponent setMin(int value) { 
1854            if (this.min == null)
1855              this.min = new UnsignedIntType();
1856            this.min.setValue(value);
1857          return this;
1858        }
1859
1860        /**
1861         * @return {@link #max} (Maximum cardinality of the base element identified by the path.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
1862         */
1863        public StringType getMaxElement() { 
1864          if (this.max == null)
1865            if (Configuration.errorOnAutoCreate())
1866              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.max");
1867            else if (Configuration.doAutoCreate())
1868              this.max = new StringType(); // bb
1869          return this.max;
1870        }
1871
1872        public boolean hasMaxElement() { 
1873          return this.max != null && !this.max.isEmpty();
1874        }
1875
1876        public boolean hasMax() { 
1877          return this.max != null && !this.max.isEmpty();
1878        }
1879
1880        /**
1881         * @param value {@link #max} (Maximum cardinality of the base element identified by the path.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
1882         */
1883        public ElementDefinitionBaseComponent setMaxElement(StringType value) { 
1884          this.max = value;
1885          return this;
1886        }
1887
1888        /**
1889         * @return Maximum cardinality of the base element identified by the path.
1890         */
1891        public String getMax() { 
1892          return this.max == null ? null : this.max.getValue();
1893        }
1894
1895        /**
1896         * @param value Maximum cardinality of the base element identified by the path.
1897         */
1898        public ElementDefinitionBaseComponent setMax(String value) { 
1899            if (this.max == null)
1900              this.max = new StringType();
1901            this.max.setValue(value);
1902          return this;
1903        }
1904
1905        protected void listChildren(List<Property> children) {
1906          super.listChildren(children);
1907          children.add(new Property("path", "string", "The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.", 0, 1, path));
1908          children.add(new Property("min", "unsignedInt", "Minimum cardinality of the base element identified by the path.", 0, 1, min));
1909          children.add(new Property("max", "string", "Maximum cardinality of the base element identified by the path.", 0, 1, max));
1910        }
1911
1912        @Override
1913        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1914          switch (_hash) {
1915          case 3433509: /*path*/  return new Property("path", "string", "The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [StructureDefinition](structuredefinition.html#) without a StructureDefinition.base.", 0, 1, path);
1916          case 108114: /*min*/  return new Property("min", "unsignedInt", "Minimum cardinality of the base element identified by the path.", 0, 1, min);
1917          case 107876: /*max*/  return new Property("max", "string", "Maximum cardinality of the base element identified by the path.", 0, 1, max);
1918          default: return super.getNamedProperty(_hash, _name, _checkValid);
1919          }
1920
1921        }
1922
1923      @Override
1924      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1925        switch (hash) {
1926        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
1927        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // UnsignedIntType
1928        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
1929        default: return super.getProperty(hash, name, checkValid);
1930        }
1931
1932      }
1933
1934      @Override
1935      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1936        switch (hash) {
1937        case 3433509: // path
1938          this.path = TypeConvertor.castToString(value); // StringType
1939          return value;
1940        case 108114: // min
1941          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1942          return value;
1943        case 107876: // max
1944          this.max = TypeConvertor.castToString(value); // StringType
1945          return value;
1946        default: return super.setProperty(hash, name, value);
1947        }
1948
1949      }
1950
1951      @Override
1952      public Base setProperty(String name, Base value) throws FHIRException {
1953        if (name.equals("path")) {
1954          this.path = TypeConvertor.castToString(value); // StringType
1955        } else if (name.equals("min")) {
1956          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1957        } else if (name.equals("max")) {
1958          this.max = TypeConvertor.castToString(value); // StringType
1959        } else
1960          return super.setProperty(name, value);
1961        return value;
1962      }
1963
1964  @Override
1965  public void removeChild(String name, Base value) throws FHIRException {
1966        if (name.equals("path")) {
1967          this.path = null;
1968        } else if (name.equals("min")) {
1969          this.min = null;
1970        } else if (name.equals("max")) {
1971          this.max = null;
1972        } else
1973          super.removeChild(name, value);
1974        
1975      }
1976
1977      @Override
1978      public Base makeProperty(int hash, String name) throws FHIRException {
1979        switch (hash) {
1980        case 3433509:  return getPathElement();
1981        case 108114:  return getMinElement();
1982        case 107876:  return getMaxElement();
1983        default: return super.makeProperty(hash, name);
1984        }
1985
1986      }
1987
1988      @Override
1989      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1990        switch (hash) {
1991        case 3433509: /*path*/ return new String[] {"string"};
1992        case 108114: /*min*/ return new String[] {"unsignedInt"};
1993        case 107876: /*max*/ return new String[] {"string"};
1994        default: return super.getTypesForProperty(hash, name);
1995        }
1996
1997      }
1998
1999      @Override
2000      public Base addChild(String name) throws FHIRException {
2001        if (name.equals("path")) {
2002          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.base.path");
2003        }
2004        else if (name.equals("min")) {
2005          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.base.min");
2006        }
2007        else if (name.equals("max")) {
2008          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.base.max");
2009        }
2010        else
2011          return super.addChild(name);
2012      }
2013
2014      public ElementDefinitionBaseComponent copy() {
2015        ElementDefinitionBaseComponent dst = new ElementDefinitionBaseComponent();
2016        copyValues(dst);
2017        return dst;
2018      }
2019
2020      public void copyValues(ElementDefinitionBaseComponent dst) {
2021        super.copyValues(dst);
2022        dst.path = path == null ? null : path.copy();
2023        dst.min = min == null ? null : min.copy();
2024        dst.max = max == null ? null : max.copy();
2025      }
2026
2027      @Override
2028      public boolean equalsDeep(Base other_) {
2029        if (!super.equalsDeep(other_))
2030          return false;
2031        if (!(other_ instanceof ElementDefinitionBaseComponent))
2032          return false;
2033        ElementDefinitionBaseComponent o = (ElementDefinitionBaseComponent) other_;
2034        return compareDeep(path, o.path, true) && compareDeep(min, o.min, true) && compareDeep(max, o.max, true)
2035          ;
2036      }
2037
2038      @Override
2039      public boolean equalsShallow(Base other_) {
2040        if (!super.equalsShallow(other_))
2041          return false;
2042        if (!(other_ instanceof ElementDefinitionBaseComponent))
2043          return false;
2044        ElementDefinitionBaseComponent o = (ElementDefinitionBaseComponent) other_;
2045        return compareValues(path, o.path, true) && compareValues(min, o.min, true) && compareValues(max, o.max, true)
2046          ;
2047      }
2048
2049      public boolean isEmpty() {
2050        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(path, min, max);
2051      }
2052
2053  public String fhirType() {
2054    return "ElementDefinition.base";
2055
2056  }
2057
2058  }
2059
2060    @Block()
2061    public static class TypeRefComponent extends Element implements IBaseDatatypeElement {
2062        /**
2063         * URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
2064         */
2065        @Child(name = "code", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2066        @Description(shortDefinition="Data type or Resource (reference to definition)", formalDefinition="URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models." )
2067        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/elementdefinition-types")
2068        protected UriType code;
2069
2070        /**
2071         * Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.
2072         */
2073        @Child(name = "profile", type = {CanonicalType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2074        @Description(shortDefinition="Profiles (StructureDefinition or IG) - one must apply", formalDefinition="Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide." )
2075        protected List<CanonicalType> profile;
2076
2077        /**
2078         * Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.
2079         */
2080        @Child(name = "targetProfile", type = {CanonicalType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2081        @Description(shortDefinition="Profile (StructureDefinition or IG) on the Reference/canonical target - one must apply", formalDefinition="Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide." )
2082        protected List<CanonicalType> targetProfile;
2083
2084        /**
2085         * If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.
2086         */
2087        @Child(name = "aggregation", type = {CodeType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2088        @Description(shortDefinition="contained | referenced | bundled - how aggregated", formalDefinition="If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle." )
2089        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-aggregation-mode")
2090        protected List<Enumeration<AggregationMode>> aggregation;
2091
2092        /**
2093         * Whether this reference needs to be version specific or version independent, or whether either can be used.
2094         */
2095        @Child(name = "versioning", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
2096        @Description(shortDefinition="either | independent | specific", formalDefinition="Whether this reference needs to be version specific or version independent, or whether either can be used." )
2097        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/reference-version-rules")
2098        protected Enumeration<ReferenceVersionRules> versioning;
2099
2100        private static final long serialVersionUID = 957891653L;
2101
2102    /**
2103     * Constructor
2104     */
2105      public TypeRefComponent() {
2106        super();
2107      }
2108
2109    /**
2110     * Constructor
2111     */
2112      public TypeRefComponent(String code) {
2113        super();
2114        this.setCode(code);
2115      }
2116
2117        /**
2118         * @return {@link #code} (URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
2119         */
2120        public UriType getCodeElement() { 
2121          if (this.code == null)
2122            if (Configuration.errorOnAutoCreate())
2123              throw new Error("Attempt to auto-create TypeRefComponent.code");
2124            else if (Configuration.doAutoCreate())
2125              this.code = new UriType(); // bb
2126          return this.code;
2127        }
2128
2129        public boolean hasCodeElement() { 
2130          return this.code != null && !this.code.isEmpty();
2131        }
2132
2133        public boolean hasCode() { 
2134          return this.code != null && !this.code.isEmpty();
2135        }
2136
2137        /**
2138         * @param value {@link #code} (URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
2139         */
2140        public TypeRefComponent setCodeElement(UriType value) { 
2141          this.code = value;
2142          return this;
2143        }
2144
2145        /**
2146         * @return URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
2147         */
2148        public String getCode() { 
2149          return this.code == null ? null : this.code.getValue();
2150        }
2151
2152        /**
2153         * @param value URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. "string" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.
2154         */
2155        public TypeRefComponent setCode(String value) { 
2156            if (this.code == null)
2157              this.code = new UriType();
2158            this.code.setValue(value);
2159          return this;
2160        }
2161
2162        /**
2163         * @return {@link #profile} (Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.)
2164         */
2165        public List<CanonicalType> getProfile() { 
2166          if (this.profile == null)
2167            this.profile = new ArrayList<CanonicalType>();
2168          return this.profile;
2169        }
2170
2171        /**
2172         * @return Returns a reference to <code>this</code> for easy method chaining
2173         */
2174        public TypeRefComponent setProfile(List<CanonicalType> theProfile) { 
2175          this.profile = theProfile;
2176          return this;
2177        }
2178
2179        public boolean hasProfile() { 
2180          if (this.profile == null)
2181            return false;
2182          for (CanonicalType item : this.profile)
2183            if (!item.isEmpty())
2184              return true;
2185          return false;
2186        }
2187
2188        /**
2189         * @return {@link #profile} (Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.)
2190         */
2191        public CanonicalType addProfileElement() {//2 
2192          CanonicalType t = new CanonicalType();
2193          if (this.profile == null)
2194            this.profile = new ArrayList<CanonicalType>();
2195          this.profile.add(t);
2196          return t;
2197        }
2198
2199        /**
2200         * @param value {@link #profile} (Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.)
2201         */
2202        public TypeRefComponent addProfile(String value) { //1
2203          CanonicalType t = new CanonicalType();
2204          t.setValue(value);
2205          if (this.profile == null)
2206            this.profile = new ArrayList<CanonicalType>();
2207          this.profile.add(t);
2208          return this;
2209        }
2210
2211        /**
2212         * @param value {@link #profile} (Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.)
2213         */
2214        public boolean hasProfile(String value) { 
2215          if (this.profile == null)
2216            return false;
2217          for (CanonicalType v : this.profile)
2218            if (v.getValue().equals(value)) // canonical
2219              return true;
2220          return false;
2221        }
2222
2223        /**
2224         * @return {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
2225         */
2226        public List<CanonicalType> getTargetProfile() { 
2227          if (this.targetProfile == null)
2228            this.targetProfile = new ArrayList<CanonicalType>();
2229          return this.targetProfile;
2230        }
2231
2232        /**
2233         * @return Returns a reference to <code>this</code> for easy method chaining
2234         */
2235        public TypeRefComponent setTargetProfile(List<CanonicalType> theTargetProfile) { 
2236          this.targetProfile = theTargetProfile;
2237          return this;
2238        }
2239
2240        public boolean hasTargetProfile() { 
2241          if (this.targetProfile == null)
2242            return false;
2243          for (CanonicalType item : this.targetProfile)
2244            if (!item.isEmpty())
2245              return true;
2246          return false;
2247        }
2248
2249        /**
2250         * @return {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
2251         */
2252        public CanonicalType addTargetProfileElement() {//2 
2253          CanonicalType t = new CanonicalType();
2254          if (this.targetProfile == null)
2255            this.targetProfile = new ArrayList<CanonicalType>();
2256          this.targetProfile.add(t);
2257          return t;
2258        }
2259
2260        /**
2261         * @param value {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
2262         */
2263        public TypeRefComponent addTargetProfile(String value) { //1
2264          CanonicalType t = new CanonicalType();
2265          t.setValue(value);
2266          if (this.targetProfile == null)
2267            this.targetProfile = new ArrayList<CanonicalType>();
2268          this.targetProfile.add(t);
2269          return this;
2270        }
2271
2272        /**
2273         * @param value {@link #targetProfile} (Used when the type is "Reference" or "canonical", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.)
2274         */
2275        public boolean hasTargetProfile(String value) { 
2276          if (this.targetProfile == null)
2277            return false;
2278          for (CanonicalType v : this.targetProfile)
2279            if (v.getValue().equals(value)) // canonical
2280              return true;
2281          return false;
2282        }
2283
2284        /**
2285         * @return {@link #aggregation} (If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.)
2286         */
2287        public List<Enumeration<AggregationMode>> getAggregation() { 
2288          if (this.aggregation == null)
2289            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2290          return this.aggregation;
2291        }
2292
2293        /**
2294         * @return Returns a reference to <code>this</code> for easy method chaining
2295         */
2296        public TypeRefComponent setAggregation(List<Enumeration<AggregationMode>> theAggregation) { 
2297          this.aggregation = theAggregation;
2298          return this;
2299        }
2300
2301        public boolean hasAggregation() { 
2302          if (this.aggregation == null)
2303            return false;
2304          for (Enumeration<AggregationMode> item : this.aggregation)
2305            if (!item.isEmpty())
2306              return true;
2307          return false;
2308        }
2309
2310        /**
2311         * @return {@link #aggregation} (If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.)
2312         */
2313        public Enumeration<AggregationMode> addAggregationElement() {//2 
2314          Enumeration<AggregationMode> t = new Enumeration<AggregationMode>(new AggregationModeEnumFactory());
2315          if (this.aggregation == null)
2316            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2317          this.aggregation.add(t);
2318          return t;
2319        }
2320
2321        /**
2322         * @param value {@link #aggregation} (If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.)
2323         */
2324        public TypeRefComponent addAggregation(AggregationMode value) { //1
2325          Enumeration<AggregationMode> t = new Enumeration<AggregationMode>(new AggregationModeEnumFactory());
2326          t.setValue(value);
2327          if (this.aggregation == null)
2328            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2329          this.aggregation.add(t);
2330          return this;
2331        }
2332
2333        /**
2334         * @param value {@link #aggregation} (If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.)
2335         */
2336        public boolean hasAggregation(AggregationMode value) { 
2337          if (this.aggregation == null)
2338            return false;
2339          for (Enumeration<AggregationMode> v : this.aggregation)
2340            if (v.getValue().equals(value)) // code
2341              return true;
2342          return false;
2343        }
2344
2345        /**
2346         * @return {@link #versioning} (Whether this reference needs to be version specific or version independent, or whether either can be used.). This is the underlying object with id, value and extensions. The accessor "getVersioning" gives direct access to the value
2347         */
2348        public Enumeration<ReferenceVersionRules> getVersioningElement() { 
2349          if (this.versioning == null)
2350            if (Configuration.errorOnAutoCreate())
2351              throw new Error("Attempt to auto-create TypeRefComponent.versioning");
2352            else if (Configuration.doAutoCreate())
2353              this.versioning = new Enumeration<ReferenceVersionRules>(new ReferenceVersionRulesEnumFactory()); // bb
2354          return this.versioning;
2355        }
2356
2357        public boolean hasVersioningElement() { 
2358          return this.versioning != null && !this.versioning.isEmpty();
2359        }
2360
2361        public boolean hasVersioning() { 
2362          return this.versioning != null && !this.versioning.isEmpty();
2363        }
2364
2365        /**
2366         * @param value {@link #versioning} (Whether this reference needs to be version specific or version independent, or whether either can be used.). This is the underlying object with id, value and extensions. The accessor "getVersioning" gives direct access to the value
2367         */
2368        public TypeRefComponent setVersioningElement(Enumeration<ReferenceVersionRules> value) { 
2369          this.versioning = value;
2370          return this;
2371        }
2372
2373        /**
2374         * @return Whether this reference needs to be version specific or version independent, or whether either can be used.
2375         */
2376        public ReferenceVersionRules getVersioning() { 
2377          return this.versioning == null ? null : this.versioning.getValue();
2378        }
2379
2380        /**
2381         * @param value Whether this reference needs to be version specific or version independent, or whether either can be used.
2382         */
2383        public TypeRefComponent setVersioning(ReferenceVersionRules value) { 
2384          if (value == null)
2385            this.versioning = null;
2386          else {
2387            if (this.versioning == null)
2388              this.versioning = new Enumeration<ReferenceVersionRules>(new ReferenceVersionRulesEnumFactory());
2389            this.versioning.setValue(value);
2390          }
2391          return this;
2392        }
2393
2394        protected void listChildren(List<Property> children) {
2395          super.listChildren(children);
2396          children.add(new Property("code", "uri", "URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", 0, 1, code));
2397          children.add(new Property("profile", "canonical(StructureDefinition|ImplementationGuide)", "Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, profile));
2398          children.add(new Property("targetProfile", "canonical(StructureDefinition|ImplementationGuide)", "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, targetProfile));
2399          children.add(new Property("aggregation", "code", "If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.", 0, java.lang.Integer.MAX_VALUE, aggregation));
2400          children.add(new Property("versioning", "code", "Whether this reference needs to be version specific or version independent, or whether either can be used.", 0, 1, versioning));
2401        }
2402
2403        @Override
2404        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2405          switch (_hash) {
2406          case 3059181: /*code*/  return new Property("code", "uri", "URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", 0, 1, code);
2407          case -309425751: /*profile*/  return new Property("profile", "canonical(StructureDefinition|ImplementationGuide)", "Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, profile);
2408          case 1994521304: /*targetProfile*/  return new Property("targetProfile", "canonical(StructureDefinition|ImplementationGuide)", "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", 0, java.lang.Integer.MAX_VALUE, targetProfile);
2409          case 841524962: /*aggregation*/  return new Property("aggregation", "code", "If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.", 0, java.lang.Integer.MAX_VALUE, aggregation);
2410          case -670487542: /*versioning*/  return new Property("versioning", "code", "Whether this reference needs to be version specific or version independent, or whether either can be used.", 0, 1, versioning);
2411          default: return super.getNamedProperty(_hash, _name, _checkValid);
2412          }
2413
2414        }
2415
2416      @Override
2417      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2418        switch (hash) {
2419        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // UriType
2420        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : this.profile.toArray(new Base[this.profile.size()]); // CanonicalType
2421        case 1994521304: /*targetProfile*/ return this.targetProfile == null ? new Base[0] : this.targetProfile.toArray(new Base[this.targetProfile.size()]); // CanonicalType
2422        case 841524962: /*aggregation*/ return this.aggregation == null ? new Base[0] : this.aggregation.toArray(new Base[this.aggregation.size()]); // Enumeration<AggregationMode>
2423        case -670487542: /*versioning*/ return this.versioning == null ? new Base[0] : new Base[] {this.versioning}; // Enumeration<ReferenceVersionRules>
2424        default: return super.getProperty(hash, name, checkValid);
2425        }
2426
2427      }
2428
2429      @Override
2430      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2431        switch (hash) {
2432        case 3059181: // code
2433          this.code = TypeConvertor.castToUri(value); // UriType
2434          return value;
2435        case -309425751: // profile
2436          this.getProfile().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2437          return value;
2438        case 1994521304: // targetProfile
2439          this.getTargetProfile().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2440          return value;
2441        case 841524962: // aggregation
2442          value = new AggregationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
2443          this.getAggregation().add((Enumeration) value); // Enumeration<AggregationMode>
2444          return value;
2445        case -670487542: // versioning
2446          value = new ReferenceVersionRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
2447          this.versioning = (Enumeration) value; // Enumeration<ReferenceVersionRules>
2448          return value;
2449        default: return super.setProperty(hash, name, value);
2450        }
2451
2452      }
2453
2454      @Override
2455      public Base setProperty(String name, Base value) throws FHIRException {
2456        if (name.equals("code")) {
2457          this.code = TypeConvertor.castToUri(value); // UriType
2458        } else if (name.equals("profile")) {
2459          this.getProfile().add(TypeConvertor.castToCanonical(value));
2460        } else if (name.equals("targetProfile")) {
2461          this.getTargetProfile().add(TypeConvertor.castToCanonical(value));
2462        } else if (name.equals("aggregation")) {
2463          value = new AggregationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
2464          this.getAggregation().add((Enumeration) value);
2465        } else if (name.equals("versioning")) {
2466          value = new ReferenceVersionRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
2467          this.versioning = (Enumeration) value; // Enumeration<ReferenceVersionRules>
2468        } else
2469          return super.setProperty(name, value);
2470        return value;
2471      }
2472
2473  @Override
2474  public void removeChild(String name, Base value) throws FHIRException {
2475        if (name.equals("code")) {
2476          this.code = null;
2477        } else if (name.equals("profile")) {
2478          this.getProfile().remove(value);
2479        } else if (name.equals("targetProfile")) {
2480          this.getTargetProfile().remove(value);
2481        } else if (name.equals("aggregation")) {
2482          value = new AggregationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
2483          this.getAggregation().remove((Enumeration) value);
2484        } else if (name.equals("versioning")) {
2485          value = new ReferenceVersionRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
2486          this.versioning = (Enumeration) value; // Enumeration<ReferenceVersionRules>
2487        } else
2488          super.removeChild(name, value);
2489        
2490      }
2491
2492      @Override
2493      public Base makeProperty(int hash, String name) throws FHIRException {
2494        switch (hash) {
2495        case 3059181:  return getCodeElement();
2496        case -309425751:  return addProfileElement();
2497        case 1994521304:  return addTargetProfileElement();
2498        case 841524962:  return addAggregationElement();
2499        case -670487542:  return getVersioningElement();
2500        default: return super.makeProperty(hash, name);
2501        }
2502
2503      }
2504
2505      @Override
2506      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2507        switch (hash) {
2508        case 3059181: /*code*/ return new String[] {"uri"};
2509        case -309425751: /*profile*/ return new String[] {"canonical"};
2510        case 1994521304: /*targetProfile*/ return new String[] {"canonical"};
2511        case 841524962: /*aggregation*/ return new String[] {"code"};
2512        case -670487542: /*versioning*/ return new String[] {"code"};
2513        default: return super.getTypesForProperty(hash, name);
2514        }
2515
2516      }
2517
2518      @Override
2519      public Base addChild(String name) throws FHIRException {
2520        if (name.equals("code")) {
2521          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.type.code");
2522        }
2523        else if (name.equals("profile")) {
2524          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.type.profile");
2525        }
2526        else if (name.equals("targetProfile")) {
2527          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.type.targetProfile");
2528        }
2529        else if (name.equals("aggregation")) {
2530          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.type.aggregation");
2531        }
2532        else if (name.equals("versioning")) {
2533          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.type.versioning");
2534        }
2535        else
2536          return super.addChild(name);
2537      }
2538
2539      public TypeRefComponent copy() {
2540        TypeRefComponent dst = new TypeRefComponent();
2541        copyValues(dst);
2542        return dst;
2543      }
2544
2545      public void copyValues(TypeRefComponent dst) {
2546        super.copyValues(dst);
2547        dst.code = code == null ? null : code.copy();
2548        if (profile != null) {
2549          dst.profile = new ArrayList<CanonicalType>();
2550          for (CanonicalType i : profile)
2551            dst.profile.add(i.copy());
2552        };
2553        if (targetProfile != null) {
2554          dst.targetProfile = new ArrayList<CanonicalType>();
2555          for (CanonicalType i : targetProfile)
2556            dst.targetProfile.add(i.copy());
2557        };
2558        if (aggregation != null) {
2559          dst.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2560          for (Enumeration<AggregationMode> i : aggregation)
2561            dst.aggregation.add(i.copy());
2562        };
2563        dst.versioning = versioning == null ? null : versioning.copy();
2564      }
2565
2566      @Override
2567      public boolean equalsDeep(Base other_) {
2568        if (!super.equalsDeep(other_))
2569          return false;
2570        if (!(other_ instanceof TypeRefComponent))
2571          return false;
2572        TypeRefComponent o = (TypeRefComponent) other_;
2573        return compareDeep(code, o.code, true) && compareDeep(profile, o.profile, true) && compareDeep(targetProfile, o.targetProfile, true)
2574           && compareDeep(aggregation, o.aggregation, true) && compareDeep(versioning, o.versioning, true)
2575          ;
2576      }
2577
2578      @Override
2579      public boolean equalsShallow(Base other_) {
2580        if (!super.equalsShallow(other_))
2581          return false;
2582        if (!(other_ instanceof TypeRefComponent))
2583          return false;
2584        TypeRefComponent o = (TypeRefComponent) other_;
2585        return compareValues(code, o.code, true) && compareValues(profile, o.profile, true) && compareValues(targetProfile, o.targetProfile, true)
2586           && compareValues(aggregation, o.aggregation, true) && compareValues(versioning, o.versioning, true)
2587          ;
2588      }
2589
2590      public boolean isEmpty() {
2591        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, profile, targetProfile
2592          , aggregation, versioning);
2593      }
2594
2595  public String fhirType() {
2596    return "ElementDefinition.type";
2597
2598  }
2599
2600// added from java-adornments.txt:
2601public boolean hasTarget() {
2602    return Utilities.existsInList(getCode(), "Reference", "canonical", "CodeableReference");
2603  }
2604  
2605    /**
2606   * This code checks for the system prefix and returns the FHIR type
2607   * 
2608   * @return
2609   */
2610  public String getWorkingCode() {
2611    if (hasExtension(ToolingExtensions.EXT_FHIR_TYPE))
2612      return getExtensionString(ToolingExtensions.EXT_FHIR_TYPE);
2613    if (!hasCodeElement()) 
2614      return null;
2615    if (getCodeElement().hasExtension(ToolingExtensions.EXT_XML_TYPE)) {
2616      String s = getCodeElement().getExtensionString(ToolingExtensions.EXT_XML_TYPE);
2617      if ("xsd:gYear OR xsd:gYearMonth OR xsd:date OR xsd:dateTime".equalsIgnoreCase(s))
2618        return "dateTime";
2619      if ("xsd:gYear OR xsd:gYearMonth OR xsd:date".equalsIgnoreCase(s))
2620        return "date";
2621      if ("xsd:dateTime".equalsIgnoreCase(s))
2622        return "instant";
2623      if ("xsd:token".equals(s))
2624        return "code";
2625      if ("xsd:boolean".equals(s))
2626        return "boolean";
2627      if ("xsd:string".equals(s))
2628        return "string";
2629      if ("xsd:time".equals(s))
2630        return "time";
2631      if ("xsd:int".equals(s))
2632        return "integer";
2633      if ("xsd:decimal OR xsd:double".equals(s))
2634        return "decimal";
2635      if ("xsd:decimal".equalsIgnoreCase(s))
2636        return "decimal";
2637      if ("xsd:base64Binary".equalsIgnoreCase(s))
2638        return "base64Binary";
2639      if ("xsd:positiveInteger".equalsIgnoreCase(s))
2640        return "positiveInt";
2641      if ("xsd:nonNegativeInteger".equalsIgnoreCase(s))
2642        return "unsignedInt";
2643      if ("xsd:anyURI".equalsIgnoreCase(s))
2644        return "uri";
2645      if ("xhtml:div".equalsIgnoreCase(s))
2646        return "xhtml";
2647      
2648      throw new Error("Unknown xml type '"+s+"'");
2649    }
2650    return getCode();
2651  }
2652
2653  @Override
2654  public String toString() {
2655    String res = getCode();
2656    if (hasProfile()) {
2657      res = res + "{";
2658      boolean first = true;
2659      for (CanonicalType s : getProfile()) {
2660        if (first) first = false; else res = res + "|";
2661        res = res + s.getValue();
2662      }
2663      res = res + "}";
2664    }
2665    if (hasTargetProfile()) {
2666      res = res + "(";
2667      boolean first = true;
2668      for (CanonicalType s : getTargetProfile()) {
2669        if (first) first = false; else res = res + "|";
2670        res = res + s.getValue();
2671      }
2672      res = res + ")";
2673    }    
2674    return res;
2675  }
2676
2677  public String getName() {
2678    return getWorkingCode();
2679  }
2680
2681  public boolean isResourceReference() {
2682    return "Reference".equals(getCode()) && hasTargetProfile();
2683  }
2684// end addition
2685  }
2686
2687    @Block()
2688    public static class ElementDefinitionExampleComponent extends Element implements IBaseDatatypeElement {
2689        /**
2690         * Describes the purpose of this example among the set of examples.
2691         */
2692        @Child(name = "label", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2693        @Description(shortDefinition="Describes the purpose of this example", formalDefinition="Describes the purpose of this example among the set of examples." )
2694        protected StringType label;
2695
2696        /**
2697         * The actual value for the element, which must be one of the types allowed for this element.
2698         */
2699        @Child(name = "value", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=2, min=1, max=1, modifier=false, summary=true)
2700        @Description(shortDefinition="Value of Example (one of allowed types)", formalDefinition="The actual value for the element, which must be one of the types allowed for this element." )
2701        protected DataType value;
2702
2703        private static final long serialVersionUID = 463190922L;
2704
2705    /**
2706     * Constructor
2707     */
2708      public ElementDefinitionExampleComponent() {
2709        super();
2710      }
2711
2712    /**
2713     * Constructor
2714     */
2715      public ElementDefinitionExampleComponent(String label, DataType value) {
2716        super();
2717        this.setLabel(label);
2718        this.setValue(value);
2719      }
2720
2721        /**
2722         * @return {@link #label} (Describes the purpose of this example among the set of examples.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
2723         */
2724        public StringType getLabelElement() { 
2725          if (this.label == null)
2726            if (Configuration.errorOnAutoCreate())
2727              throw new Error("Attempt to auto-create ElementDefinitionExampleComponent.label");
2728            else if (Configuration.doAutoCreate())
2729              this.label = new StringType(); // bb
2730          return this.label;
2731        }
2732
2733        public boolean hasLabelElement() { 
2734          return this.label != null && !this.label.isEmpty();
2735        }
2736
2737        public boolean hasLabel() { 
2738          return this.label != null && !this.label.isEmpty();
2739        }
2740
2741        /**
2742         * @param value {@link #label} (Describes the purpose of this example among the set of examples.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
2743         */
2744        public ElementDefinitionExampleComponent setLabelElement(StringType value) { 
2745          this.label = value;
2746          return this;
2747        }
2748
2749        /**
2750         * @return Describes the purpose of this example among the set of examples.
2751         */
2752        public String getLabel() { 
2753          return this.label == null ? null : this.label.getValue();
2754        }
2755
2756        /**
2757         * @param value Describes the purpose of this example among the set of examples.
2758         */
2759        public ElementDefinitionExampleComponent setLabel(String value) { 
2760            if (this.label == null)
2761              this.label = new StringType();
2762            this.label.setValue(value);
2763          return this;
2764        }
2765
2766        /**
2767         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2768         */
2769        public DataType getValue() { 
2770          return this.value;
2771        }
2772
2773        /**
2774         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2775         */
2776        public Base64BinaryType getValueBase64BinaryType() throws FHIRException { 
2777          if (this.value == null)
2778            this.value = new Base64BinaryType();
2779          if (!(this.value instanceof Base64BinaryType))
2780            throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.value.getClass().getName()+" was encountered");
2781          return (Base64BinaryType) this.value;
2782        }
2783
2784        public boolean hasValueBase64BinaryType() { 
2785          return this != null && this.value instanceof Base64BinaryType;
2786        }
2787
2788        /**
2789         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2790         */
2791        public BooleanType getValueBooleanType() throws FHIRException { 
2792          if (this.value == null)
2793            this.value = new BooleanType();
2794          if (!(this.value instanceof BooleanType))
2795            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2796          return (BooleanType) this.value;
2797        }
2798
2799        public boolean hasValueBooleanType() { 
2800          return this != null && this.value instanceof BooleanType;
2801        }
2802
2803        /**
2804         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2805         */
2806        public CanonicalType getValueCanonicalType() throws FHIRException { 
2807          if (this.value == null)
2808            this.value = new CanonicalType();
2809          if (!(this.value instanceof CanonicalType))
2810            throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.value.getClass().getName()+" was encountered");
2811          return (CanonicalType) this.value;
2812        }
2813
2814        public boolean hasValueCanonicalType() { 
2815          return this != null && this.value instanceof CanonicalType;
2816        }
2817
2818        /**
2819         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2820         */
2821        public CodeType getValueCodeType() throws FHIRException { 
2822          if (this.value == null)
2823            this.value = new CodeType();
2824          if (!(this.value instanceof CodeType))
2825            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
2826          return (CodeType) this.value;
2827        }
2828
2829        public boolean hasValueCodeType() { 
2830          return this != null && this.value instanceof CodeType;
2831        }
2832
2833        /**
2834         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2835         */
2836        public DateType getValueDateType() throws FHIRException { 
2837          if (this.value == null)
2838            this.value = new DateType();
2839          if (!(this.value instanceof DateType))
2840            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.value.getClass().getName()+" was encountered");
2841          return (DateType) this.value;
2842        }
2843
2844        public boolean hasValueDateType() { 
2845          return this != null && this.value instanceof DateType;
2846        }
2847
2848        /**
2849         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2850         */
2851        public DateTimeType getValueDateTimeType() throws FHIRException { 
2852          if (this.value == null)
2853            this.value = new DateTimeType();
2854          if (!(this.value instanceof DateTimeType))
2855            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2856          return (DateTimeType) this.value;
2857        }
2858
2859        public boolean hasValueDateTimeType() { 
2860          return this != null && this.value instanceof DateTimeType;
2861        }
2862
2863        /**
2864         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2865         */
2866        public DecimalType getValueDecimalType() throws FHIRException { 
2867          if (this.value == null)
2868            this.value = new DecimalType();
2869          if (!(this.value instanceof DecimalType))
2870            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
2871          return (DecimalType) this.value;
2872        }
2873
2874        public boolean hasValueDecimalType() { 
2875          return this != null && this.value instanceof DecimalType;
2876        }
2877
2878        /**
2879         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2880         */
2881        public IdType getValueIdType() throws FHIRException { 
2882          if (this.value == null)
2883            this.value = new IdType();
2884          if (!(this.value instanceof IdType))
2885            throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.value.getClass().getName()+" was encountered");
2886          return (IdType) this.value;
2887        }
2888
2889        public boolean hasValueIdType() { 
2890          return this != null && this.value instanceof IdType;
2891        }
2892
2893        /**
2894         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2895         */
2896        public InstantType getValueInstantType() throws FHIRException { 
2897          if (this.value == null)
2898            this.value = new InstantType();
2899          if (!(this.value instanceof InstantType))
2900            throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.value.getClass().getName()+" was encountered");
2901          return (InstantType) this.value;
2902        }
2903
2904        public boolean hasValueInstantType() { 
2905          return this != null && this.value instanceof InstantType;
2906        }
2907
2908        /**
2909         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2910         */
2911        public IntegerType getValueIntegerType() throws FHIRException { 
2912          if (this.value == null)
2913            this.value = new IntegerType();
2914          if (!(this.value instanceof IntegerType))
2915            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2916          return (IntegerType) this.value;
2917        }
2918
2919        public boolean hasValueIntegerType() { 
2920          return this != null && this.value instanceof IntegerType;
2921        }
2922
2923        /**
2924         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2925         */
2926        public Integer64Type getValueInteger64Type() throws FHIRException { 
2927          if (this.value == null)
2928            this.value = new Integer64Type();
2929          if (!(this.value instanceof Integer64Type))
2930            throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.value.getClass().getName()+" was encountered");
2931          return (Integer64Type) this.value;
2932        }
2933
2934        public boolean hasValueInteger64Type() { 
2935          return this != null && this.value instanceof Integer64Type;
2936        }
2937
2938        /**
2939         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2940         */
2941        public MarkdownType getValueMarkdownType() throws FHIRException { 
2942          if (this.value == null)
2943            this.value = new MarkdownType();
2944          if (!(this.value instanceof MarkdownType))
2945            throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.value.getClass().getName()+" was encountered");
2946          return (MarkdownType) this.value;
2947        }
2948
2949        public boolean hasValueMarkdownType() { 
2950          return this != null && this.value instanceof MarkdownType;
2951        }
2952
2953        /**
2954         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2955         */
2956        public OidType getValueOidType() throws FHIRException { 
2957          if (this.value == null)
2958            this.value = new OidType();
2959          if (!(this.value instanceof OidType))
2960            throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.value.getClass().getName()+" was encountered");
2961          return (OidType) this.value;
2962        }
2963
2964        public boolean hasValueOidType() { 
2965          return this != null && this.value instanceof OidType;
2966        }
2967
2968        /**
2969         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2970         */
2971        public PositiveIntType getValuePositiveIntType() throws FHIRException { 
2972          if (this.value == null)
2973            this.value = new PositiveIntType();
2974          if (!(this.value instanceof PositiveIntType))
2975            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.value.getClass().getName()+" was encountered");
2976          return (PositiveIntType) this.value;
2977        }
2978
2979        public boolean hasValuePositiveIntType() { 
2980          return this != null && this.value instanceof PositiveIntType;
2981        }
2982
2983        /**
2984         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2985         */
2986        public StringType getValueStringType() throws FHIRException { 
2987          if (this.value == null)
2988            this.value = new StringType();
2989          if (!(this.value instanceof StringType))
2990            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2991          return (StringType) this.value;
2992        }
2993
2994        public boolean hasValueStringType() { 
2995          return this != null && this.value instanceof StringType;
2996        }
2997
2998        /**
2999         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3000         */
3001        public TimeType getValueTimeType() throws FHIRException { 
3002          if (this.value == null)
3003            this.value = new TimeType();
3004          if (!(this.value instanceof TimeType))
3005            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
3006          return (TimeType) this.value;
3007        }
3008
3009        public boolean hasValueTimeType() { 
3010          return this != null && this.value instanceof TimeType;
3011        }
3012
3013        /**
3014         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3015         */
3016        public UnsignedIntType getValueUnsignedIntType() throws FHIRException { 
3017          if (this.value == null)
3018            this.value = new UnsignedIntType();
3019          if (!(this.value instanceof UnsignedIntType))
3020            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.value.getClass().getName()+" was encountered");
3021          return (UnsignedIntType) this.value;
3022        }
3023
3024        public boolean hasValueUnsignedIntType() { 
3025          return this != null && this.value instanceof UnsignedIntType;
3026        }
3027
3028        /**
3029         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3030         */
3031        public UriType getValueUriType() throws FHIRException { 
3032          if (this.value == null)
3033            this.value = new UriType();
3034          if (!(this.value instanceof UriType))
3035            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
3036          return (UriType) this.value;
3037        }
3038
3039        public boolean hasValueUriType() { 
3040          return this != null && this.value instanceof UriType;
3041        }
3042
3043        /**
3044         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3045         */
3046        public UrlType getValueUrlType() throws FHIRException { 
3047          if (this.value == null)
3048            this.value = new UrlType();
3049          if (!(this.value instanceof UrlType))
3050            throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.value.getClass().getName()+" was encountered");
3051          return (UrlType) this.value;
3052        }
3053
3054        public boolean hasValueUrlType() { 
3055          return this != null && this.value instanceof UrlType;
3056        }
3057
3058        /**
3059         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3060         */
3061        public UuidType getValueUuidType() throws FHIRException { 
3062          if (this.value == null)
3063            this.value = new UuidType();
3064          if (!(this.value instanceof UuidType))
3065            throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.value.getClass().getName()+" was encountered");
3066          return (UuidType) this.value;
3067        }
3068
3069        public boolean hasValueUuidType() { 
3070          return this != null && this.value instanceof UuidType;
3071        }
3072
3073        /**
3074         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3075         */
3076        public Address getValueAddress() throws FHIRException { 
3077          if (this.value == null)
3078            this.value = new Address();
3079          if (!(this.value instanceof Address))
3080            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.value.getClass().getName()+" was encountered");
3081          return (Address) this.value;
3082        }
3083
3084        public boolean hasValueAddress() { 
3085          return this != null && this.value instanceof Address;
3086        }
3087
3088        /**
3089         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3090         */
3091        public Age getValueAge() throws FHIRException { 
3092          if (this.value == null)
3093            this.value = new Age();
3094          if (!(this.value instanceof Age))
3095            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.value.getClass().getName()+" was encountered");
3096          return (Age) this.value;
3097        }
3098
3099        public boolean hasValueAge() { 
3100          return this != null && this.value instanceof Age;
3101        }
3102
3103        /**
3104         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3105         */
3106        public Annotation getValueAnnotation() throws FHIRException { 
3107          if (this.value == null)
3108            this.value = new Annotation();
3109          if (!(this.value instanceof Annotation))
3110            throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.value.getClass().getName()+" was encountered");
3111          return (Annotation) this.value;
3112        }
3113
3114        public boolean hasValueAnnotation() { 
3115          return this != null && this.value instanceof Annotation;
3116        }
3117
3118        /**
3119         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3120         */
3121        public Attachment getValueAttachment() throws FHIRException { 
3122          if (this.value == null)
3123            this.value = new Attachment();
3124          if (!(this.value instanceof Attachment))
3125            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
3126          return (Attachment) this.value;
3127        }
3128
3129        public boolean hasValueAttachment() { 
3130          return this != null && this.value instanceof Attachment;
3131        }
3132
3133        /**
3134         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3135         */
3136        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
3137          if (this.value == null)
3138            this.value = new CodeableConcept();
3139          if (!(this.value instanceof CodeableConcept))
3140            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
3141          return (CodeableConcept) this.value;
3142        }
3143
3144        public boolean hasValueCodeableConcept() { 
3145          return this != null && this.value instanceof CodeableConcept;
3146        }
3147
3148        /**
3149         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3150         */
3151        public CodeableReference getValueCodeableReference() throws FHIRException { 
3152          if (this.value == null)
3153            this.value = new CodeableReference();
3154          if (!(this.value instanceof CodeableReference))
3155            throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.value.getClass().getName()+" was encountered");
3156          return (CodeableReference) this.value;
3157        }
3158
3159        public boolean hasValueCodeableReference() { 
3160          return this != null && this.value instanceof CodeableReference;
3161        }
3162
3163        /**
3164         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3165         */
3166        public Coding getValueCoding() throws FHIRException { 
3167          if (this.value == null)
3168            this.value = new Coding();
3169          if (!(this.value instanceof Coding))
3170            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
3171          return (Coding) this.value;
3172        }
3173
3174        public boolean hasValueCoding() { 
3175          return this != null && this.value instanceof Coding;
3176        }
3177
3178        /**
3179         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3180         */
3181        public ContactPoint getValueContactPoint() throws FHIRException { 
3182          if (this.value == null)
3183            this.value = new ContactPoint();
3184          if (!(this.value instanceof ContactPoint))
3185            throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.value.getClass().getName()+" was encountered");
3186          return (ContactPoint) this.value;
3187        }
3188
3189        public boolean hasValueContactPoint() { 
3190          return this != null && this.value instanceof ContactPoint;
3191        }
3192
3193        /**
3194         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3195         */
3196        public Count getValueCount() throws FHIRException { 
3197          if (this.value == null)
3198            this.value = new Count();
3199          if (!(this.value instanceof Count))
3200            throw new FHIRException("Type mismatch: the type Count was expected, but "+this.value.getClass().getName()+" was encountered");
3201          return (Count) this.value;
3202        }
3203
3204        public boolean hasValueCount() { 
3205          return this != null && this.value instanceof Count;
3206        }
3207
3208        /**
3209         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3210         */
3211        public Distance getValueDistance() throws FHIRException { 
3212          if (this.value == null)
3213            this.value = new Distance();
3214          if (!(this.value instanceof Distance))
3215            throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.value.getClass().getName()+" was encountered");
3216          return (Distance) this.value;
3217        }
3218
3219        public boolean hasValueDistance() { 
3220          return this != null && this.value instanceof Distance;
3221        }
3222
3223        /**
3224         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3225         */
3226        public Duration getValueDuration() throws FHIRException { 
3227          if (this.value == null)
3228            this.value = new Duration();
3229          if (!(this.value instanceof Duration))
3230            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.value.getClass().getName()+" was encountered");
3231          return (Duration) this.value;
3232        }
3233
3234        public boolean hasValueDuration() { 
3235          return this != null && this.value instanceof Duration;
3236        }
3237
3238        /**
3239         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3240         */
3241        public HumanName getValueHumanName() throws FHIRException { 
3242          if (this.value == null)
3243            this.value = new HumanName();
3244          if (!(this.value instanceof HumanName))
3245            throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.value.getClass().getName()+" was encountered");
3246          return (HumanName) this.value;
3247        }
3248
3249        public boolean hasValueHumanName() { 
3250          return this != null && this.value instanceof HumanName;
3251        }
3252
3253        /**
3254         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3255         */
3256        public Identifier getValueIdentifier() throws FHIRException { 
3257          if (this.value == null)
3258            this.value = new Identifier();
3259          if (!(this.value instanceof Identifier))
3260            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.value.getClass().getName()+" was encountered");
3261          return (Identifier) this.value;
3262        }
3263
3264        public boolean hasValueIdentifier() { 
3265          return this != null && this.value instanceof Identifier;
3266        }
3267
3268        /**
3269         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3270         */
3271        public Money getValueMoney() throws FHIRException { 
3272          if (this.value == null)
3273            this.value = new Money();
3274          if (!(this.value instanceof Money))
3275            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.value.getClass().getName()+" was encountered");
3276          return (Money) this.value;
3277        }
3278
3279        public boolean hasValueMoney() { 
3280          return this != null && this.value instanceof Money;
3281        }
3282
3283        /**
3284         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3285         */
3286        public Period getValuePeriod() throws FHIRException { 
3287          if (this.value == null)
3288            this.value = new Period();
3289          if (!(this.value instanceof Period))
3290            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
3291          return (Period) this.value;
3292        }
3293
3294        public boolean hasValuePeriod() { 
3295          return this != null && this.value instanceof Period;
3296        }
3297
3298        /**
3299         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3300         */
3301        public Quantity getValueQuantity() throws FHIRException { 
3302          if (this.value == null)
3303            this.value = new Quantity();
3304          if (!(this.value instanceof Quantity))
3305            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
3306          return (Quantity) this.value;
3307        }
3308
3309        public boolean hasValueQuantity() { 
3310          return this != null && this.value instanceof Quantity;
3311        }
3312
3313        /**
3314         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3315         */
3316        public Range getValueRange() throws FHIRException { 
3317          if (this.value == null)
3318            this.value = new Range();
3319          if (!(this.value instanceof Range))
3320            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
3321          return (Range) this.value;
3322        }
3323
3324        public boolean hasValueRange() { 
3325          return this != null && this.value instanceof Range;
3326        }
3327
3328        /**
3329         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3330         */
3331        public Ratio getValueRatio() throws FHIRException { 
3332          if (this.value == null)
3333            this.value = new Ratio();
3334          if (!(this.value instanceof Ratio))
3335            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
3336          return (Ratio) this.value;
3337        }
3338
3339        public boolean hasValueRatio() { 
3340          return this != null && this.value instanceof Ratio;
3341        }
3342
3343        /**
3344         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3345         */
3346        public RatioRange getValueRatioRange() throws FHIRException { 
3347          if (this.value == null)
3348            this.value = new RatioRange();
3349          if (!(this.value instanceof RatioRange))
3350            throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.value.getClass().getName()+" was encountered");
3351          return (RatioRange) this.value;
3352        }
3353
3354        public boolean hasValueRatioRange() { 
3355          return this != null && this.value instanceof RatioRange;
3356        }
3357
3358        /**
3359         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3360         */
3361        public Reference getValueReference() throws FHIRException { 
3362          if (this.value == null)
3363            this.value = new Reference();
3364          if (!(this.value instanceof Reference))
3365            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
3366          return (Reference) this.value;
3367        }
3368
3369        public boolean hasValueReference() { 
3370          return this != null && this.value instanceof Reference;
3371        }
3372
3373        /**
3374         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3375         */
3376        public SampledData getValueSampledData() throws FHIRException { 
3377          if (this.value == null)
3378            this.value = new SampledData();
3379          if (!(this.value instanceof SampledData))
3380            throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
3381          return (SampledData) this.value;
3382        }
3383
3384        public boolean hasValueSampledData() { 
3385          return this != null && this.value instanceof SampledData;
3386        }
3387
3388        /**
3389         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3390         */
3391        public Signature getValueSignature() throws FHIRException { 
3392          if (this.value == null)
3393            this.value = new Signature();
3394          if (!(this.value instanceof Signature))
3395            throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.value.getClass().getName()+" was encountered");
3396          return (Signature) this.value;
3397        }
3398
3399        public boolean hasValueSignature() { 
3400          return this != null && this.value instanceof Signature;
3401        }
3402
3403        /**
3404         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3405         */
3406        public Timing getValueTiming() throws FHIRException { 
3407          if (this.value == null)
3408            this.value = new Timing();
3409          if (!(this.value instanceof Timing))
3410            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.value.getClass().getName()+" was encountered");
3411          return (Timing) this.value;
3412        }
3413
3414        public boolean hasValueTiming() { 
3415          return this != null && this.value instanceof Timing;
3416        }
3417
3418        /**
3419         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3420         */
3421        public ContactDetail getValueContactDetail() throws FHIRException { 
3422          if (this.value == null)
3423            this.value = new ContactDetail();
3424          if (!(this.value instanceof ContactDetail))
3425            throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
3426          return (ContactDetail) this.value;
3427        }
3428
3429        public boolean hasValueContactDetail() { 
3430          return this != null && this.value instanceof ContactDetail;
3431        }
3432
3433        /**
3434         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3435         */
3436        public DataRequirement getValueDataRequirement() throws FHIRException { 
3437          if (this.value == null)
3438            this.value = new DataRequirement();
3439          if (!(this.value instanceof DataRequirement))
3440            throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.value.getClass().getName()+" was encountered");
3441          return (DataRequirement) this.value;
3442        }
3443
3444        public boolean hasValueDataRequirement() { 
3445          return this != null && this.value instanceof DataRequirement;
3446        }
3447
3448        /**
3449         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3450         */
3451        public Expression getValueExpression() throws FHIRException { 
3452          if (this.value == null)
3453            this.value = new Expression();
3454          if (!(this.value instanceof Expression))
3455            throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.value.getClass().getName()+" was encountered");
3456          return (Expression) this.value;
3457        }
3458
3459        public boolean hasValueExpression() { 
3460          return this != null && this.value instanceof Expression;
3461        }
3462
3463        /**
3464         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3465         */
3466        public ParameterDefinition getValueParameterDefinition() throws FHIRException { 
3467          if (this.value == null)
3468            this.value = new ParameterDefinition();
3469          if (!(this.value instanceof ParameterDefinition))
3470            throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
3471          return (ParameterDefinition) this.value;
3472        }
3473
3474        public boolean hasValueParameterDefinition() { 
3475          return this != null && this.value instanceof ParameterDefinition;
3476        }
3477
3478        /**
3479         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3480         */
3481        public RelatedArtifact getValueRelatedArtifact() throws FHIRException { 
3482          if (this.value == null)
3483            this.value = new RelatedArtifact();
3484          if (!(this.value instanceof RelatedArtifact))
3485            throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.value.getClass().getName()+" was encountered");
3486          return (RelatedArtifact) this.value;
3487        }
3488
3489        public boolean hasValueRelatedArtifact() { 
3490          return this != null && this.value instanceof RelatedArtifact;
3491        }
3492
3493        /**
3494         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3495         */
3496        public TriggerDefinition getValueTriggerDefinition() throws FHIRException { 
3497          if (this.value == null)
3498            this.value = new TriggerDefinition();
3499          if (!(this.value instanceof TriggerDefinition))
3500            throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
3501          return (TriggerDefinition) this.value;
3502        }
3503
3504        public boolean hasValueTriggerDefinition() { 
3505          return this != null && this.value instanceof TriggerDefinition;
3506        }
3507
3508        /**
3509         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3510         */
3511        public UsageContext getValueUsageContext() throws FHIRException { 
3512          if (this.value == null)
3513            this.value = new UsageContext();
3514          if (!(this.value instanceof UsageContext))
3515            throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.value.getClass().getName()+" was encountered");
3516          return (UsageContext) this.value;
3517        }
3518
3519        public boolean hasValueUsageContext() { 
3520          return this != null && this.value instanceof UsageContext;
3521        }
3522
3523        /**
3524         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3525         */
3526        public Availability getValueAvailability() throws FHIRException { 
3527          if (this.value == null)
3528            this.value = new Availability();
3529          if (!(this.value instanceof Availability))
3530            throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.value.getClass().getName()+" was encountered");
3531          return (Availability) this.value;
3532        }
3533
3534        public boolean hasValueAvailability() { 
3535          return this != null && this.value instanceof Availability;
3536        }
3537
3538        /**
3539         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3540         */
3541        public ExtendedContactDetail getValueExtendedContactDetail() throws FHIRException { 
3542          if (this.value == null)
3543            this.value = new ExtendedContactDetail();
3544          if (!(this.value instanceof ExtendedContactDetail))
3545            throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
3546          return (ExtendedContactDetail) this.value;
3547        }
3548
3549        public boolean hasValueExtendedContactDetail() { 
3550          return this != null && this.value instanceof ExtendedContactDetail;
3551        }
3552
3553        /**
3554         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3555         */
3556        public Dosage getValueDosage() throws FHIRException { 
3557          if (this.value == null)
3558            this.value = new Dosage();
3559          if (!(this.value instanceof Dosage))
3560            throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.value.getClass().getName()+" was encountered");
3561          return (Dosage) this.value;
3562        }
3563
3564        public boolean hasValueDosage() { 
3565          return this != null && this.value instanceof Dosage;
3566        }
3567
3568        /**
3569         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3570         */
3571        public Meta getValueMeta() throws FHIRException { 
3572          if (this.value == null)
3573            this.value = new Meta();
3574          if (!(this.value instanceof Meta))
3575            throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.value.getClass().getName()+" was encountered");
3576          return (Meta) this.value;
3577        }
3578
3579        public boolean hasValueMeta() { 
3580          return this != null && this.value instanceof Meta;
3581        }
3582
3583        public boolean hasValue() { 
3584          return this.value != null && !this.value.isEmpty();
3585        }
3586
3587        /**
3588         * @param value {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3589         */
3590        public ElementDefinitionExampleComponent setValue(DataType value) { 
3591          if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
3592            throw new FHIRException("Not the right type for ElementDefinition.example.value[x]: "+value.fhirType());
3593          this.value = value;
3594          return this;
3595        }
3596
3597        protected void listChildren(List<Property> children) {
3598          super.listChildren(children);
3599          children.add(new Property("label", "string", "Describes the purpose of this example among the set of examples.", 0, 1, label));
3600          children.add(new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value));
3601        }
3602
3603        @Override
3604        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3605          switch (_hash) {
3606          case 102727412: /*label*/  return new Property("label", "string", "Describes the purpose of this example among the set of examples.", 0, 1, label);
3607          case -1410166417: /*value[x]*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3608          case 111972721: /*value*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3609          case -1535024575: /*valueBase64Binary*/  return new Property("value[x]", "base64Binary", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3610          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3611          case -786218365: /*valueCanonical*/  return new Property("value[x]", "canonical", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3612          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3613          case -766192449: /*valueDate*/  return new Property("value[x]", "date", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3614          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3615          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3616          case 231604844: /*valueId*/  return new Property("value[x]", "id", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3617          case -1668687056: /*valueInstant*/  return new Property("value[x]", "instant", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3618          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3619          case -1122120181: /*valueInteger64*/  return new Property("value[x]", "integer64", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3620          case -497880704: /*valueMarkdown*/  return new Property("value[x]", "markdown", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3621          case -1410178407: /*valueOid*/  return new Property("value[x]", "oid", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3622          case -1249932027: /*valuePositiveInt*/  return new Property("value[x]", "positiveInt", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3623          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3624          case -765708322: /*valueTime*/  return new Property("value[x]", "time", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3625          case 26529417: /*valueUnsignedInt*/  return new Property("value[x]", "unsignedInt", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3626          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3627          case -1410172354: /*valueUrl*/  return new Property("value[x]", "url", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3628          case -765667124: /*valueUuid*/  return new Property("value[x]", "uuid", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3629          case -478981821: /*valueAddress*/  return new Property("value[x]", "Address", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3630          case -1410191922: /*valueAge*/  return new Property("value[x]", "Age", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3631          case -67108992: /*valueAnnotation*/  return new Property("value[x]", "Annotation", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3632          case -475566732: /*valueAttachment*/  return new Property("value[x]", "Attachment", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3633          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3634          case -257955629: /*valueCodeableReference*/  return new Property("value[x]", "CodeableReference", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3635          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3636          case 944904545: /*valueContactPoint*/  return new Property("value[x]", "ContactPoint", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3637          case 2017332766: /*valueCount*/  return new Property("value[x]", "Count", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3638          case -456359802: /*valueDistance*/  return new Property("value[x]", "Distance", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3639          case 1558135333: /*valueDuration*/  return new Property("value[x]", "Duration", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3640          case -2026205465: /*valueHumanName*/  return new Property("value[x]", "HumanName", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3641          case -130498310: /*valueIdentifier*/  return new Property("value[x]", "Identifier", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3642          case 2026560975: /*valueMoney*/  return new Property("value[x]", "Money", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3643          case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Period", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3644          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3645          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3646          case 2030767386: /*valueRatio*/  return new Property("value[x]", "Ratio", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3647          case -706454461: /*valueRatioRange*/  return new Property("value[x]", "RatioRange", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3648          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3649          case -962229101: /*valueSampledData*/  return new Property("value[x]", "SampledData", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3650          case -540985785: /*valueSignature*/  return new Property("value[x]", "Signature", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3651          case -1406282469: /*valueTiming*/  return new Property("value[x]", "Timing", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3652          case -1125200224: /*valueContactDetail*/  return new Property("value[x]", "ContactDetail", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3653          case 1710554248: /*valueDataRequirement*/  return new Property("value[x]", "DataRequirement", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3654          case -307517719: /*valueExpression*/  return new Property("value[x]", "Expression", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3655          case 1387478187: /*valueParameterDefinition*/  return new Property("value[x]", "ParameterDefinition", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3656          case 1748214124: /*valueRelatedArtifact*/  return new Property("value[x]", "RelatedArtifact", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3657          case 976830394: /*valueTriggerDefinition*/  return new Property("value[x]", "TriggerDefinition", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3658          case 588000479: /*valueUsageContext*/  return new Property("value[x]", "UsageContext", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3659          case 1678530924: /*valueAvailability*/  return new Property("value[x]", "Availability", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3660          case -1567222041: /*valueExtendedContactDetail*/  return new Property("value[x]", "ExtendedContactDetail", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3661          case -1858636920: /*valueDosage*/  return new Property("value[x]", "Dosage", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3662          case -765920490: /*valueMeta*/  return new Property("value[x]", "Meta", "The actual value for the element, which must be one of the types allowed for this element.", 0, 1, value);
3663          default: return super.getNamedProperty(_hash, _name, _checkValid);
3664          }
3665
3666        }
3667
3668      @Override
3669      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3670        switch (hash) {
3671        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
3672        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
3673        default: return super.getProperty(hash, name, checkValid);
3674        }
3675
3676      }
3677
3678      @Override
3679      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3680        switch (hash) {
3681        case 102727412: // label
3682          this.label = TypeConvertor.castToString(value); // StringType
3683          return value;
3684        case 111972721: // value
3685          this.value = TypeConvertor.castToType(value); // DataType
3686          return value;
3687        default: return super.setProperty(hash, name, value);
3688        }
3689
3690      }
3691
3692      @Override
3693      public Base setProperty(String name, Base value) throws FHIRException {
3694        if (name.equals("label")) {
3695          this.label = TypeConvertor.castToString(value); // StringType
3696        } else if (name.equals("value[x]")) {
3697          this.value = TypeConvertor.castToType(value); // DataType
3698        } else
3699          return super.setProperty(name, value);
3700        return value;
3701      }
3702
3703  @Override
3704  public void removeChild(String name, Base value) throws FHIRException {
3705        if (name.equals("label")) {
3706          this.label = null;
3707        } else if (name.equals("value[x]")) {
3708          this.value = null;
3709        } else
3710          super.removeChild(name, value);
3711        
3712      }
3713
3714      @Override
3715      public Base makeProperty(int hash, String name) throws FHIRException {
3716        switch (hash) {
3717        case 102727412:  return getLabelElement();
3718        case -1410166417:  return getValue();
3719        case 111972721:  return getValue();
3720        default: return super.makeProperty(hash, name);
3721        }
3722
3723      }
3724
3725      @Override
3726      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3727        switch (hash) {
3728        case 102727412: /*label*/ return new String[] {"string"};
3729        case 111972721: /*value*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
3730        default: return super.getTypesForProperty(hash, name);
3731        }
3732
3733      }
3734
3735      @Override
3736      public Base addChild(String name) throws FHIRException {
3737        if (name.equals("label")) {
3738          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.example.label");
3739        }
3740        else if (name.equals("valueBase64Binary")) {
3741          this.value = new Base64BinaryType();
3742          return this.value;
3743        }
3744        else if (name.equals("valueBoolean")) {
3745          this.value = new BooleanType();
3746          return this.value;
3747        }
3748        else if (name.equals("valueCanonical")) {
3749          this.value = new CanonicalType();
3750          return this.value;
3751        }
3752        else if (name.equals("valueCode")) {
3753          this.value = new CodeType();
3754          return this.value;
3755        }
3756        else if (name.equals("valueDate")) {
3757          this.value = new DateType();
3758          return this.value;
3759        }
3760        else if (name.equals("valueDateTime")) {
3761          this.value = new DateTimeType();
3762          return this.value;
3763        }
3764        else if (name.equals("valueDecimal")) {
3765          this.value = new DecimalType();
3766          return this.value;
3767        }
3768        else if (name.equals("valueId")) {
3769          this.value = new IdType();
3770          return this.value;
3771        }
3772        else if (name.equals("valueInstant")) {
3773          this.value = new InstantType();
3774          return this.value;
3775        }
3776        else if (name.equals("valueInteger")) {
3777          this.value = new IntegerType();
3778          return this.value;
3779        }
3780        else if (name.equals("valueInteger64")) {
3781          this.value = new Integer64Type();
3782          return this.value;
3783        }
3784        else if (name.equals("valueMarkdown")) {
3785          this.value = new MarkdownType();
3786          return this.value;
3787        }
3788        else if (name.equals("valueOid")) {
3789          this.value = new OidType();
3790          return this.value;
3791        }
3792        else if (name.equals("valuePositiveInt")) {
3793          this.value = new PositiveIntType();
3794          return this.value;
3795        }
3796        else if (name.equals("valueString")) {
3797          this.value = new StringType();
3798          return this.value;
3799        }
3800        else if (name.equals("valueTime")) {
3801          this.value = new TimeType();
3802          return this.value;
3803        }
3804        else if (name.equals("valueUnsignedInt")) {
3805          this.value = new UnsignedIntType();
3806          return this.value;
3807        }
3808        else if (name.equals("valueUri")) {
3809          this.value = new UriType();
3810          return this.value;
3811        }
3812        else if (name.equals("valueUrl")) {
3813          this.value = new UrlType();
3814          return this.value;
3815        }
3816        else if (name.equals("valueUuid")) {
3817          this.value = new UuidType();
3818          return this.value;
3819        }
3820        else if (name.equals("valueAddress")) {
3821          this.value = new Address();
3822          return this.value;
3823        }
3824        else if (name.equals("valueAge")) {
3825          this.value = new Age();
3826          return this.value;
3827        }
3828        else if (name.equals("valueAnnotation")) {
3829          this.value = new Annotation();
3830          return this.value;
3831        }
3832        else if (name.equals("valueAttachment")) {
3833          this.value = new Attachment();
3834          return this.value;
3835        }
3836        else if (name.equals("valueCodeableConcept")) {
3837          this.value = new CodeableConcept();
3838          return this.value;
3839        }
3840        else if (name.equals("valueCodeableReference")) {
3841          this.value = new CodeableReference();
3842          return this.value;
3843        }
3844        else if (name.equals("valueCoding")) {
3845          this.value = new Coding();
3846          return this.value;
3847        }
3848        else if (name.equals("valueContactPoint")) {
3849          this.value = new ContactPoint();
3850          return this.value;
3851        }
3852        else if (name.equals("valueCount")) {
3853          this.value = new Count();
3854          return this.value;
3855        }
3856        else if (name.equals("valueDistance")) {
3857          this.value = new Distance();
3858          return this.value;
3859        }
3860        else if (name.equals("valueDuration")) {
3861          this.value = new Duration();
3862          return this.value;
3863        }
3864        else if (name.equals("valueHumanName")) {
3865          this.value = new HumanName();
3866          return this.value;
3867        }
3868        else if (name.equals("valueIdentifier")) {
3869          this.value = new Identifier();
3870          return this.value;
3871        }
3872        else if (name.equals("valueMoney")) {
3873          this.value = new Money();
3874          return this.value;
3875        }
3876        else if (name.equals("valuePeriod")) {
3877          this.value = new Period();
3878          return this.value;
3879        }
3880        else if (name.equals("valueQuantity")) {
3881          this.value = new Quantity();
3882          return this.value;
3883        }
3884        else if (name.equals("valueRange")) {
3885          this.value = new Range();
3886          return this.value;
3887        }
3888        else if (name.equals("valueRatio")) {
3889          this.value = new Ratio();
3890          return this.value;
3891        }
3892        else if (name.equals("valueRatioRange")) {
3893          this.value = new RatioRange();
3894          return this.value;
3895        }
3896        else if (name.equals("valueReference")) {
3897          this.value = new Reference();
3898          return this.value;
3899        }
3900        else if (name.equals("valueSampledData")) {
3901          this.value = new SampledData();
3902          return this.value;
3903        }
3904        else if (name.equals("valueSignature")) {
3905          this.value = new Signature();
3906          return this.value;
3907        }
3908        else if (name.equals("valueTiming")) {
3909          this.value = new Timing();
3910          return this.value;
3911        }
3912        else if (name.equals("valueContactDetail")) {
3913          this.value = new ContactDetail();
3914          return this.value;
3915        }
3916        else if (name.equals("valueDataRequirement")) {
3917          this.value = new DataRequirement();
3918          return this.value;
3919        }
3920        else if (name.equals("valueExpression")) {
3921          this.value = new Expression();
3922          return this.value;
3923        }
3924        else if (name.equals("valueParameterDefinition")) {
3925          this.value = new ParameterDefinition();
3926          return this.value;
3927        }
3928        else if (name.equals("valueRelatedArtifact")) {
3929          this.value = new RelatedArtifact();
3930          return this.value;
3931        }
3932        else if (name.equals("valueTriggerDefinition")) {
3933          this.value = new TriggerDefinition();
3934          return this.value;
3935        }
3936        else if (name.equals("valueUsageContext")) {
3937          this.value = new UsageContext();
3938          return this.value;
3939        }
3940        else if (name.equals("valueAvailability")) {
3941          this.value = new Availability();
3942          return this.value;
3943        }
3944        else if (name.equals("valueExtendedContactDetail")) {
3945          this.value = new ExtendedContactDetail();
3946          return this.value;
3947        }
3948        else if (name.equals("valueDosage")) {
3949          this.value = new Dosage();
3950          return this.value;
3951        }
3952        else if (name.equals("valueMeta")) {
3953          this.value = new Meta();
3954          return this.value;
3955        }
3956        else
3957          return super.addChild(name);
3958      }
3959
3960      public ElementDefinitionExampleComponent copy() {
3961        ElementDefinitionExampleComponent dst = new ElementDefinitionExampleComponent();
3962        copyValues(dst);
3963        return dst;
3964      }
3965
3966      public void copyValues(ElementDefinitionExampleComponent dst) {
3967        super.copyValues(dst);
3968        dst.label = label == null ? null : label.copy();
3969        dst.value = value == null ? null : value.copy();
3970      }
3971
3972      @Override
3973      public boolean equalsDeep(Base other_) {
3974        if (!super.equalsDeep(other_))
3975          return false;
3976        if (!(other_ instanceof ElementDefinitionExampleComponent))
3977          return false;
3978        ElementDefinitionExampleComponent o = (ElementDefinitionExampleComponent) other_;
3979        return compareDeep(label, o.label, true) && compareDeep(value, o.value, true);
3980      }
3981
3982      @Override
3983      public boolean equalsShallow(Base other_) {
3984        if (!super.equalsShallow(other_))
3985          return false;
3986        if (!(other_ instanceof ElementDefinitionExampleComponent))
3987          return false;
3988        ElementDefinitionExampleComponent o = (ElementDefinitionExampleComponent) other_;
3989        return compareValues(label, o.label, true);
3990      }
3991
3992      public boolean isEmpty() {
3993        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(label, value);
3994      }
3995
3996  public String fhirType() {
3997    return "ElementDefinition.example";
3998
3999  }
4000
4001  }
4002
4003    @Block()
4004    public static class ElementDefinitionConstraintComponent extends Element implements IBaseDatatypeElement {
4005        /**
4006         * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
4007         */
4008        @Child(name = "key", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=true)
4009        @Description(shortDefinition="Target of 'condition' reference above", formalDefinition="Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality." )
4010        protected IdType key;
4011
4012        /**
4013         * Description of why this constraint is necessary or appropriate.
4014         */
4015        @Child(name = "requirements", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=true)
4016        @Description(shortDefinition="Why this constraint is necessary or appropriate", formalDefinition="Description of why this constraint is necessary or appropriate." )
4017        protected MarkdownType requirements;
4018
4019        /**
4020         * Identifies the impact constraint violation has on the conformance of the instance.
4021         */
4022        @Child(name = "severity", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
4023        @Description(shortDefinition="error | warning", formalDefinition="Identifies the impact constraint violation has on the conformance of the instance." )
4024        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/constraint-severity")
4025        protected Enumeration<ConstraintSeverity> severity;
4026
4027        /**
4028         * If true, indicates that the warning or best practice guideline should be suppressed.
4029         */
4030        @Child(name = "suppress", type = {BooleanType.class}, order=4, min=0, max=1, modifier=false, summary=true)
4031        @Description(shortDefinition="Suppress warning or hint in profile", formalDefinition="If true, indicates that the warning or best practice guideline should be suppressed." )
4032        protected BooleanType suppress;
4033
4034        /**
4035         * Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
4036         */
4037        @Child(name = "human", type = {StringType.class}, order=5, min=1, max=1, modifier=false, summary=true)
4038        @Description(shortDefinition="Human description of constraint", formalDefinition="Text that can be used to describe the constraint in messages identifying that the constraint has been violated." )
4039        protected StringType human;
4040
4041        /**
4042         * A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
4043         */
4044        @Child(name = "expression", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
4045        @Description(shortDefinition="FHIRPath expression of constraint", formalDefinition="A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met." )
4046        protected StringType expression;
4047
4048        /**
4049         * A reference to the original source of the constraint, for traceability purposes.
4050         */
4051        @Child(name = "source", type = {CanonicalType.class}, order=7, min=0, max=1, modifier=false, summary=true)
4052        @Description(shortDefinition="Reference to original source of constraint", formalDefinition="A reference to the original source of the constraint, for traceability purposes." )
4053        protected CanonicalType source;
4054
4055        private static final long serialVersionUID = 1642607838L;
4056
4057    /**
4058     * Constructor
4059     */
4060      public ElementDefinitionConstraintComponent() {
4061        super();
4062      }
4063
4064    /**
4065     * Constructor
4066     */
4067      public ElementDefinitionConstraintComponent(String key, ConstraintSeverity severity, String human) {
4068        super();
4069        this.setKey(key);
4070        this.setSeverity(severity);
4071        this.setHuman(human);
4072      }
4073
4074        /**
4075         * @return {@link #key} (Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.). This is the underlying object with id, value and extensions. The accessor "getKey" gives direct access to the value
4076         */
4077        public IdType getKeyElement() { 
4078          if (this.key == null)
4079            if (Configuration.errorOnAutoCreate())
4080              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.key");
4081            else if (Configuration.doAutoCreate())
4082              this.key = new IdType(); // bb
4083          return this.key;
4084        }
4085
4086        public boolean hasKeyElement() { 
4087          return this.key != null && !this.key.isEmpty();
4088        }
4089
4090        public boolean hasKey() { 
4091          return this.key != null && !this.key.isEmpty();
4092        }
4093
4094        /**
4095         * @param value {@link #key} (Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.). This is the underlying object with id, value and extensions. The accessor "getKey" gives direct access to the value
4096         */
4097        public ElementDefinitionConstraintComponent setKeyElement(IdType value) { 
4098          this.key = value;
4099          return this;
4100        }
4101
4102        /**
4103         * @return Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
4104         */
4105        public String getKey() { 
4106          return this.key == null ? null : this.key.getValue();
4107        }
4108
4109        /**
4110         * @param value Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
4111         */
4112        public ElementDefinitionConstraintComponent setKey(String value) { 
4113            if (this.key == null)
4114              this.key = new IdType();
4115            this.key.setValue(value);
4116          return this;
4117        }
4118
4119        /**
4120         * @return {@link #requirements} (Description of why this constraint is necessary or appropriate.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
4121         */
4122        public MarkdownType getRequirementsElement() { 
4123          if (this.requirements == null)
4124            if (Configuration.errorOnAutoCreate())
4125              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.requirements");
4126            else if (Configuration.doAutoCreate())
4127              this.requirements = new MarkdownType(); // bb
4128          return this.requirements;
4129        }
4130
4131        public boolean hasRequirementsElement() { 
4132          return this.requirements != null && !this.requirements.isEmpty();
4133        }
4134
4135        public boolean hasRequirements() { 
4136          return this.requirements != null && !this.requirements.isEmpty();
4137        }
4138
4139        /**
4140         * @param value {@link #requirements} (Description of why this constraint is necessary or appropriate.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
4141         */
4142        public ElementDefinitionConstraintComponent setRequirementsElement(MarkdownType value) { 
4143          this.requirements = value;
4144          return this;
4145        }
4146
4147        /**
4148         * @return Description of why this constraint is necessary or appropriate.
4149         */
4150        public String getRequirements() { 
4151          return this.requirements == null ? null : this.requirements.getValue();
4152        }
4153
4154        /**
4155         * @param value Description of why this constraint is necessary or appropriate.
4156         */
4157        public ElementDefinitionConstraintComponent setRequirements(String value) { 
4158          if (Utilities.noString(value))
4159            this.requirements = null;
4160          else {
4161            if (this.requirements == null)
4162              this.requirements = new MarkdownType();
4163            this.requirements.setValue(value);
4164          }
4165          return this;
4166        }
4167
4168        /**
4169         * @return {@link #severity} (Identifies the impact constraint violation has on the conformance of the instance.). This is the underlying object with id, value and extensions. The accessor "getSeverity" gives direct access to the value
4170         */
4171        public Enumeration<ConstraintSeverity> getSeverityElement() { 
4172          if (this.severity == null)
4173            if (Configuration.errorOnAutoCreate())
4174              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.severity");
4175            else if (Configuration.doAutoCreate())
4176              this.severity = new Enumeration<ConstraintSeverity>(new ConstraintSeverityEnumFactory()); // bb
4177          return this.severity;
4178        }
4179
4180        public boolean hasSeverityElement() { 
4181          return this.severity != null && !this.severity.isEmpty();
4182        }
4183
4184        public boolean hasSeverity() { 
4185          return this.severity != null && !this.severity.isEmpty();
4186        }
4187
4188        /**
4189         * @param value {@link #severity} (Identifies the impact constraint violation has on the conformance of the instance.). This is the underlying object with id, value and extensions. The accessor "getSeverity" gives direct access to the value
4190         */
4191        public ElementDefinitionConstraintComponent setSeverityElement(Enumeration<ConstraintSeverity> value) { 
4192          this.severity = value;
4193          return this;
4194        }
4195
4196        /**
4197         * @return Identifies the impact constraint violation has on the conformance of the instance.
4198         */
4199        public ConstraintSeverity getSeverity() { 
4200          return this.severity == null ? null : this.severity.getValue();
4201        }
4202
4203        /**
4204         * @param value Identifies the impact constraint violation has on the conformance of the instance.
4205         */
4206        public ElementDefinitionConstraintComponent setSeverity(ConstraintSeverity value) { 
4207            if (this.severity == null)
4208              this.severity = new Enumeration<ConstraintSeverity>(new ConstraintSeverityEnumFactory());
4209            this.severity.setValue(value);
4210          return this;
4211        }
4212
4213        /**
4214         * @return {@link #suppress} (If true, indicates that the warning or best practice guideline should be suppressed.). This is the underlying object with id, value and extensions. The accessor "getSuppress" gives direct access to the value
4215         */
4216        public BooleanType getSuppressElement() { 
4217          if (this.suppress == null)
4218            if (Configuration.errorOnAutoCreate())
4219              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.suppress");
4220            else if (Configuration.doAutoCreate())
4221              this.suppress = new BooleanType(); // bb
4222          return this.suppress;
4223        }
4224
4225        public boolean hasSuppressElement() { 
4226          return this.suppress != null && !this.suppress.isEmpty();
4227        }
4228
4229        public boolean hasSuppress() { 
4230          return this.suppress != null && !this.suppress.isEmpty();
4231        }
4232
4233        /**
4234         * @param value {@link #suppress} (If true, indicates that the warning or best practice guideline should be suppressed.). This is the underlying object with id, value and extensions. The accessor "getSuppress" gives direct access to the value
4235         */
4236        public ElementDefinitionConstraintComponent setSuppressElement(BooleanType value) { 
4237          this.suppress = value;
4238          return this;
4239        }
4240
4241        /**
4242         * @return If true, indicates that the warning or best practice guideline should be suppressed.
4243         */
4244        public boolean getSuppress() { 
4245          return this.suppress == null || this.suppress.isEmpty() ? false : this.suppress.getValue();
4246        }
4247
4248        /**
4249         * @param value If true, indicates that the warning or best practice guideline should be suppressed.
4250         */
4251        public ElementDefinitionConstraintComponent setSuppress(boolean value) { 
4252            if (this.suppress == null)
4253              this.suppress = new BooleanType();
4254            this.suppress.setValue(value);
4255          return this;
4256        }
4257
4258        /**
4259         * @return {@link #human} (Text that can be used to describe the constraint in messages identifying that the constraint has been violated.). This is the underlying object with id, value and extensions. The accessor "getHuman" gives direct access to the value
4260         */
4261        public StringType getHumanElement() { 
4262          if (this.human == null)
4263            if (Configuration.errorOnAutoCreate())
4264              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.human");
4265            else if (Configuration.doAutoCreate())
4266              this.human = new StringType(); // bb
4267          return this.human;
4268        }
4269
4270        public boolean hasHumanElement() { 
4271          return this.human != null && !this.human.isEmpty();
4272        }
4273
4274        public boolean hasHuman() { 
4275          return this.human != null && !this.human.isEmpty();
4276        }
4277
4278        /**
4279         * @param value {@link #human} (Text that can be used to describe the constraint in messages identifying that the constraint has been violated.). This is the underlying object with id, value and extensions. The accessor "getHuman" gives direct access to the value
4280         */
4281        public ElementDefinitionConstraintComponent setHumanElement(StringType value) { 
4282          this.human = value;
4283          return this;
4284        }
4285
4286        /**
4287         * @return Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
4288         */
4289        public String getHuman() { 
4290          return this.human == null ? null : this.human.getValue();
4291        }
4292
4293        /**
4294         * @param value Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
4295         */
4296        public ElementDefinitionConstraintComponent setHuman(String value) { 
4297            if (this.human == null)
4298              this.human = new StringType();
4299            this.human.setValue(value);
4300          return this;
4301        }
4302
4303        /**
4304         * @return {@link #expression} (A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
4305         */
4306        public StringType getExpressionElement() { 
4307          if (this.expression == null)
4308            if (Configuration.errorOnAutoCreate())
4309              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.expression");
4310            else if (Configuration.doAutoCreate())
4311              this.expression = new StringType(); // bb
4312          return this.expression;
4313        }
4314
4315        public boolean hasExpressionElement() { 
4316          return this.expression != null && !this.expression.isEmpty();
4317        }
4318
4319        public boolean hasExpression() { 
4320          return this.expression != null && !this.expression.isEmpty();
4321        }
4322
4323        /**
4324         * @param value {@link #expression} (A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
4325         */
4326        public ElementDefinitionConstraintComponent setExpressionElement(StringType value) { 
4327          this.expression = value;
4328          return this;
4329        }
4330
4331        /**
4332         * @return A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
4333         */
4334        public String getExpression() { 
4335          return this.expression == null ? null : this.expression.getValue();
4336        }
4337
4338        /**
4339         * @param value A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
4340         */
4341        public ElementDefinitionConstraintComponent setExpression(String value) { 
4342          if (Utilities.noString(value))
4343            this.expression = null;
4344          else {
4345            if (this.expression == null)
4346              this.expression = new StringType();
4347            this.expression.setValue(value);
4348          }
4349          return this;
4350        }
4351
4352        /**
4353         * @return {@link #source} (A reference to the original source of the constraint, for traceability purposes.). This is the underlying object with id, value and extensions. The accessor "getSource" gives direct access to the value
4354         */
4355        public CanonicalType getSourceElement() { 
4356          if (this.source == null)
4357            if (Configuration.errorOnAutoCreate())
4358              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.source");
4359            else if (Configuration.doAutoCreate())
4360              this.source = new CanonicalType(); // bb
4361          return this.source;
4362        }
4363
4364        public boolean hasSourceElement() { 
4365          return this.source != null && !this.source.isEmpty();
4366        }
4367
4368        public boolean hasSource() { 
4369          return this.source != null && !this.source.isEmpty();
4370        }
4371
4372        /**
4373         * @param value {@link #source} (A reference to the original source of the constraint, for traceability purposes.). This is the underlying object with id, value and extensions. The accessor "getSource" gives direct access to the value
4374         */
4375        public ElementDefinitionConstraintComponent setSourceElement(CanonicalType value) { 
4376          this.source = value;
4377          return this;
4378        }
4379
4380        /**
4381         * @return A reference to the original source of the constraint, for traceability purposes.
4382         */
4383        public String getSource() { 
4384          return this.source == null ? null : this.source.getValue();
4385        }
4386
4387        /**
4388         * @param value A reference to the original source of the constraint, for traceability purposes.
4389         */
4390        public ElementDefinitionConstraintComponent setSource(String value) { 
4391          if (Utilities.noString(value))
4392            this.source = null;
4393          else {
4394            if (this.source == null)
4395              this.source = new CanonicalType();
4396            this.source.setValue(value);
4397          }
4398          return this;
4399        }
4400
4401        protected void listChildren(List<Property> children) {
4402          super.listChildren(children);
4403          children.add(new Property("key", "id", "Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.", 0, 1, key));
4404          children.add(new Property("requirements", "markdown", "Description of why this constraint is necessary or appropriate.", 0, 1, requirements));
4405          children.add(new Property("severity", "code", "Identifies the impact constraint violation has on the conformance of the instance.", 0, 1, severity));
4406          children.add(new Property("suppress", "boolean", "If true, indicates that the warning or best practice guideline should be suppressed.", 0, 1, suppress));
4407          children.add(new Property("human", "string", "Text that can be used to describe the constraint in messages identifying that the constraint has been violated.", 0, 1, human));
4408          children.add(new Property("expression", "string", "A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.", 0, 1, expression));
4409          children.add(new Property("source", "canonical(StructureDefinition)", "A reference to the original source of the constraint, for traceability purposes.", 0, 1, source));
4410        }
4411
4412        @Override
4413        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4414          switch (_hash) {
4415          case 106079: /*key*/  return new Property("key", "id", "Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.", 0, 1, key);
4416          case -1619874672: /*requirements*/  return new Property("requirements", "markdown", "Description of why this constraint is necessary or appropriate.", 0, 1, requirements);
4417          case 1478300413: /*severity*/  return new Property("severity", "code", "Identifies the impact constraint violation has on the conformance of the instance.", 0, 1, severity);
4418          case -1663129931: /*suppress*/  return new Property("suppress", "boolean", "If true, indicates that the warning or best practice guideline should be suppressed.", 0, 1, suppress);
4419          case 99639597: /*human*/  return new Property("human", "string", "Text that can be used to describe the constraint in messages identifying that the constraint has been violated.", 0, 1, human);
4420          case -1795452264: /*expression*/  return new Property("expression", "string", "A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.", 0, 1, expression);
4421          case -896505829: /*source*/  return new Property("source", "canonical(StructureDefinition)", "A reference to the original source of the constraint, for traceability purposes.", 0, 1, source);
4422          default: return super.getNamedProperty(_hash, _name, _checkValid);
4423          }
4424
4425        }
4426
4427      @Override
4428      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4429        switch (hash) {
4430        case 106079: /*key*/ return this.key == null ? new Base[0] : new Base[] {this.key}; // IdType
4431        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // MarkdownType
4432        case 1478300413: /*severity*/ return this.severity == null ? new Base[0] : new Base[] {this.severity}; // Enumeration<ConstraintSeverity>
4433        case -1663129931: /*suppress*/ return this.suppress == null ? new Base[0] : new Base[] {this.suppress}; // BooleanType
4434        case 99639597: /*human*/ return this.human == null ? new Base[0] : new Base[] {this.human}; // StringType
4435        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
4436        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // CanonicalType
4437        default: return super.getProperty(hash, name, checkValid);
4438        }
4439
4440      }
4441
4442      @Override
4443      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4444        switch (hash) {
4445        case 106079: // key
4446          this.key = TypeConvertor.castToId(value); // IdType
4447          return value;
4448        case -1619874672: // requirements
4449          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
4450          return value;
4451        case 1478300413: // severity
4452          value = new ConstraintSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
4453          this.severity = (Enumeration) value; // Enumeration<ConstraintSeverity>
4454          return value;
4455        case -1663129931: // suppress
4456          this.suppress = TypeConvertor.castToBoolean(value); // BooleanType
4457          return value;
4458        case 99639597: // human
4459          this.human = TypeConvertor.castToString(value); // StringType
4460          return value;
4461        case -1795452264: // expression
4462          this.expression = TypeConvertor.castToString(value); // StringType
4463          return value;
4464        case -896505829: // source
4465          this.source = TypeConvertor.castToCanonical(value); // CanonicalType
4466          return value;
4467        default: return super.setProperty(hash, name, value);
4468        }
4469
4470      }
4471
4472      @Override
4473      public Base setProperty(String name, Base value) throws FHIRException {
4474        if (name.equals("key")) {
4475          this.key = TypeConvertor.castToId(value); // IdType
4476        } else if (name.equals("requirements")) {
4477          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
4478        } else if (name.equals("severity")) {
4479          value = new ConstraintSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
4480          this.severity = (Enumeration) value; // Enumeration<ConstraintSeverity>
4481        } else if (name.equals("suppress")) {
4482          this.suppress = TypeConvertor.castToBoolean(value); // BooleanType
4483        } else if (name.equals("human")) {
4484          this.human = TypeConvertor.castToString(value); // StringType
4485        } else if (name.equals("expression")) {
4486          this.expression = TypeConvertor.castToString(value); // StringType
4487        } else if (name.equals("source")) {
4488          this.source = TypeConvertor.castToCanonical(value); // CanonicalType
4489        } else
4490          return super.setProperty(name, value);
4491        return value;
4492      }
4493
4494  @Override
4495  public void removeChild(String name, Base value) throws FHIRException {
4496        if (name.equals("key")) {
4497          this.key = null;
4498        } else if (name.equals("requirements")) {
4499          this.requirements = null;
4500        } else if (name.equals("severity")) {
4501          value = new ConstraintSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
4502          this.severity = (Enumeration) value; // Enumeration<ConstraintSeverity>
4503        } else if (name.equals("suppress")) {
4504          this.suppress = null;
4505        } else if (name.equals("human")) {
4506          this.human = null;
4507        } else if (name.equals("expression")) {
4508          this.expression = null;
4509        } else if (name.equals("source")) {
4510          this.source = null;
4511        } else
4512          super.removeChild(name, value);
4513        
4514      }
4515
4516      @Override
4517      public Base makeProperty(int hash, String name) throws FHIRException {
4518        switch (hash) {
4519        case 106079:  return getKeyElement();
4520        case -1619874672:  return getRequirementsElement();
4521        case 1478300413:  return getSeverityElement();
4522        case -1663129931:  return getSuppressElement();
4523        case 99639597:  return getHumanElement();
4524        case -1795452264:  return getExpressionElement();
4525        case -896505829:  return getSourceElement();
4526        default: return super.makeProperty(hash, name);
4527        }
4528
4529      }
4530
4531      @Override
4532      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4533        switch (hash) {
4534        case 106079: /*key*/ return new String[] {"id"};
4535        case -1619874672: /*requirements*/ return new String[] {"markdown"};
4536        case 1478300413: /*severity*/ return new String[] {"code"};
4537        case -1663129931: /*suppress*/ return new String[] {"boolean"};
4538        case 99639597: /*human*/ return new String[] {"string"};
4539        case -1795452264: /*expression*/ return new String[] {"string"};
4540        case -896505829: /*source*/ return new String[] {"canonical"};
4541        default: return super.getTypesForProperty(hash, name);
4542        }
4543
4544      }
4545
4546      @Override
4547      public Base addChild(String name) throws FHIRException {
4548        if (name.equals("key")) {
4549          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.key");
4550        }
4551        else if (name.equals("requirements")) {
4552          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.requirements");
4553        }
4554        else if (name.equals("severity")) {
4555          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.severity");
4556        }
4557        else if (name.equals("suppress")) {
4558          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.suppress");
4559        }
4560        else if (name.equals("human")) {
4561          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.human");
4562        }
4563        else if (name.equals("expression")) {
4564          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.expression");
4565        }
4566        else if (name.equals("source")) {
4567          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.constraint.source");
4568        }
4569        else
4570          return super.addChild(name);
4571      }
4572
4573      public ElementDefinitionConstraintComponent copy() {
4574        ElementDefinitionConstraintComponent dst = new ElementDefinitionConstraintComponent();
4575        copyValues(dst);
4576        return dst;
4577      }
4578
4579      public void copyValues(ElementDefinitionConstraintComponent dst) {
4580        super.copyValues(dst);
4581        dst.key = key == null ? null : key.copy();
4582        dst.requirements = requirements == null ? null : requirements.copy();
4583        dst.severity = severity == null ? null : severity.copy();
4584        dst.suppress = suppress == null ? null : suppress.copy();
4585        dst.human = human == null ? null : human.copy();
4586        dst.expression = expression == null ? null : expression.copy();
4587        dst.source = source == null ? null : source.copy();
4588      }
4589
4590      @Override
4591      public boolean equalsDeep(Base other_) {
4592        if (!super.equalsDeep(other_))
4593          return false;
4594        if (!(other_ instanceof ElementDefinitionConstraintComponent))
4595          return false;
4596        ElementDefinitionConstraintComponent o = (ElementDefinitionConstraintComponent) other_;
4597        return compareDeep(key, o.key, true) && compareDeep(requirements, o.requirements, true) && compareDeep(severity, o.severity, true)
4598           && compareDeep(suppress, o.suppress, true) && compareDeep(human, o.human, true) && compareDeep(expression, o.expression, true)
4599           && compareDeep(source, o.source, true);
4600      }
4601
4602      @Override
4603      public boolean equalsShallow(Base other_) {
4604        if (!super.equalsShallow(other_))
4605          return false;
4606        if (!(other_ instanceof ElementDefinitionConstraintComponent))
4607          return false;
4608        ElementDefinitionConstraintComponent o = (ElementDefinitionConstraintComponent) other_;
4609        return compareValues(key, o.key, true) && compareValues(requirements, o.requirements, true) && compareValues(severity, o.severity, true)
4610           && compareValues(suppress, o.suppress, true) && compareValues(human, o.human, true) && compareValues(expression, o.expression, true)
4611           && compareValues(source, o.source, true);
4612      }
4613
4614      public boolean isEmpty() {
4615        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(key, requirements, severity
4616          , suppress, human, expression, source);
4617      }
4618
4619  public String fhirType() {
4620    return "ElementDefinition.constraint";
4621
4622  }
4623
4624  @Override
4625  public String toString() {
4626    return key + ":" + expression + (severity == null ? "("+severity.asStringValue()+")" : "");
4627  }
4628
4629  }
4630
4631    @Block()
4632    public static class ElementDefinitionBindingComponent extends Element implements IBaseDatatypeElement {
4633        /**
4634         * Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
4635         */
4636        @Child(name = "strength", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
4637        @Description(shortDefinition="required | extensible | preferred | example", formalDefinition="Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances." )
4638        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/binding-strength")
4639        protected Enumeration<BindingStrength> strength;
4640
4641        /**
4642         * Describes the intended use of this particular set of codes.
4643         */
4644        @Child(name = "description", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=true)
4645        @Description(shortDefinition="Intended use of codes in the bound value set", formalDefinition="Describes the intended use of this particular set of codes." )
4646        protected MarkdownType description;
4647
4648        /**
4649         * Refers to the value set that identifies the set of codes the binding refers to.
4650         */
4651        @Child(name = "valueSet", type = {CanonicalType.class}, order=3, min=0, max=1, modifier=false, summary=true)
4652        @Description(shortDefinition="Source of value set", formalDefinition="Refers to the value set that identifies the set of codes the binding refers to." )
4653        protected CanonicalType valueSet;
4654
4655        /**
4656         * Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context.
4657         */
4658        @Child(name = "additional", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4659        @Description(shortDefinition="Additional Bindings - more rules about the binding", formalDefinition="Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context." )
4660        protected List<ElementDefinitionBindingAdditionalComponent> additional;
4661
4662        private static final long serialVersionUID = 16276611L;
4663
4664    /**
4665     * Constructor
4666     */
4667      public ElementDefinitionBindingComponent() {
4668        super();
4669      }
4670
4671    /**
4672     * Constructor
4673     */
4674      public ElementDefinitionBindingComponent(BindingStrength strength) {
4675        super();
4676        this.setStrength(strength);
4677      }
4678
4679        /**
4680         * @return {@link #strength} (Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.). This is the underlying object with id, value and extensions. The accessor "getStrength" gives direct access to the value
4681         */
4682        public Enumeration<BindingStrength> getStrengthElement() { 
4683          if (this.strength == null)
4684            if (Configuration.errorOnAutoCreate())
4685              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.strength");
4686            else if (Configuration.doAutoCreate())
4687              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory()); // bb
4688          return this.strength;
4689        }
4690
4691        public boolean hasStrengthElement() { 
4692          return this.strength != null && !this.strength.isEmpty();
4693        }
4694
4695        public boolean hasStrength() { 
4696          return this.strength != null && !this.strength.isEmpty();
4697        }
4698
4699        /**
4700         * @param value {@link #strength} (Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.). This is the underlying object with id, value and extensions. The accessor "getStrength" gives direct access to the value
4701         */
4702        public ElementDefinitionBindingComponent setStrengthElement(Enumeration<BindingStrength> value) { 
4703          this.strength = value;
4704          return this;
4705        }
4706
4707        /**
4708         * @return Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
4709         */
4710        public BindingStrength getStrength() { 
4711          return this.strength == null ? null : this.strength.getValue();
4712        }
4713
4714        /**
4715         * @param value Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.
4716         */
4717        public ElementDefinitionBindingComponent setStrength(BindingStrength value) { 
4718            if (this.strength == null)
4719              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory());
4720            this.strength.setValue(value);
4721          return this;
4722        }
4723
4724        /**
4725         * @return {@link #description} (Describes the intended use of this particular set of codes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4726         */
4727        public MarkdownType getDescriptionElement() { 
4728          if (this.description == null)
4729            if (Configuration.errorOnAutoCreate())
4730              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.description");
4731            else if (Configuration.doAutoCreate())
4732              this.description = new MarkdownType(); // bb
4733          return this.description;
4734        }
4735
4736        public boolean hasDescriptionElement() { 
4737          return this.description != null && !this.description.isEmpty();
4738        }
4739
4740        public boolean hasDescription() { 
4741          return this.description != null && !this.description.isEmpty();
4742        }
4743
4744        /**
4745         * @param value {@link #description} (Describes the intended use of this particular set of codes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4746         */
4747        public ElementDefinitionBindingComponent setDescriptionElement(MarkdownType value) { 
4748          this.description = value;
4749          return this;
4750        }
4751
4752        /**
4753         * @return Describes the intended use of this particular set of codes.
4754         */
4755        public String getDescription() { 
4756          return this.description == null ? null : this.description.getValue();
4757        }
4758
4759        /**
4760         * @param value Describes the intended use of this particular set of codes.
4761         */
4762        public ElementDefinitionBindingComponent setDescription(String value) { 
4763          if (Utilities.noString(value))
4764            this.description = null;
4765          else {
4766            if (this.description == null)
4767              this.description = new MarkdownType();
4768            this.description.setValue(value);
4769          }
4770          return this;
4771        }
4772
4773        /**
4774         * @return {@link #valueSet} (Refers to the value set that identifies the set of codes the binding refers to.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
4775         */
4776        public CanonicalType getValueSetElement() { 
4777          if (this.valueSet == null)
4778            if (Configuration.errorOnAutoCreate())
4779              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.valueSet");
4780            else if (Configuration.doAutoCreate())
4781              this.valueSet = new CanonicalType(); // bb
4782          return this.valueSet;
4783        }
4784
4785        public boolean hasValueSetElement() { 
4786          return this.valueSet != null && !this.valueSet.isEmpty();
4787        }
4788
4789        public boolean hasValueSet() { 
4790          return this.valueSet != null && !this.valueSet.isEmpty();
4791        }
4792
4793        /**
4794         * @param value {@link #valueSet} (Refers to the value set that identifies the set of codes the binding refers to.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
4795         */
4796        public ElementDefinitionBindingComponent setValueSetElement(CanonicalType value) { 
4797          this.valueSet = value;
4798          return this;
4799        }
4800
4801        /**
4802         * @return Refers to the value set that identifies the set of codes the binding refers to.
4803         */
4804        public String getValueSet() { 
4805          return this.valueSet == null ? null : this.valueSet.getValue();
4806        }
4807
4808        /**
4809         * @param value Refers to the value set that identifies the set of codes the binding refers to.
4810         */
4811        public ElementDefinitionBindingComponent setValueSet(String value) { 
4812          if (Utilities.noString(value))
4813            this.valueSet = null;
4814          else {
4815            if (this.valueSet == null)
4816              this.valueSet = new CanonicalType();
4817            this.valueSet.setValue(value);
4818          }
4819          return this;
4820        }
4821
4822        /**
4823         * @return {@link #additional} (Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context.)
4824         */
4825        public List<ElementDefinitionBindingAdditionalComponent> getAdditional() { 
4826          if (this.additional == null)
4827            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
4828          return this.additional;
4829        }
4830
4831        /**
4832         * @return Returns a reference to <code>this</code> for easy method chaining
4833         */
4834        public ElementDefinitionBindingComponent setAdditional(List<ElementDefinitionBindingAdditionalComponent> theAdditional) { 
4835          this.additional = theAdditional;
4836          return this;
4837        }
4838
4839        public boolean hasAdditional() { 
4840          if (this.additional == null)
4841            return false;
4842          for (ElementDefinitionBindingAdditionalComponent item : this.additional)
4843            if (!item.isEmpty())
4844              return true;
4845          return false;
4846        }
4847
4848        public ElementDefinitionBindingAdditionalComponent addAdditional() { //3
4849          ElementDefinitionBindingAdditionalComponent t = new ElementDefinitionBindingAdditionalComponent();
4850          if (this.additional == null)
4851            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
4852          this.additional.add(t);
4853          return t;
4854        }
4855
4856        public ElementDefinitionBindingComponent addAdditional(ElementDefinitionBindingAdditionalComponent t) { //3
4857          if (t == null)
4858            return this;
4859          if (this.additional == null)
4860            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
4861          this.additional.add(t);
4862          return this;
4863        }
4864
4865        /**
4866         * @return The first repetition of repeating field {@link #additional}, creating it if it does not already exist {3}
4867         */
4868        public ElementDefinitionBindingAdditionalComponent getAdditionalFirstRep() { 
4869          if (getAdditional().isEmpty()) {
4870            addAdditional();
4871          }
4872          return getAdditional().get(0);
4873        }
4874
4875        protected void listChildren(List<Property> children) {
4876          super.listChildren(children);
4877          children.add(new Property("strength", "code", "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", 0, 1, strength));
4878          children.add(new Property("description", "markdown", "Describes the intended use of this particular set of codes.", 0, 1, description));
4879          children.add(new Property("valueSet", "canonical(ValueSet)", "Refers to the value set that identifies the set of codes the binding refers to.", 0, 1, valueSet));
4880          children.add(new Property("additional", "", "Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context.", 0, java.lang.Integer.MAX_VALUE, additional));
4881        }
4882
4883        @Override
4884        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4885          switch (_hash) {
4886          case 1791316033: /*strength*/  return new Property("strength", "code", "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", 0, 1, strength);
4887          case -1724546052: /*description*/  return new Property("description", "markdown", "Describes the intended use of this particular set of codes.", 0, 1, description);
4888          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "Refers to the value set that identifies the set of codes the binding refers to.", 0, 1, valueSet);
4889          case -1931413465: /*additional*/  return new Property("additional", "", "Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context.", 0, java.lang.Integer.MAX_VALUE, additional);
4890          default: return super.getNamedProperty(_hash, _name, _checkValid);
4891          }
4892
4893        }
4894
4895      @Override
4896      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4897        switch (hash) {
4898        case 1791316033: /*strength*/ return this.strength == null ? new Base[0] : new Base[] {this.strength}; // Enumeration<BindingStrength>
4899        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
4900        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
4901        case -1931413465: /*additional*/ return this.additional == null ? new Base[0] : this.additional.toArray(new Base[this.additional.size()]); // ElementDefinitionBindingAdditionalComponent
4902        default: return super.getProperty(hash, name, checkValid);
4903        }
4904
4905      }
4906
4907      @Override
4908      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4909        switch (hash) {
4910        case 1791316033: // strength
4911          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
4912          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
4913          return value;
4914        case -1724546052: // description
4915          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4916          return value;
4917        case -1410174671: // valueSet
4918          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
4919          return value;
4920        case -1931413465: // additional
4921          this.getAdditional().add((ElementDefinitionBindingAdditionalComponent) value); // ElementDefinitionBindingAdditionalComponent
4922          return value;
4923        default: return super.setProperty(hash, name, value);
4924        }
4925
4926      }
4927
4928      @Override
4929      public Base setProperty(String name, Base value) throws FHIRException {
4930        if (name.equals("strength")) {
4931          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
4932          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
4933        } else if (name.equals("description")) {
4934          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
4935        } else if (name.equals("valueSet")) {
4936          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
4937        } else if (name.equals("additional")) {
4938          this.getAdditional().add((ElementDefinitionBindingAdditionalComponent) value);
4939        } else
4940          return super.setProperty(name, value);
4941        return value;
4942      }
4943
4944  @Override
4945  public void removeChild(String name, Base value) throws FHIRException {
4946        if (name.equals("strength")) {
4947          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
4948          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
4949        } else if (name.equals("description")) {
4950          this.description = null;
4951        } else if (name.equals("valueSet")) {
4952          this.valueSet = null;
4953        } else if (name.equals("additional")) {
4954          this.getAdditional().remove((ElementDefinitionBindingAdditionalComponent) value);
4955        } else
4956          super.removeChild(name, value);
4957        
4958      }
4959
4960      @Override
4961      public Base makeProperty(int hash, String name) throws FHIRException {
4962        switch (hash) {
4963        case 1791316033:  return getStrengthElement();
4964        case -1724546052:  return getDescriptionElement();
4965        case -1410174671:  return getValueSetElement();
4966        case -1931413465:  return addAdditional(); 
4967        default: return super.makeProperty(hash, name);
4968        }
4969
4970      }
4971
4972      @Override
4973      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4974        switch (hash) {
4975        case 1791316033: /*strength*/ return new String[] {"code"};
4976        case -1724546052: /*description*/ return new String[] {"markdown"};
4977        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
4978        case -1931413465: /*additional*/ return new String[] {};
4979        default: return super.getTypesForProperty(hash, name);
4980        }
4981
4982      }
4983
4984      @Override
4985      public Base addChild(String name) throws FHIRException {
4986        if (name.equals("strength")) {
4987          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.strength");
4988        }
4989        else if (name.equals("description")) {
4990          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.description");
4991        }
4992        else if (name.equals("valueSet")) {
4993          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.valueSet");
4994        }
4995        else if (name.equals("additional")) {
4996          return addAdditional();
4997        }
4998        else
4999          return super.addChild(name);
5000      }
5001
5002      public ElementDefinitionBindingComponent copy() {
5003        ElementDefinitionBindingComponent dst = new ElementDefinitionBindingComponent();
5004        copyValues(dst);
5005        return dst;
5006      }
5007
5008      public void copyValues(ElementDefinitionBindingComponent dst) {
5009        super.copyValues(dst);
5010        dst.strength = strength == null ? null : strength.copy();
5011        dst.description = description == null ? null : description.copy();
5012        dst.valueSet = valueSet == null ? null : valueSet.copy();
5013        if (additional != null) {
5014          dst.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
5015          for (ElementDefinitionBindingAdditionalComponent i : additional)
5016            dst.additional.add(i.copy());
5017        };
5018      }
5019
5020      @Override
5021      public boolean equalsDeep(Base other_) {
5022        if (!super.equalsDeep(other_))
5023          return false;
5024        if (!(other_ instanceof ElementDefinitionBindingComponent))
5025          return false;
5026        ElementDefinitionBindingComponent o = (ElementDefinitionBindingComponent) other_;
5027        return compareDeep(strength, o.strength, true) && compareDeep(description, o.description, true)
5028           && compareDeep(valueSet, o.valueSet, true) && compareDeep(additional, o.additional, true);
5029      }
5030
5031      @Override
5032      public boolean equalsShallow(Base other_) {
5033        if (!super.equalsShallow(other_))
5034          return false;
5035        if (!(other_ instanceof ElementDefinitionBindingComponent))
5036          return false;
5037        ElementDefinitionBindingComponent o = (ElementDefinitionBindingComponent) other_;
5038        return compareValues(strength, o.strength, true) && compareValues(description, o.description, true)
5039           && compareValues(valueSet, o.valueSet, true);
5040      }
5041
5042      public boolean isEmpty() {
5043        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(strength, description, valueSet
5044          , additional);
5045      }
5046
5047  public String fhirType() {
5048    return "ElementDefinition.binding";
5049
5050  }
5051
5052  public boolean hasAdditional(ElementDefinitionBindingAdditionalComponent ab) {
5053    if (hasAdditional()) {
5054      for (ElementDefinitionBindingAdditionalComponent t : getAdditional()) {
5055        if (Base.compareDeep(t, ab, false)) {
5056          return true;
5057        }
5058      }
5059    }
5060    return false;
5061  }
5062
5063  }
5064
5065    @Block()
5066    public static class ElementDefinitionBindingAdditionalComponent extends Element implements IBaseDatatypeElement {
5067        /**
5068         * The use of this additional binding.
5069         */
5070        @Child(name = "purpose", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
5071        @Description(shortDefinition="maximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component", formalDefinition="The use of this additional binding." )
5072        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/additional-binding-purpose")
5073        protected Enumeration<AdditionalBindingPurposeVS> purpose;
5074
5075        /**
5076         * The valueSet that is being bound for the purpose.
5077         */
5078        @Child(name = "valueSet", type = {CanonicalType.class}, order=2, min=1, max=1, modifier=false, summary=true)
5079        @Description(shortDefinition="The value set for the additional binding", formalDefinition="The valueSet that is being bound for the purpose." )
5080        protected CanonicalType valueSet;
5081
5082        /**
5083         * Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5084         */
5085        @Child(name = "documentation", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=true)
5086        @Description(shortDefinition="Documentation of the purpose of use of the binding", formalDefinition="Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used." )
5087        protected MarkdownType documentation;
5088
5089        /**
5090         * Concise documentation - for summary tables.
5091         */
5092        @Child(name = "shortDoco", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
5093        @Description(shortDefinition="Concise documentation - for summary tables", formalDefinition="Concise documentation - for summary tables." )
5094        protected StringType shortDoco;
5095
5096        /**
5097         * Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation tooling.
5098         */
5099        @Child(name = "usage", type = {UsageContext.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5100        @Description(shortDefinition="Qualifies the usage - jurisdiction, gender, workflow status etc.", formalDefinition="Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation tooling." )
5101        protected List<UsageContext> usage;
5102
5103        /**
5104         * Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.
5105         */
5106        @Child(name = "any", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
5107        @Description(shortDefinition="Whether binding can applies to all repeats, or just one", formalDefinition="Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat." )
5108        protected BooleanType any;
5109
5110        private static final long serialVersionUID = -1312796441L;
5111
5112    /**
5113     * Constructor
5114     */
5115      public ElementDefinitionBindingAdditionalComponent() {
5116        super();
5117      }
5118
5119    /**
5120     * Constructor
5121     */
5122      public ElementDefinitionBindingAdditionalComponent(AdditionalBindingPurposeVS purpose, String valueSet) {
5123        super();
5124        this.setPurpose(purpose);
5125        this.setValueSet(valueSet);
5126      }
5127
5128        /**
5129         * @return {@link #purpose} (The use of this additional binding.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
5130         */
5131        public Enumeration<AdditionalBindingPurposeVS> getPurposeElement() { 
5132          if (this.purpose == null)
5133            if (Configuration.errorOnAutoCreate())
5134              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.purpose");
5135            else if (Configuration.doAutoCreate())
5136              this.purpose = new Enumeration<AdditionalBindingPurposeVS>(new AdditionalBindingPurposeVSEnumFactory()); // bb
5137          return this.purpose;
5138        }
5139
5140        public boolean hasPurposeElement() { 
5141          return this.purpose != null && !this.purpose.isEmpty();
5142        }
5143
5144        public boolean hasPurpose() { 
5145          return this.purpose != null && !this.purpose.isEmpty();
5146        }
5147
5148        /**
5149         * @param value {@link #purpose} (The use of this additional binding.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
5150         */
5151        public ElementDefinitionBindingAdditionalComponent setPurposeElement(Enumeration<AdditionalBindingPurposeVS> value) { 
5152          this.purpose = value;
5153          return this;
5154        }
5155
5156        /**
5157         * @return The use of this additional binding.
5158         */
5159        public AdditionalBindingPurposeVS getPurpose() { 
5160          return this.purpose == null ? null : this.purpose.getValue();
5161        }
5162
5163        /**
5164         * @param value The use of this additional binding.
5165         */
5166        public ElementDefinitionBindingAdditionalComponent setPurpose(AdditionalBindingPurposeVS value) { 
5167            if (this.purpose == null)
5168              this.purpose = new Enumeration<AdditionalBindingPurposeVS>(new AdditionalBindingPurposeVSEnumFactory());
5169            this.purpose.setValue(value);
5170          return this;
5171        }
5172
5173        /**
5174         * @return {@link #valueSet} (The valueSet that is being bound for the purpose.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
5175         */
5176        public CanonicalType getValueSetElement() { 
5177          if (this.valueSet == null)
5178            if (Configuration.errorOnAutoCreate())
5179              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.valueSet");
5180            else if (Configuration.doAutoCreate())
5181              this.valueSet = new CanonicalType(); // bb
5182          return this.valueSet;
5183        }
5184
5185        public boolean hasValueSetElement() { 
5186          return this.valueSet != null && !this.valueSet.isEmpty();
5187        }
5188
5189        public boolean hasValueSet() { 
5190          return this.valueSet != null && !this.valueSet.isEmpty();
5191        }
5192
5193        /**
5194         * @param value {@link #valueSet} (The valueSet that is being bound for the purpose.). This is the underlying object with id, value and extensions. The accessor "getValueSet" gives direct access to the value
5195         */
5196        public ElementDefinitionBindingAdditionalComponent setValueSetElement(CanonicalType value) { 
5197          this.valueSet = value;
5198          return this;
5199        }
5200
5201        /**
5202         * @return The valueSet that is being bound for the purpose.
5203         */
5204        public String getValueSet() { 
5205          return this.valueSet == null ? null : this.valueSet.getValue();
5206        }
5207
5208        /**
5209         * @param value The valueSet that is being bound for the purpose.
5210         */
5211        public ElementDefinitionBindingAdditionalComponent setValueSet(String value) { 
5212            if (this.valueSet == null)
5213              this.valueSet = new CanonicalType();
5214            this.valueSet.setValue(value);
5215          return this;
5216        }
5217
5218        /**
5219         * @return {@link #documentation} (Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
5220         */
5221        public MarkdownType getDocumentationElement() { 
5222          if (this.documentation == null)
5223            if (Configuration.errorOnAutoCreate())
5224              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.documentation");
5225            else if (Configuration.doAutoCreate())
5226              this.documentation = new MarkdownType(); // bb
5227          return this.documentation;
5228        }
5229
5230        public boolean hasDocumentationElement() { 
5231          return this.documentation != null && !this.documentation.isEmpty();
5232        }
5233
5234        public boolean hasDocumentation() { 
5235          return this.documentation != null && !this.documentation.isEmpty();
5236        }
5237
5238        /**
5239         * @param value {@link #documentation} (Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
5240         */
5241        public ElementDefinitionBindingAdditionalComponent setDocumentationElement(MarkdownType value) { 
5242          this.documentation = value;
5243          return this;
5244        }
5245
5246        /**
5247         * @return Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5248         */
5249        public String getDocumentation() { 
5250          return this.documentation == null ? null : this.documentation.getValue();
5251        }
5252
5253        /**
5254         * @param value Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5255         */
5256        public ElementDefinitionBindingAdditionalComponent setDocumentation(String value) { 
5257          if (Utilities.noString(value))
5258            this.documentation = null;
5259          else {
5260            if (this.documentation == null)
5261              this.documentation = new MarkdownType();
5262            this.documentation.setValue(value);
5263          }
5264          return this;
5265        }
5266
5267        /**
5268         * @return {@link #shortDoco} (Concise documentation - for summary tables.). This is the underlying object with id, value and extensions. The accessor "getShortDoco" gives direct access to the value
5269         */
5270        public StringType getShortDocoElement() { 
5271          if (this.shortDoco == null)
5272            if (Configuration.errorOnAutoCreate())
5273              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.shortDoco");
5274            else if (Configuration.doAutoCreate())
5275              this.shortDoco = new StringType(); // bb
5276          return this.shortDoco;
5277        }
5278
5279        public boolean hasShortDocoElement() { 
5280          return this.shortDoco != null && !this.shortDoco.isEmpty();
5281        }
5282
5283        public boolean hasShortDoco() { 
5284          return this.shortDoco != null && !this.shortDoco.isEmpty();
5285        }
5286
5287        /**
5288         * @param value {@link #shortDoco} (Concise documentation - for summary tables.). This is the underlying object with id, value and extensions. The accessor "getShortDoco" gives direct access to the value
5289         */
5290        public ElementDefinitionBindingAdditionalComponent setShortDocoElement(StringType value) { 
5291          this.shortDoco = value;
5292          return this;
5293        }
5294
5295        /**
5296         * @return Concise documentation - for summary tables.
5297         */
5298        public String getShortDoco() { 
5299          return this.shortDoco == null ? null : this.shortDoco.getValue();
5300        }
5301
5302        /**
5303         * @param value Concise documentation - for summary tables.
5304         */
5305        public ElementDefinitionBindingAdditionalComponent setShortDoco(String value) { 
5306          if (Utilities.noString(value))
5307            this.shortDoco = null;
5308          else {
5309            if (this.shortDoco == null)
5310              this.shortDoco = new StringType();
5311            this.shortDoco.setValue(value);
5312          }
5313          return this;
5314        }
5315
5316        /**
5317         * @return {@link #usage} (Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation tooling.)
5318         */
5319        public List<UsageContext> getUsage() { 
5320          if (this.usage == null)
5321            this.usage = new ArrayList<UsageContext>();
5322          return this.usage;
5323        }
5324
5325        /**
5326         * @return Returns a reference to <code>this</code> for easy method chaining
5327         */
5328        public ElementDefinitionBindingAdditionalComponent setUsage(List<UsageContext> theUsage) { 
5329          this.usage = theUsage;
5330          return this;
5331        }
5332
5333        public boolean hasUsage() { 
5334          if (this.usage == null)
5335            return false;
5336          for (UsageContext item : this.usage)
5337            if (!item.isEmpty())
5338              return true;
5339          return false;
5340        }
5341
5342        public UsageContext addUsage() { //3
5343          UsageContext t = new UsageContext();
5344          if (this.usage == null)
5345            this.usage = new ArrayList<UsageContext>();
5346          this.usage.add(t);
5347          return t;
5348        }
5349
5350        public ElementDefinitionBindingAdditionalComponent addUsage(UsageContext t) { //3
5351          if (t == null)
5352            return this;
5353          if (this.usage == null)
5354            this.usage = new ArrayList<UsageContext>();
5355          this.usage.add(t);
5356          return this;
5357        }
5358
5359        /**
5360         * @return The first repetition of repeating field {@link #usage}, creating it if it does not already exist {3}
5361         */
5362        public UsageContext getUsageFirstRep() { 
5363          if (getUsage().isEmpty()) {
5364            addUsage();
5365          }
5366          return getUsage().get(0);
5367        }
5368
5369        /**
5370         * @return {@link #any} (Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.). This is the underlying object with id, value and extensions. The accessor "getAny" gives direct access to the value
5371         */
5372        public BooleanType getAnyElement() { 
5373          if (this.any == null)
5374            if (Configuration.errorOnAutoCreate())
5375              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.any");
5376            else if (Configuration.doAutoCreate())
5377              this.any = new BooleanType(); // bb
5378          return this.any;
5379        }
5380
5381        public boolean hasAnyElement() { 
5382          return this.any != null && !this.any.isEmpty();
5383        }
5384
5385        public boolean hasAny() { 
5386          return this.any != null && !this.any.isEmpty();
5387        }
5388
5389        /**
5390         * @param value {@link #any} (Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.). This is the underlying object with id, value and extensions. The accessor "getAny" gives direct access to the value
5391         */
5392        public ElementDefinitionBindingAdditionalComponent setAnyElement(BooleanType value) { 
5393          this.any = value;
5394          return this;
5395        }
5396
5397        /**
5398         * @return Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.
5399         */
5400        public boolean getAny() { 
5401          return this.any == null || this.any.isEmpty() ? false : this.any.getValue();
5402        }
5403
5404        /**
5405         * @param value Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.
5406         */
5407        public ElementDefinitionBindingAdditionalComponent setAny(boolean value) { 
5408            if (this.any == null)
5409              this.any = new BooleanType();
5410            this.any.setValue(value);
5411          return this;
5412        }
5413
5414        protected void listChildren(List<Property> children) {
5415          super.listChildren(children);
5416          children.add(new Property("purpose", "code", "The use of this additional binding.", 0, 1, purpose));
5417          children.add(new Property("valueSet", "canonical(ValueSet)", "The valueSet that is being bound for the purpose.", 0, 1, valueSet));
5418          children.add(new Property("documentation", "markdown", "Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.", 0, 1, documentation));
5419          children.add(new Property("shortDoco", "string", "Concise documentation - for summary tables.", 0, 1, shortDoco));
5420          children.add(new Property("usage", "UsageContext", "Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation tooling.", 0, java.lang.Integer.MAX_VALUE, usage));
5421          children.add(new Property("any", "boolean", "Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.", 0, 1, any));
5422        }
5423
5424        @Override
5425        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5426          switch (_hash) {
5427          case -220463842: /*purpose*/  return new Property("purpose", "code", "The use of this additional binding.", 0, 1, purpose);
5428          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "The valueSet that is being bound for the purpose.", 0, 1, valueSet);
5429          case 1587405498: /*documentation*/  return new Property("documentation", "markdown", "Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.", 0, 1, documentation);
5430          case -2028503853: /*shortDoco*/  return new Property("shortDoco", "string", "Concise documentation - for summary tables.", 0, 1, shortDoco);
5431          case 111574433: /*usage*/  return new Property("usage", "UsageContext", "Qualifies the usage of the binding. Typically bindings are qualified by jurisdiction, but they may also be qualified by gender, workflow status, clinical domain etc. The information to decide whether a usege context applies is usually outside the resource, determined by context, and this might present challenges for validation tooling.", 0, java.lang.Integer.MAX_VALUE, usage);
5432          case 96748: /*any*/  return new Property("any", "boolean", "Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.", 0, 1, any);
5433          default: return super.getNamedProperty(_hash, _name, _checkValid);
5434          }
5435
5436        }
5437
5438      @Override
5439      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5440        switch (hash) {
5441        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // Enumeration<AdditionalBindingPurposeVS>
5442        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
5443        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // MarkdownType
5444        case -2028503853: /*shortDoco*/ return this.shortDoco == null ? new Base[0] : new Base[] {this.shortDoco}; // StringType
5445        case 111574433: /*usage*/ return this.usage == null ? new Base[0] : this.usage.toArray(new Base[this.usage.size()]); // UsageContext
5446        case 96748: /*any*/ return this.any == null ? new Base[0] : new Base[] {this.any}; // BooleanType
5447        default: return super.getProperty(hash, name, checkValid);
5448        }
5449
5450      }
5451
5452      @Override
5453      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5454        switch (hash) {
5455        case -220463842: // purpose
5456          value = new AdditionalBindingPurposeVSEnumFactory().fromType(TypeConvertor.castToCode(value));
5457          this.purpose = (Enumeration) value; // Enumeration<AdditionalBindingPurposeVS>
5458          return value;
5459        case -1410174671: // valueSet
5460          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5461          return value;
5462        case 1587405498: // documentation
5463          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
5464          return value;
5465        case -2028503853: // shortDoco
5466          this.shortDoco = TypeConvertor.castToString(value); // StringType
5467          return value;
5468        case 111574433: // usage
5469          this.getUsage().add(TypeConvertor.castToUsageContext(value)); // UsageContext
5470          return value;
5471        case 96748: // any
5472          this.any = TypeConvertor.castToBoolean(value); // BooleanType
5473          return value;
5474        default: return super.setProperty(hash, name, value);
5475        }
5476
5477      }
5478
5479      @Override
5480      public Base setProperty(String name, Base value) throws FHIRException {
5481        if (name.equals("purpose")) {
5482          value = new AdditionalBindingPurposeVSEnumFactory().fromType(TypeConvertor.castToCode(value));
5483          this.purpose = (Enumeration) value; // Enumeration<AdditionalBindingPurposeVS>
5484        } else if (name.equals("valueSet")) {
5485          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5486        } else if (name.equals("documentation")) {
5487          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
5488        } else if (name.equals("shortDoco")) {
5489          this.shortDoco = TypeConvertor.castToString(value); // StringType
5490        } else if (name.equals("usage")) {
5491          this.getUsage().add(TypeConvertor.castToUsageContext(value));
5492        } else if (name.equals("any")) {
5493          this.any = TypeConvertor.castToBoolean(value); // BooleanType
5494        } else
5495          return super.setProperty(name, value);
5496        return value;
5497      }
5498
5499  @Override
5500  public void removeChild(String name, Base value) throws FHIRException {
5501        if (name.equals("purpose")) {
5502          value = new AdditionalBindingPurposeVSEnumFactory().fromType(TypeConvertor.castToCode(value));
5503          this.purpose = (Enumeration) value; // Enumeration<AdditionalBindingPurposeVS>
5504        } else if (name.equals("valueSet")) {
5505          this.valueSet = null;
5506        } else if (name.equals("documentation")) {
5507          this.documentation = null;
5508        } else if (name.equals("shortDoco")) {
5509          this.shortDoco = null;
5510        } else if (name.equals("usage")) {
5511          this.getUsage().remove(value);
5512        } else if (name.equals("any")) {
5513          this.any = null;
5514        } else
5515          super.removeChild(name, value);
5516        
5517      }
5518
5519      @Override
5520      public Base makeProperty(int hash, String name) throws FHIRException {
5521        switch (hash) {
5522        case -220463842:  return getPurposeElement();
5523        case -1410174671:  return getValueSetElement();
5524        case 1587405498:  return getDocumentationElement();
5525        case -2028503853:  return getShortDocoElement();
5526        case 111574433:  return addUsage(); 
5527        case 96748:  return getAnyElement();
5528        default: return super.makeProperty(hash, name);
5529        }
5530
5531      }
5532
5533      @Override
5534      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5535        switch (hash) {
5536        case -220463842: /*purpose*/ return new String[] {"code"};
5537        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
5538        case 1587405498: /*documentation*/ return new String[] {"markdown"};
5539        case -2028503853: /*shortDoco*/ return new String[] {"string"};
5540        case 111574433: /*usage*/ return new String[] {"UsageContext"};
5541        case 96748: /*any*/ return new String[] {"boolean"};
5542        default: return super.getTypesForProperty(hash, name);
5543        }
5544
5545      }
5546
5547      @Override
5548      public Base addChild(String name) throws FHIRException {
5549        if (name.equals("purpose")) {
5550          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.additional.purpose");
5551        }
5552        else if (name.equals("valueSet")) {
5553          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.additional.valueSet");
5554        }
5555        else if (name.equals("documentation")) {
5556          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.additional.documentation");
5557        }
5558        else if (name.equals("shortDoco")) {
5559          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.additional.shortDoco");
5560        }
5561        else if (name.equals("usage")) {
5562          return addUsage();
5563        }
5564        else if (name.equals("any")) {
5565          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.binding.additional.any");
5566        }
5567        else
5568          return super.addChild(name);
5569      }
5570
5571      public ElementDefinitionBindingAdditionalComponent copy() {
5572        ElementDefinitionBindingAdditionalComponent dst = new ElementDefinitionBindingAdditionalComponent();
5573        copyValues(dst);
5574        return dst;
5575      }
5576
5577      public void copyValues(ElementDefinitionBindingAdditionalComponent dst) {
5578        super.copyValues(dst);
5579        dst.purpose = purpose == null ? null : purpose.copy();
5580        dst.valueSet = valueSet == null ? null : valueSet.copy();
5581        dst.documentation = documentation == null ? null : documentation.copy();
5582        dst.shortDoco = shortDoco == null ? null : shortDoco.copy();
5583        if (usage != null) {
5584          dst.usage = new ArrayList<UsageContext>();
5585          for (UsageContext i : usage)
5586            dst.usage.add(i.copy());
5587        };
5588        dst.any = any == null ? null : any.copy();
5589      }
5590
5591      @Override
5592      public boolean equalsDeep(Base other_) {
5593        if (!super.equalsDeep(other_))
5594          return false;
5595        if (!(other_ instanceof ElementDefinitionBindingAdditionalComponent))
5596          return false;
5597        ElementDefinitionBindingAdditionalComponent o = (ElementDefinitionBindingAdditionalComponent) other_;
5598        return compareDeep(purpose, o.purpose, true) && compareDeep(valueSet, o.valueSet, true) && compareDeep(documentation, o.documentation, true)
5599           && compareDeep(shortDoco, o.shortDoco, true) && compareDeep(usage, o.usage, true) && compareDeep(any, o.any, true)
5600          ;
5601      }
5602
5603      @Override
5604      public boolean equalsShallow(Base other_) {
5605        if (!super.equalsShallow(other_))
5606          return false;
5607        if (!(other_ instanceof ElementDefinitionBindingAdditionalComponent))
5608          return false;
5609        ElementDefinitionBindingAdditionalComponent o = (ElementDefinitionBindingAdditionalComponent) other_;
5610        return compareValues(purpose, o.purpose, true) && compareValues(valueSet, o.valueSet, true) && compareValues(documentation, o.documentation, true)
5611           && compareValues(shortDoco, o.shortDoco, true) && compareValues(any, o.any, true);
5612      }
5613
5614      public boolean isEmpty() {
5615        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, valueSet, documentation
5616          , shortDoco, usage, any);
5617      }
5618
5619  public String fhirType() {
5620    return "ElementDefinition.binding.additional";
5621
5622  }
5623
5624  }
5625
5626    @Block()
5627    public static class ElementDefinitionMappingComponent extends Element implements IBaseDatatypeElement {
5628        @Override
5629      public String toString() {
5630        return identity+"=" + map;
5631      }
5632
5633        /**
5634         * An internal reference to the definition of a mapping.
5635         */
5636        @Child(name = "identity", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=true)
5637        @Description(shortDefinition="Reference to mapping declaration", formalDefinition="An internal reference to the definition of a mapping." )
5638        protected IdType identity;
5639
5640        /**
5641         * Identifies the computable language in which mapping.map is expressed.
5642         */
5643        @Child(name = "language", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
5644        @Description(shortDefinition="Computable language of mapping", formalDefinition="Identifies the computable language in which mapping.map is expressed." )
5645        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/mimetypes")
5646        protected CodeType language;
5647
5648        /**
5649         * Expresses what part of the target specification corresponds to this element.
5650         */
5651        @Child(name = "map", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
5652        @Description(shortDefinition="Details of the mapping", formalDefinition="Expresses what part of the target specification corresponds to this element." )
5653        protected StringType map;
5654
5655        /**
5656         * Comments that provide information about the mapping or its use.
5657         */
5658        @Child(name = "comment", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=true)
5659        @Description(shortDefinition="Comments about the mapping or its use", formalDefinition="Comments that provide information about the mapping or its use." )
5660        protected MarkdownType comment;
5661
5662        private static final long serialVersionUID = -582458727L;
5663
5664    /**
5665     * Constructor
5666     */
5667      public ElementDefinitionMappingComponent() {
5668        super();
5669      }
5670
5671    /**
5672     * Constructor
5673     */
5674      public ElementDefinitionMappingComponent(String identity, String map) {
5675        super();
5676        this.setIdentity(identity);
5677        this.setMap(map);
5678      }
5679
5680        /**
5681         * @return {@link #identity} (An internal reference to the definition of a mapping.). This is the underlying object with id, value and extensions. The accessor "getIdentity" gives direct access to the value
5682         */
5683        public IdType getIdentityElement() { 
5684          if (this.identity == null)
5685            if (Configuration.errorOnAutoCreate())
5686              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.identity");
5687            else if (Configuration.doAutoCreate())
5688              this.identity = new IdType(); // bb
5689          return this.identity;
5690        }
5691
5692        public boolean hasIdentityElement() { 
5693          return this.identity != null && !this.identity.isEmpty();
5694        }
5695
5696        public boolean hasIdentity() { 
5697          return this.identity != null && !this.identity.isEmpty();
5698        }
5699
5700        /**
5701         * @param value {@link #identity} (An internal reference to the definition of a mapping.). This is the underlying object with id, value and extensions. The accessor "getIdentity" gives direct access to the value
5702         */
5703        public ElementDefinitionMappingComponent setIdentityElement(IdType value) { 
5704          this.identity = value;
5705          return this;
5706        }
5707
5708        /**
5709         * @return An internal reference to the definition of a mapping.
5710         */
5711        public String getIdentity() { 
5712          return this.identity == null ? null : this.identity.getValue();
5713        }
5714
5715        /**
5716         * @param value An internal reference to the definition of a mapping.
5717         */
5718        public ElementDefinitionMappingComponent setIdentity(String value) { 
5719            if (this.identity == null)
5720              this.identity = new IdType();
5721            this.identity.setValue(value);
5722          return this;
5723        }
5724
5725        /**
5726         * @return {@link #language} (Identifies the computable language in which mapping.map is expressed.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
5727         */
5728        public CodeType getLanguageElement() { 
5729          if (this.language == null)
5730            if (Configuration.errorOnAutoCreate())
5731              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.language");
5732            else if (Configuration.doAutoCreate())
5733              this.language = new CodeType(); // bb
5734          return this.language;
5735        }
5736
5737        public boolean hasLanguageElement() { 
5738          return this.language != null && !this.language.isEmpty();
5739        }
5740
5741        public boolean hasLanguage() { 
5742          return this.language != null && !this.language.isEmpty();
5743        }
5744
5745        /**
5746         * @param value {@link #language} (Identifies the computable language in which mapping.map is expressed.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
5747         */
5748        public ElementDefinitionMappingComponent setLanguageElement(CodeType value) { 
5749          this.language = value;
5750          return this;
5751        }
5752
5753        /**
5754         * @return Identifies the computable language in which mapping.map is expressed.
5755         */
5756        public String getLanguage() { 
5757          return this.language == null ? null : this.language.getValue();
5758        }
5759
5760        /**
5761         * @param value Identifies the computable language in which mapping.map is expressed.
5762         */
5763        public ElementDefinitionMappingComponent setLanguage(String value) { 
5764          if (Utilities.noString(value))
5765            this.language = null;
5766          else {
5767            if (this.language == null)
5768              this.language = new CodeType();
5769            this.language.setValue(value);
5770          }
5771          return this;
5772        }
5773
5774        /**
5775         * @return {@link #map} (Expresses what part of the target specification corresponds to this element.). This is the underlying object with id, value and extensions. The accessor "getMap" gives direct access to the value
5776         */
5777        public StringType getMapElement() { 
5778          if (this.map == null)
5779            if (Configuration.errorOnAutoCreate())
5780              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.map");
5781            else if (Configuration.doAutoCreate())
5782              this.map = new StringType(); // bb
5783          return this.map;
5784        }
5785
5786        public boolean hasMapElement() { 
5787          return this.map != null && !this.map.isEmpty();
5788        }
5789
5790        public boolean hasMap() { 
5791          return this.map != null && !this.map.isEmpty();
5792        }
5793
5794        /**
5795         * @param value {@link #map} (Expresses what part of the target specification corresponds to this element.). This is the underlying object with id, value and extensions. The accessor "getMap" gives direct access to the value
5796         */
5797        public ElementDefinitionMappingComponent setMapElement(StringType value) { 
5798          this.map = value;
5799          return this;
5800        }
5801
5802        /**
5803         * @return Expresses what part of the target specification corresponds to this element.
5804         */
5805        public String getMap() { 
5806          return this.map == null ? null : this.map.getValue();
5807        }
5808
5809        /**
5810         * @param value Expresses what part of the target specification corresponds to this element.
5811         */
5812        public ElementDefinitionMappingComponent setMap(String value) { 
5813            if (this.map == null)
5814              this.map = new StringType();
5815            this.map.setValue(value);
5816          return this;
5817        }
5818
5819        /**
5820         * @return {@link #comment} (Comments that provide information about the mapping or its use.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
5821         */
5822        public MarkdownType getCommentElement() { 
5823          if (this.comment == null)
5824            if (Configuration.errorOnAutoCreate())
5825              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.comment");
5826            else if (Configuration.doAutoCreate())
5827              this.comment = new MarkdownType(); // bb
5828          return this.comment;
5829        }
5830
5831        public boolean hasCommentElement() { 
5832          return this.comment != null && !this.comment.isEmpty();
5833        }
5834
5835        public boolean hasComment() { 
5836          return this.comment != null && !this.comment.isEmpty();
5837        }
5838
5839        /**
5840         * @param value {@link #comment} (Comments that provide information about the mapping or its use.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
5841         */
5842        public ElementDefinitionMappingComponent setCommentElement(MarkdownType value) { 
5843          this.comment = value;
5844          return this;
5845        }
5846
5847        /**
5848         * @return Comments that provide information about the mapping or its use.
5849         */
5850        public String getComment() { 
5851          return this.comment == null ? null : this.comment.getValue();
5852        }
5853
5854        /**
5855         * @param value Comments that provide information about the mapping or its use.
5856         */
5857        public ElementDefinitionMappingComponent setComment(String value) { 
5858          if (Utilities.noString(value))
5859            this.comment = null;
5860          else {
5861            if (this.comment == null)
5862              this.comment = new MarkdownType();
5863            this.comment.setValue(value);
5864          }
5865          return this;
5866        }
5867
5868        protected void listChildren(List<Property> children) {
5869          super.listChildren(children);
5870          children.add(new Property("identity", "id", "An internal reference to the definition of a mapping.", 0, 1, identity));
5871          children.add(new Property("language", "code", "Identifies the computable language in which mapping.map is expressed.", 0, 1, language));
5872          children.add(new Property("map", "string", "Expresses what part of the target specification corresponds to this element.", 0, 1, map));
5873          children.add(new Property("comment", "markdown", "Comments that provide information about the mapping or its use.", 0, 1, comment));
5874        }
5875
5876        @Override
5877        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5878          switch (_hash) {
5879          case -135761730: /*identity*/  return new Property("identity", "id", "An internal reference to the definition of a mapping.", 0, 1, identity);
5880          case -1613589672: /*language*/  return new Property("language", "code", "Identifies the computable language in which mapping.map is expressed.", 0, 1, language);
5881          case 107868: /*map*/  return new Property("map", "string", "Expresses what part of the target specification corresponds to this element.", 0, 1, map);
5882          case 950398559: /*comment*/  return new Property("comment", "markdown", "Comments that provide information about the mapping or its use.", 0, 1, comment);
5883          default: return super.getNamedProperty(_hash, _name, _checkValid);
5884          }
5885
5886        }
5887
5888      @Override
5889      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5890        switch (hash) {
5891        case -135761730: /*identity*/ return this.identity == null ? new Base[0] : new Base[] {this.identity}; // IdType
5892        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
5893        case 107868: /*map*/ return this.map == null ? new Base[0] : new Base[] {this.map}; // StringType
5894        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
5895        default: return super.getProperty(hash, name, checkValid);
5896        }
5897
5898      }
5899
5900      @Override
5901      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5902        switch (hash) {
5903        case -135761730: // identity
5904          this.identity = TypeConvertor.castToId(value); // IdType
5905          return value;
5906        case -1613589672: // language
5907          this.language = TypeConvertor.castToCode(value); // CodeType
5908          return value;
5909        case 107868: // map
5910          this.map = TypeConvertor.castToString(value); // StringType
5911          return value;
5912        case 950398559: // comment
5913          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
5914          return value;
5915        default: return super.setProperty(hash, name, value);
5916        }
5917
5918      }
5919
5920      @Override
5921      public Base setProperty(String name, Base value) throws FHIRException {
5922        if (name.equals("identity")) {
5923          this.identity = TypeConvertor.castToId(value); // IdType
5924        } else if (name.equals("language")) {
5925          this.language = TypeConvertor.castToCode(value); // CodeType
5926        } else if (name.equals("map")) {
5927          this.map = TypeConvertor.castToString(value); // StringType
5928        } else if (name.equals("comment")) {
5929          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
5930        } else
5931          return super.setProperty(name, value);
5932        return value;
5933      }
5934
5935  @Override
5936  public void removeChild(String name, Base value) throws FHIRException {
5937        if (name.equals("identity")) {
5938          this.identity = null;
5939        } else if (name.equals("language")) {
5940          this.language = null;
5941        } else if (name.equals("map")) {
5942          this.map = null;
5943        } else if (name.equals("comment")) {
5944          this.comment = null;
5945        } else
5946          super.removeChild(name, value);
5947        
5948      }
5949
5950      @Override
5951      public Base makeProperty(int hash, String name) throws FHIRException {
5952        switch (hash) {
5953        case -135761730:  return getIdentityElement();
5954        case -1613589672:  return getLanguageElement();
5955        case 107868:  return getMapElement();
5956        case 950398559:  return getCommentElement();
5957        default: return super.makeProperty(hash, name);
5958        }
5959
5960      }
5961
5962      @Override
5963      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5964        switch (hash) {
5965        case -135761730: /*identity*/ return new String[] {"id"};
5966        case -1613589672: /*language*/ return new String[] {"code"};
5967        case 107868: /*map*/ return new String[] {"string"};
5968        case 950398559: /*comment*/ return new String[] {"markdown"};
5969        default: return super.getTypesForProperty(hash, name);
5970        }
5971
5972      }
5973
5974      @Override
5975      public Base addChild(String name) throws FHIRException {
5976        if (name.equals("identity")) {
5977          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mapping.identity");
5978        }
5979        else if (name.equals("language")) {
5980          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mapping.language");
5981        }
5982        else if (name.equals("map")) {
5983          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mapping.map");
5984        }
5985        else if (name.equals("comment")) {
5986          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mapping.comment");
5987        }
5988        else
5989          return super.addChild(name);
5990      }
5991
5992      public ElementDefinitionMappingComponent copy() {
5993        ElementDefinitionMappingComponent dst = new ElementDefinitionMappingComponent();
5994        copyValues(dst);
5995        return dst;
5996      }
5997
5998      public void copyValues(ElementDefinitionMappingComponent dst) {
5999        super.copyValues(dst);
6000        dst.identity = identity == null ? null : identity.copy();
6001        dst.language = language == null ? null : language.copy();
6002        dst.map = map == null ? null : map.copy();
6003        dst.comment = comment == null ? null : comment.copy();
6004      }
6005
6006      @Override
6007      public boolean equalsDeep(Base other_) {
6008        if (!super.equalsDeep(other_))
6009          return false;
6010        if (!(other_ instanceof ElementDefinitionMappingComponent))
6011          return false;
6012        ElementDefinitionMappingComponent o = (ElementDefinitionMappingComponent) other_;
6013        return compareDeep(identity, o.identity, true) && compareDeep(language, o.language, true) && compareDeep(map, o.map, true)
6014           && compareDeep(comment, o.comment, true);
6015      }
6016
6017      @Override
6018      public boolean equalsShallow(Base other_) {
6019        if (!super.equalsShallow(other_))
6020          return false;
6021        if (!(other_ instanceof ElementDefinitionMappingComponent))
6022          return false;
6023        ElementDefinitionMappingComponent o = (ElementDefinitionMappingComponent) other_;
6024        return compareValues(identity, o.identity, true) && compareValues(language, o.language, true) && compareValues(map, o.map, true)
6025           && compareValues(comment, o.comment, true);
6026      }
6027
6028      public boolean isEmpty() {
6029        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identity, language, map
6030          , comment);
6031      }
6032
6033  public String fhirType() {
6034    return "ElementDefinition.mapping";
6035
6036  }
6037
6038  }
6039
6040    /**
6041     * The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
6042     */
6043    @Child(name = "path", type = {StringType.class}, order=0, min=1, max=1, modifier=false, summary=true)
6044    @Description(shortDefinition="Path of the element in the hierarchy of elements", formalDefinition="The path identifies the element and is expressed as a \".\"-separated list of ancestor elements, beginning with the name of the resource or extension." )
6045    protected StringType path;
6046
6047    /**
6048     * Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.
6049     */
6050    @Child(name = "representation", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6051    @Description(shortDefinition="xmlAttr | xmlText | typeAttr | cdaText | xhtml", formalDefinition="Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used." )
6052    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/property-representation")
6053    protected List<Enumeration<PropertyRepresentation>> representation;
6054
6055    /**
6056     * The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.
6057     */
6058    @Child(name = "sliceName", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
6059    @Description(shortDefinition="Name for this particular element (in a set of slices)", formalDefinition="The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element." )
6060    protected StringType sliceName;
6061
6062    /**
6063     * If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.
6064     */
6065    @Child(name = "sliceIsConstraining", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
6066    @Description(shortDefinition="If this slice definition constrains an inherited slice definition (or not)", formalDefinition="If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName." )
6067    protected BooleanType sliceIsConstraining;
6068
6069    /**
6070     * A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
6071     */
6072    @Child(name = "label", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
6073    @Description(shortDefinition="Name for element to display with or prompt for element", formalDefinition="A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form." )
6074    protected StringType label;
6075
6076    /**
6077     * A code that has the same meaning as the element in a particular terminology.
6078     */
6079    @Child(name = "code", type = {Coding.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6080    @Description(shortDefinition="Corresponding codes in terminologies", formalDefinition="A code that has the same meaning as the element in a particular terminology." )
6081    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://loinc.org/vs")
6082    protected List<Coding> code;
6083
6084    /**
6085     * Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).
6086     */
6087    @Child(name = "slicing", type = {}, order=6, min=0, max=1, modifier=false, summary=true)
6088    @Description(shortDefinition="This element is sliced - slices follow", formalDefinition="Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set)." )
6089    protected ElementDefinitionSlicingComponent slicing;
6090
6091    /**
6092     * A concise description of what this element means (e.g. for use in autogenerated summaries).
6093     */
6094    @Child(name = "short", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
6095    @Description(shortDefinition="Concise definition for space-constrained presentation", formalDefinition="A concise description of what this element means (e.g. for use in autogenerated summaries)." )
6096    protected StringType short_;
6097
6098    /**
6099     * Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).
6100     */
6101    @Child(name = "definition", type = {MarkdownType.class}, order=8, min=0, max=1, modifier=false, summary=true)
6102    @Description(shortDefinition="Full formal definition as narrative text", formalDefinition="Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition)." )
6103    protected MarkdownType definition;
6104
6105    /**
6106     * Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).
6107     */
6108    @Child(name = "comment", type = {MarkdownType.class}, order=9, min=0, max=1, modifier=false, summary=true)
6109    @Description(shortDefinition="Comments about the use of this element", formalDefinition="Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment)." )
6110    protected MarkdownType comment;
6111
6112    /**
6113     * This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.
6114     */
6115    @Child(name = "requirements", type = {MarkdownType.class}, order=10, min=0, max=1, modifier=false, summary=true)
6116    @Description(shortDefinition="Why this resource has been created", formalDefinition="This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element." )
6117    protected MarkdownType requirements;
6118
6119    /**
6120     * Identifies additional names by which this element might also be known.
6121     */
6122    @Child(name = "alias", type = {StringType.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6123    @Description(shortDefinition="Other names", formalDefinition="Identifies additional names by which this element might also be known." )
6124    protected List<StringType> alias;
6125
6126    /**
6127     * The minimum number of times this element SHALL appear in the instance.
6128     */
6129    @Child(name = "min", type = {UnsignedIntType.class}, order=12, min=0, max=1, modifier=false, summary=true)
6130    @Description(shortDefinition="Minimum Cardinality", formalDefinition="The minimum number of times this element SHALL appear in the instance." )
6131    protected UnsignedIntType min;
6132
6133    /**
6134     * The maximum number of times this element is permitted to appear in the instance.
6135     */
6136    @Child(name = "max", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=true)
6137    @Description(shortDefinition="Maximum Cardinality (a number or *)", formalDefinition="The maximum number of times this element is permitted to appear in the instance." )
6138    protected StringType max;
6139
6140    /**
6141     * Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.
6142     */
6143    @Child(name = "base", type = {}, order=14, min=0, max=1, modifier=false, summary=true)
6144    @Description(shortDefinition="Base definition information for tools", formalDefinition="Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same." )
6145    protected ElementDefinitionBaseComponent base;
6146
6147    /**
6148     * Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.
6149     */
6150    @Child(name = "contentReference", type = {UriType.class}, order=15, min=0, max=1, modifier=false, summary=true)
6151    @Description(shortDefinition="Reference to definition of content for the element", formalDefinition="Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc." )
6152    protected UriType contentReference;
6153
6154    /**
6155     * The data type or resource that the value of this element is permitted to be.
6156     */
6157    @Child(name = "type", type = {}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6158    @Description(shortDefinition="Data type and Profile for this element", formalDefinition="The data type or resource that the value of this element is permitted to be." )
6159    protected List<TypeRefComponent> type;
6160
6161    /**
6162     * The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').
6163     */
6164    @Child(name = "defaultValue", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=17, min=0, max=1, modifier=false, summary=true)
6165    @Description(shortDefinition="Specified value if missing from instance", formalDefinition="The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false')." )
6166    protected DataType defaultValue;
6167
6168    /**
6169     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').
6170     */
6171    @Child(name = "meaningWhenMissing", type = {MarkdownType.class}, order=18, min=0, max=1, modifier=false, summary=true)
6172    @Description(shortDefinition="Implicit meaning when this element is missing", formalDefinition="The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing')." )
6173    protected MarkdownType meaningWhenMissing;
6174
6175    /**
6176     * If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.
6177     */
6178    @Child(name = "orderMeaning", type = {StringType.class}, order=19, min=0, max=1, modifier=false, summary=true)
6179    @Description(shortDefinition="What the order of the elements means", formalDefinition="If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning." )
6180    protected StringType orderMeaning;
6181
6182    /**
6183     * Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.
6184     */
6185    @Child(name = "fixed", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=20, min=0, max=1, modifier=false, summary=true)
6186    @Description(shortDefinition="Value must be exactly this", formalDefinition="Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing." )
6187    protected DataType fixed;
6188
6189    /**
6190     * Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
6191
6192When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
6193
6194When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
6195
6196When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
6197
61981. If primitive: it must match exactly the pattern value
61992. If a complex object: it must match (recursively) the pattern value
62003. If an array: it must match (recursively) the pattern value
6201
6202If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.
6203     */
6204    @Child(name = "pattern", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=21, min=0, max=1, modifier=false, summary=true)
6205    @Description(shortDefinition="Value must have at least these property values", formalDefinition="Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have." )
6206    protected DataType pattern;
6207
6208    /**
6209     * A sample value for this element demonstrating the type of information that would typically be found in the element.
6210     */
6211    @Child(name = "example", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6212    @Description(shortDefinition="Example value (as defined for type)", formalDefinition="A sample value for this element demonstrating the type of information that would typically be found in the element." )
6213    protected List<ElementDefinitionExampleComponent> example;
6214
6215    /**
6216     * The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
6217     */
6218    @Child(name = "minValue", type = {DateType.class, DateTimeType.class, InstantType.class, TimeType.class, DecimalType.class, IntegerType.class, Integer64Type.class, PositiveIntType.class, UnsignedIntType.class, Quantity.class}, order=23, min=0, max=1, modifier=false, summary=true)
6219    @Description(shortDefinition="Minimum Allowed Value (for some types)", formalDefinition="The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity." )
6220    protected DataType minValue;
6221
6222    /**
6223     * The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.
6224     */
6225    @Child(name = "maxValue", type = {DateType.class, DateTimeType.class, InstantType.class, TimeType.class, DecimalType.class, IntegerType.class, Integer64Type.class, PositiveIntType.class, UnsignedIntType.class, Quantity.class}, order=24, min=0, max=1, modifier=false, summary=true)
6226    @Description(shortDefinition="Maximum Allowed Value (for some types)", formalDefinition="The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity." )
6227    protected DataType maxValue;
6228
6229    /**
6230     * Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).
6231     */
6232    @Child(name = "maxLength", type = {IntegerType.class}, order=25, min=0, max=1, modifier=false, summary=true)
6233    @Description(shortDefinition="Max length for string type data", formalDefinition="Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html))." )
6234    protected IntegerType maxLength;
6235
6236    /**
6237     * A reference to an invariant that may make additional statements about the cardinality or value in the instance.
6238     */
6239    @Child(name = "condition", type = {IdType.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6240    @Description(shortDefinition="Reference to invariant about presence", formalDefinition="A reference to an invariant that may make additional statements about the cardinality or value in the instance." )
6241    protected List<IdType> condition;
6242
6243    /**
6244     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.
6245     */
6246    @Child(name = "constraint", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6247    @Description(shortDefinition="Condition that must evaluate to true", formalDefinition="Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance." )
6248    protected List<ElementDefinitionConstraintComponent> constraint;
6249
6250    /**
6251     * Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
6252     */
6253    @Child(name = "mustHaveValue", type = {BooleanType.class}, order=28, min=0, max=1, modifier=false, summary=true)
6254    @Description(shortDefinition="For primitives, that a value must be present - not replaced by an extension", formalDefinition="Specifies for a primitive data type that the value of the data type cannot be replaced by an extension." )
6255    protected BooleanType mustHaveValue;
6256
6257    /**
6258     * Specifies a list of extensions that can appear in place of a primitive value.
6259     */
6260    @Child(name = "valueAlternatives", type = {CanonicalType.class}, order=29, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6261    @Description(shortDefinition="Extensions that are allowed to replace a primitive value", formalDefinition="Specifies a list of extensions that can appear in place of a primitive value." )
6262    protected List<CanonicalType> valueAlternatives;
6263
6264    /**
6265     * If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.
6266     */
6267    @Child(name = "mustSupport", type = {BooleanType.class}, order=30, min=0, max=1, modifier=false, summary=true)
6268    @Description(shortDefinition="If the element must be supported (discouraged - see obligations)", formalDefinition="If true, implementations that produce or consume resources SHALL provide \"support\" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation." )
6269    protected BooleanType mustSupport;
6270
6271    /**
6272     * If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.
6273     */
6274    @Child(name = "isModifier", type = {BooleanType.class}, order=31, min=0, max=1, modifier=false, summary=true)
6275    @Description(shortDefinition="If this modifies the meaning of other elements", formalDefinition="If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension." )
6276    protected BooleanType isModifier;
6277
6278    /**
6279     * Explains how that element affects the interpretation of the resource or element that contains it.
6280     */
6281    @Child(name = "isModifierReason", type = {StringType.class}, order=32, min=0, max=1, modifier=false, summary=true)
6282    @Description(shortDefinition="Reason that this element is marked as a modifier", formalDefinition="Explains how that element affects the interpretation of the resource or element that contains it." )
6283    protected StringType isModifierReason;
6284
6285    /**
6286     * Whether the element should be included if a client requests a search with the parameter _summary=true.
6287     */
6288    @Child(name = "isSummary", type = {BooleanType.class}, order=33, min=0, max=1, modifier=false, summary=true)
6289    @Description(shortDefinition="Include when _summary = true?", formalDefinition="Whether the element should be included if a client requests a search with the parameter _summary=true." )
6290    protected BooleanType isSummary;
6291
6292    /**
6293     * Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).
6294     */
6295    @Child(name = "binding", type = {}, order=34, min=0, max=1, modifier=false, summary=true)
6296    @Description(shortDefinition="ValueSet details if this is coded", formalDefinition="Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri)." )
6297    protected ElementDefinitionBindingComponent binding;
6298
6299    /**
6300     * Identifies a concept from an external specification that roughly corresponds to this element.
6301     */
6302    @Child(name = "mapping", type = {}, order=35, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6303    @Description(shortDefinition="Map element to another set of definitions", formalDefinition="Identifies a concept from an external specification that roughly corresponds to this element." )
6304    protected List<ElementDefinitionMappingComponent> mapping;
6305
6306    private static final long serialVersionUID = -1474105308L;
6307
6308  /**
6309   * Constructor
6310   */
6311    public ElementDefinition() {
6312      super();
6313    }
6314
6315  /**
6316   * Constructor
6317   */
6318    public ElementDefinition(String path) {
6319      super();
6320      this.setPath(path);
6321    }
6322
6323    /**
6324     * @return {@link #path} (The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
6325     */
6326    public StringType getPathElement() { 
6327      if (this.path == null)
6328        if (Configuration.errorOnAutoCreate())
6329          throw new Error("Attempt to auto-create ElementDefinition.path");
6330        else if (Configuration.doAutoCreate())
6331          this.path = new StringType(); // bb
6332      return this.path;
6333    }
6334
6335    public boolean hasPathElement() { 
6336      return this.path != null && !this.path.isEmpty();
6337    }
6338
6339    public boolean hasPath() { 
6340      return this.path != null && !this.path.isEmpty();
6341    }
6342
6343    /**
6344     * @param value {@link #path} (The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
6345     */
6346    public ElementDefinition setPathElement(StringType value) { 
6347      this.path = value;
6348      return this;
6349    }
6350
6351    /**
6352     * @return The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
6353     */
6354    public String getPath() { 
6355      return this.path == null ? null : this.path.getValue();
6356    }
6357
6358    /**
6359     * @param value The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
6360     */
6361    public ElementDefinition setPath(String value) { 
6362        if (this.path == null)
6363          this.path = new StringType();
6364        this.path.setValue(value);
6365      return this;
6366    }
6367
6368    /**
6369     * @return {@link #representation} (Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.)
6370     */
6371    public List<Enumeration<PropertyRepresentation>> getRepresentation() { 
6372      if (this.representation == null)
6373        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6374      return this.representation;
6375    }
6376
6377    /**
6378     * @return Returns a reference to <code>this</code> for easy method chaining
6379     */
6380    public ElementDefinition setRepresentation(List<Enumeration<PropertyRepresentation>> theRepresentation) { 
6381      this.representation = theRepresentation;
6382      return this;
6383    }
6384
6385    public boolean hasRepresentation() { 
6386      if (this.representation == null)
6387        return false;
6388      for (Enumeration<PropertyRepresentation> item : this.representation)
6389        if (!item.isEmpty())
6390          return true;
6391      return false;
6392    }
6393
6394    /**
6395     * @return {@link #representation} (Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.)
6396     */
6397    public Enumeration<PropertyRepresentation> addRepresentationElement() {//2 
6398      Enumeration<PropertyRepresentation> t = new Enumeration<PropertyRepresentation>(new PropertyRepresentationEnumFactory());
6399      if (this.representation == null)
6400        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6401      this.representation.add(t);
6402      return t;
6403    }
6404
6405    /**
6406     * @param value {@link #representation} (Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.)
6407     */
6408    public ElementDefinition addRepresentation(PropertyRepresentation value) { //1
6409      Enumeration<PropertyRepresentation> t = new Enumeration<PropertyRepresentation>(new PropertyRepresentationEnumFactory());
6410      t.setValue(value);
6411      if (this.representation == null)
6412        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6413      this.representation.add(t);
6414      return this;
6415    }
6416
6417    /**
6418     * @param value {@link #representation} (Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.)
6419     */
6420    public boolean hasRepresentation(PropertyRepresentation value) { 
6421      if (this.representation == null)
6422        return false;
6423      for (Enumeration<PropertyRepresentation> v : this.representation)
6424        if (v.getValue().equals(value)) // code
6425          return true;
6426      return false;
6427    }
6428
6429    /**
6430     * @return {@link #sliceName} (The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.). This is the underlying object with id, value and extensions. The accessor "getSliceName" gives direct access to the value
6431     */
6432    public StringType getSliceNameElement() { 
6433      if (this.sliceName == null)
6434        if (Configuration.errorOnAutoCreate())
6435          throw new Error("Attempt to auto-create ElementDefinition.sliceName");
6436        else if (Configuration.doAutoCreate())
6437          this.sliceName = new StringType(); // bb
6438      return this.sliceName;
6439    }
6440
6441    public boolean hasSliceNameElement() { 
6442      return this.sliceName != null && !this.sliceName.isEmpty();
6443    }
6444
6445    public boolean hasSliceName() { 
6446      return this.sliceName != null && !this.sliceName.isEmpty();
6447    }
6448
6449    /**
6450     * @param value {@link #sliceName} (The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.). This is the underlying object with id, value and extensions. The accessor "getSliceName" gives direct access to the value
6451     */
6452    public ElementDefinition setSliceNameElement(StringType value) { 
6453      this.sliceName = value;
6454      return this;
6455    }
6456
6457    /**
6458     * @return The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.
6459     */
6460    public String getSliceName() { 
6461      return this.sliceName == null ? null : this.sliceName.getValue();
6462    }
6463
6464    /**
6465     * @param value The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.
6466     */
6467    public ElementDefinition setSliceName(String value) { 
6468      if (Utilities.noString(value))
6469        this.sliceName = null;
6470      else {
6471        if (this.sliceName == null)
6472          this.sliceName = new StringType();
6473        this.sliceName.setValue(value);
6474      }
6475      return this;
6476    }
6477
6478    /**
6479     * @return {@link #sliceIsConstraining} (If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.). This is the underlying object with id, value and extensions. The accessor "getSliceIsConstraining" gives direct access to the value
6480     */
6481    public BooleanType getSliceIsConstrainingElement() { 
6482      if (this.sliceIsConstraining == null)
6483        if (Configuration.errorOnAutoCreate())
6484          throw new Error("Attempt to auto-create ElementDefinition.sliceIsConstraining");
6485        else if (Configuration.doAutoCreate())
6486          this.sliceIsConstraining = new BooleanType(); // bb
6487      return this.sliceIsConstraining;
6488    }
6489
6490    public boolean hasSliceIsConstrainingElement() { 
6491      return this.sliceIsConstraining != null && !this.sliceIsConstraining.isEmpty();
6492    }
6493
6494    public boolean hasSliceIsConstraining() { 
6495      return this.sliceIsConstraining != null && !this.sliceIsConstraining.isEmpty();
6496    }
6497
6498    /**
6499     * @param value {@link #sliceIsConstraining} (If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.). This is the underlying object with id, value and extensions. The accessor "getSliceIsConstraining" gives direct access to the value
6500     */
6501    public ElementDefinition setSliceIsConstrainingElement(BooleanType value) { 
6502      this.sliceIsConstraining = value;
6503      return this;
6504    }
6505
6506    /**
6507     * @return If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.
6508     */
6509    public boolean getSliceIsConstraining() { 
6510      return this.sliceIsConstraining == null || this.sliceIsConstraining.isEmpty() ? false : this.sliceIsConstraining.getValue();
6511    }
6512
6513    /**
6514     * @param value If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.
6515     */
6516    public ElementDefinition setSliceIsConstraining(boolean value) { 
6517        if (this.sliceIsConstraining == null)
6518          this.sliceIsConstraining = new BooleanType();
6519        this.sliceIsConstraining.setValue(value);
6520      return this;
6521    }
6522
6523    /**
6524     * @return {@link #label} (A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
6525     */
6526    public StringType getLabelElement() { 
6527      if (this.label == null)
6528        if (Configuration.errorOnAutoCreate())
6529          throw new Error("Attempt to auto-create ElementDefinition.label");
6530        else if (Configuration.doAutoCreate())
6531          this.label = new StringType(); // bb
6532      return this.label;
6533    }
6534
6535    public boolean hasLabelElement() { 
6536      return this.label != null && !this.label.isEmpty();
6537    }
6538
6539    public boolean hasLabel() { 
6540      return this.label != null && !this.label.isEmpty();
6541    }
6542
6543    /**
6544     * @param value {@link #label} (A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
6545     */
6546    public ElementDefinition setLabelElement(StringType value) { 
6547      this.label = value;
6548      return this;
6549    }
6550
6551    /**
6552     * @return A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
6553     */
6554    public String getLabel() { 
6555      return this.label == null ? null : this.label.getValue();
6556    }
6557
6558    /**
6559     * @param value A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
6560     */
6561    public ElementDefinition setLabel(String value) { 
6562      if (Utilities.noString(value))
6563        this.label = null;
6564      else {
6565        if (this.label == null)
6566          this.label = new StringType();
6567        this.label.setValue(value);
6568      }
6569      return this;
6570    }
6571
6572    /**
6573     * @return {@link #code} (A code that has the same meaning as the element in a particular terminology.)
6574     */
6575    public List<Coding> getCode() { 
6576      if (this.code == null)
6577        this.code = new ArrayList<Coding>();
6578      return this.code;
6579    }
6580
6581    /**
6582     * @return Returns a reference to <code>this</code> for easy method chaining
6583     */
6584    public ElementDefinition setCode(List<Coding> theCode) { 
6585      this.code = theCode;
6586      return this;
6587    }
6588
6589    public boolean hasCode() { 
6590      if (this.code == null)
6591        return false;
6592      for (Coding item : this.code)
6593        if (!item.isEmpty())
6594          return true;
6595      return false;
6596    }
6597
6598    public Coding addCode() { //3
6599      Coding t = new Coding();
6600      if (this.code == null)
6601        this.code = new ArrayList<Coding>();
6602      this.code.add(t);
6603      return t;
6604    }
6605
6606    public ElementDefinition addCode(Coding t) { //3
6607      if (t == null)
6608        return this;
6609      if (this.code == null)
6610        this.code = new ArrayList<Coding>();
6611      this.code.add(t);
6612      return this;
6613    }
6614
6615    /**
6616     * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
6617     */
6618    public Coding getCodeFirstRep() { 
6619      if (getCode().isEmpty()) {
6620        addCode();
6621      }
6622      return getCode().get(0);
6623    }
6624
6625    /**
6626     * @return {@link #slicing} (Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).)
6627     */
6628    public ElementDefinitionSlicingComponent getSlicing() { 
6629      if (this.slicing == null)
6630        if (Configuration.errorOnAutoCreate())
6631          throw new Error("Attempt to auto-create ElementDefinition.slicing");
6632        else if (Configuration.doAutoCreate())
6633          this.slicing = new ElementDefinitionSlicingComponent(); // cc
6634      return this.slicing;
6635    }
6636
6637    public boolean hasSlicing() { 
6638      return this.slicing != null && !this.slicing.isEmpty();
6639    }
6640
6641    /**
6642     * @param value {@link #slicing} (Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).)
6643     */
6644    public ElementDefinition setSlicing(ElementDefinitionSlicingComponent value) { 
6645      this.slicing = value;
6646      return this;
6647    }
6648
6649    /**
6650     * @return {@link #short_} (A concise description of what this element means (e.g. for use in autogenerated summaries).). This is the underlying object with id, value and extensions. The accessor "getShort" gives direct access to the value
6651     */
6652    public StringType getShortElement() { 
6653      if (this.short_ == null)
6654        if (Configuration.errorOnAutoCreate())
6655          throw new Error("Attempt to auto-create ElementDefinition.short_");
6656        else if (Configuration.doAutoCreate())
6657          this.short_ = new StringType(); // bb
6658      return this.short_;
6659    }
6660
6661    public boolean hasShortElement() { 
6662      return this.short_ != null && !this.short_.isEmpty();
6663    }
6664
6665    public boolean hasShort() { 
6666      return this.short_ != null && !this.short_.isEmpty();
6667    }
6668
6669    /**
6670     * @param value {@link #short_} (A concise description of what this element means (e.g. for use in autogenerated summaries).). This is the underlying object with id, value and extensions. The accessor "getShort" gives direct access to the value
6671     */
6672    public ElementDefinition setShortElement(StringType value) { 
6673      this.short_ = value;
6674      return this;
6675    }
6676
6677    /**
6678     * @return A concise description of what this element means (e.g. for use in autogenerated summaries).
6679     */
6680    public String getShort() { 
6681      return this.short_ == null ? null : this.short_.getValue();
6682    }
6683
6684    /**
6685     * @param value A concise description of what this element means (e.g. for use in autogenerated summaries).
6686     */
6687    public ElementDefinition setShort(String value) { 
6688      if (Utilities.noString(value))
6689        this.short_ = null;
6690      else {
6691        if (this.short_ == null)
6692          this.short_ = new StringType();
6693        this.short_.setValue(value);
6694      }
6695      return this;
6696    }
6697
6698    /**
6699     * @return {@link #definition} (Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).). This is the underlying object with id, value and extensions. The accessor "getDefinition" gives direct access to the value
6700     */
6701    public MarkdownType getDefinitionElement() { 
6702      if (this.definition == null)
6703        if (Configuration.errorOnAutoCreate())
6704          throw new Error("Attempt to auto-create ElementDefinition.definition");
6705        else if (Configuration.doAutoCreate())
6706          this.definition = new MarkdownType(); // bb
6707      return this.definition;
6708    }
6709
6710    public boolean hasDefinitionElement() { 
6711      return this.definition != null && !this.definition.isEmpty();
6712    }
6713
6714    public boolean hasDefinition() { 
6715      return this.definition != null && !this.definition.isEmpty();
6716    }
6717
6718    /**
6719     * @param value {@link #definition} (Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).). This is the underlying object with id, value and extensions. The accessor "getDefinition" gives direct access to the value
6720     */
6721    public ElementDefinition setDefinitionElement(MarkdownType value) { 
6722      this.definition = value;
6723      return this;
6724    }
6725
6726    /**
6727     * @return Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).
6728     */
6729    public String getDefinition() { 
6730      return this.definition == null ? null : this.definition.getValue();
6731    }
6732
6733    /**
6734     * @param value Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).
6735     */
6736    public ElementDefinition setDefinition(String value) { 
6737      if (Utilities.noString(value))
6738        this.definition = null;
6739      else {
6740        if (this.definition == null)
6741          this.definition = new MarkdownType();
6742        this.definition.setValue(value);
6743      }
6744      return this;
6745    }
6746
6747    /**
6748     * @return {@link #comment} (Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
6749     */
6750    public MarkdownType getCommentElement() { 
6751      if (this.comment == null)
6752        if (Configuration.errorOnAutoCreate())
6753          throw new Error("Attempt to auto-create ElementDefinition.comment");
6754        else if (Configuration.doAutoCreate())
6755          this.comment = new MarkdownType(); // bb
6756      return this.comment;
6757    }
6758
6759    public boolean hasCommentElement() { 
6760      return this.comment != null && !this.comment.isEmpty();
6761    }
6762
6763    public boolean hasComment() { 
6764      return this.comment != null && !this.comment.isEmpty();
6765    }
6766
6767    /**
6768     * @param value {@link #comment} (Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
6769     */
6770    public ElementDefinition setCommentElement(MarkdownType value) { 
6771      this.comment = value;
6772      return this;
6773    }
6774
6775    /**
6776     * @return Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).
6777     */
6778    public String getComment() { 
6779      return this.comment == null ? null : this.comment.getValue();
6780    }
6781
6782    /**
6783     * @param value Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).
6784     */
6785    public ElementDefinition setComment(String value) { 
6786      if (Utilities.noString(value))
6787        this.comment = null;
6788      else {
6789        if (this.comment == null)
6790          this.comment = new MarkdownType();
6791        this.comment.setValue(value);
6792      }
6793      return this;
6794    }
6795
6796    /**
6797     * @return {@link #requirements} (This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
6798     */
6799    public MarkdownType getRequirementsElement() { 
6800      if (this.requirements == null)
6801        if (Configuration.errorOnAutoCreate())
6802          throw new Error("Attempt to auto-create ElementDefinition.requirements");
6803        else if (Configuration.doAutoCreate())
6804          this.requirements = new MarkdownType(); // bb
6805      return this.requirements;
6806    }
6807
6808    public boolean hasRequirementsElement() { 
6809      return this.requirements != null && !this.requirements.isEmpty();
6810    }
6811
6812    public boolean hasRequirements() { 
6813      return this.requirements != null && !this.requirements.isEmpty();
6814    }
6815
6816    /**
6817     * @param value {@link #requirements} (This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
6818     */
6819    public ElementDefinition setRequirementsElement(MarkdownType value) { 
6820      this.requirements = value;
6821      return this;
6822    }
6823
6824    /**
6825     * @return This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.
6826     */
6827    public String getRequirements() { 
6828      return this.requirements == null ? null : this.requirements.getValue();
6829    }
6830
6831    /**
6832     * @param value This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.
6833     */
6834    public ElementDefinition setRequirements(String value) { 
6835      if (Utilities.noString(value))
6836        this.requirements = null;
6837      else {
6838        if (this.requirements == null)
6839          this.requirements = new MarkdownType();
6840        this.requirements.setValue(value);
6841      }
6842      return this;
6843    }
6844
6845    /**
6846     * @return {@link #alias} (Identifies additional names by which this element might also be known.)
6847     */
6848    public List<StringType> getAlias() { 
6849      if (this.alias == null)
6850        this.alias = new ArrayList<StringType>();
6851      return this.alias;
6852    }
6853
6854    /**
6855     * @return Returns a reference to <code>this</code> for easy method chaining
6856     */
6857    public ElementDefinition setAlias(List<StringType> theAlias) { 
6858      this.alias = theAlias;
6859      return this;
6860    }
6861
6862    public boolean hasAlias() { 
6863      if (this.alias == null)
6864        return false;
6865      for (StringType item : this.alias)
6866        if (!item.isEmpty())
6867          return true;
6868      return false;
6869    }
6870
6871    /**
6872     * @return {@link #alias} (Identifies additional names by which this element might also be known.)
6873     */
6874    public StringType addAliasElement() {//2 
6875      StringType t = new StringType();
6876      if (this.alias == null)
6877        this.alias = new ArrayList<StringType>();
6878      this.alias.add(t);
6879      return t;
6880    }
6881
6882    /**
6883     * @param value {@link #alias} (Identifies additional names by which this element might also be known.)
6884     */
6885    public ElementDefinition addAlias(String value) { //1
6886      StringType t = new StringType();
6887      t.setValue(value);
6888      if (this.alias == null)
6889        this.alias = new ArrayList<StringType>();
6890      this.alias.add(t);
6891      return this;
6892    }
6893
6894    /**
6895     * @param value {@link #alias} (Identifies additional names by which this element might also be known.)
6896     */
6897    public boolean hasAlias(String value) { 
6898      if (this.alias == null)
6899        return false;
6900      for (StringType v : this.alias)
6901        if (v.getValue().equals(value)) // string
6902          return true;
6903      return false;
6904    }
6905
6906    /**
6907     * @return {@link #min} (The minimum number of times this element SHALL appear in the instance.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
6908     */
6909    public UnsignedIntType getMinElement() { 
6910      if (this.min == null)
6911        if (Configuration.errorOnAutoCreate())
6912          throw new Error("Attempt to auto-create ElementDefinition.min");
6913        else if (Configuration.doAutoCreate())
6914          this.min = new UnsignedIntType(); // bb
6915      return this.min;
6916    }
6917
6918    public boolean hasMinElement() { 
6919      return this.min != null && !this.min.isEmpty();
6920    }
6921
6922    public boolean hasMin() { 
6923      return this.min != null && !this.min.isEmpty();
6924    }
6925
6926    /**
6927     * @param value {@link #min} (The minimum number of times this element SHALL appear in the instance.). This is the underlying object with id, value and extensions. The accessor "getMin" gives direct access to the value
6928     */
6929    public ElementDefinition setMinElement(UnsignedIntType value) { 
6930      this.min = value;
6931      return this;
6932    }
6933
6934    /**
6935     * @return The minimum number of times this element SHALL appear in the instance.
6936     */
6937    public int getMin() { 
6938      return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
6939    }
6940
6941    /**
6942     * @param value The minimum number of times this element SHALL appear in the instance.
6943     */
6944    public ElementDefinition setMin(int value) { 
6945        if (this.min == null)
6946          this.min = new UnsignedIntType();
6947        this.min.setValue(value);
6948      return this;
6949    }
6950
6951    /**
6952     * @return {@link #max} (The maximum number of times this element is permitted to appear in the instance.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
6953     */
6954    public StringType getMaxElement() { 
6955      if (this.max == null)
6956        if (Configuration.errorOnAutoCreate())
6957          throw new Error("Attempt to auto-create ElementDefinition.max");
6958        else if (Configuration.doAutoCreate())
6959          this.max = new StringType(); // bb
6960      return this.max;
6961    }
6962
6963    public boolean hasMaxElement() { 
6964      return this.max != null && !this.max.isEmpty();
6965    }
6966
6967    public boolean hasMax() { 
6968      return this.max != null && !this.max.isEmpty();
6969    }
6970
6971    /**
6972     * @param value {@link #max} (The maximum number of times this element is permitted to appear in the instance.). This is the underlying object with id, value and extensions. The accessor "getMax" gives direct access to the value
6973     */
6974    public ElementDefinition setMaxElement(StringType value) { 
6975      this.max = value;
6976      return this;
6977    }
6978
6979    /**
6980     * @return The maximum number of times this element is permitted to appear in the instance.
6981     */
6982    public String getMax() { 
6983      return this.max == null ? null : this.max.getValue();
6984    }
6985
6986    /**
6987     * @param value The maximum number of times this element is permitted to appear in the instance.
6988     */
6989    public ElementDefinition setMax(String value) { 
6990      if (Utilities.noString(value))
6991        this.max = null;
6992      else {
6993        if (this.max == null)
6994          this.max = new StringType();
6995        this.max.setValue(value);
6996      }
6997      return this;
6998    }
6999
7000    /**
7001     * @return {@link #base} (Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.)
7002     */
7003    public ElementDefinitionBaseComponent getBase() { 
7004      if (this.base == null)
7005        if (Configuration.errorOnAutoCreate())
7006          throw new Error("Attempt to auto-create ElementDefinition.base");
7007        else if (Configuration.doAutoCreate())
7008          this.base = new ElementDefinitionBaseComponent(); // cc
7009      return this.base;
7010    }
7011
7012    public boolean hasBase() { 
7013      return this.base != null && !this.base.isEmpty();
7014    }
7015
7016    /**
7017     * @param value {@link #base} (Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.)
7018     */
7019    public ElementDefinition setBase(ElementDefinitionBaseComponent value) { 
7020      this.base = value;
7021      return this;
7022    }
7023
7024    /**
7025     * @return {@link #contentReference} (Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.). This is the underlying object with id, value and extensions. The accessor "getContentReference" gives direct access to the value
7026     */
7027    public UriType getContentReferenceElement() { 
7028      if (this.contentReference == null)
7029        if (Configuration.errorOnAutoCreate())
7030          throw new Error("Attempt to auto-create ElementDefinition.contentReference");
7031        else if (Configuration.doAutoCreate())
7032          this.contentReference = new UriType(); // bb
7033      return this.contentReference;
7034    }
7035
7036    public boolean hasContentReferenceElement() { 
7037      return this.contentReference != null && !this.contentReference.isEmpty();
7038    }
7039
7040    public boolean hasContentReference() { 
7041      return this.contentReference != null && !this.contentReference.isEmpty();
7042    }
7043
7044    /**
7045     * @param value {@link #contentReference} (Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.). This is the underlying object with id, value and extensions. The accessor "getContentReference" gives direct access to the value
7046     */
7047    public ElementDefinition setContentReferenceElement(UriType value) { 
7048      this.contentReference = value;
7049      return this;
7050    }
7051
7052    /**
7053     * @return Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.
7054     */
7055    public String getContentReference() { 
7056      return this.contentReference == null ? null : this.contentReference.getValue();
7057    }
7058
7059    /**
7060     * @param value Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.
7061     */
7062    public ElementDefinition setContentReference(String value) { 
7063      if (Utilities.noString(value))
7064        this.contentReference = null;
7065      else {
7066        if (this.contentReference == null)
7067          this.contentReference = new UriType();
7068        this.contentReference.setValue(value);
7069      }
7070      return this;
7071    }
7072
7073    /**
7074     * @return {@link #type} (The data type or resource that the value of this element is permitted to be.)
7075     */
7076    public List<TypeRefComponent> getType() { 
7077      if (this.type == null)
7078        this.type = new ArrayList<TypeRefComponent>();
7079      return this.type;
7080    }
7081
7082    /**
7083     * @return Returns a reference to <code>this</code> for easy method chaining
7084     */
7085    public ElementDefinition setType(List<TypeRefComponent> theType) { 
7086      this.type = theType;
7087      return this;
7088    }
7089
7090    public boolean hasType() { 
7091      if (this.type == null)
7092        return false;
7093      for (TypeRefComponent item : this.type)
7094        if (!item.isEmpty())
7095          return true;
7096      return false;
7097    }
7098
7099    public TypeRefComponent addType() { //3
7100      TypeRefComponent t = new TypeRefComponent();
7101      if (this.type == null)
7102        this.type = new ArrayList<TypeRefComponent>();
7103      this.type.add(t);
7104      return t;
7105    }
7106
7107    public ElementDefinition addType(TypeRefComponent t) { //3
7108      if (t == null)
7109        return this;
7110      if (this.type == null)
7111        this.type = new ArrayList<TypeRefComponent>();
7112      this.type.add(t);
7113      return this;
7114    }
7115
7116    /**
7117     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
7118     */
7119    public TypeRefComponent getTypeFirstRep() { 
7120      if (getType().isEmpty()) {
7121        addType();
7122      }
7123      return getType().get(0);
7124    }
7125
7126    /**
7127     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7128     */
7129    public DataType getDefaultValue() { 
7130      return this.defaultValue;
7131    }
7132
7133    /**
7134     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7135     */
7136    public Base64BinaryType getDefaultValueBase64BinaryType() throws FHIRException { 
7137      if (this.defaultValue == null)
7138        this.defaultValue = new Base64BinaryType();
7139      if (!(this.defaultValue instanceof Base64BinaryType))
7140        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7141      return (Base64BinaryType) this.defaultValue;
7142    }
7143
7144    public boolean hasDefaultValueBase64BinaryType() { 
7145      return this != null && this.defaultValue instanceof Base64BinaryType;
7146    }
7147
7148    /**
7149     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7150     */
7151    public BooleanType getDefaultValueBooleanType() throws FHIRException { 
7152      if (this.defaultValue == null)
7153        this.defaultValue = new BooleanType();
7154      if (!(this.defaultValue instanceof BooleanType))
7155        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7156      return (BooleanType) this.defaultValue;
7157    }
7158
7159    public boolean hasDefaultValueBooleanType() { 
7160      return this != null && this.defaultValue instanceof BooleanType;
7161    }
7162
7163    /**
7164     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7165     */
7166    public CanonicalType getDefaultValueCanonicalType() throws FHIRException { 
7167      if (this.defaultValue == null)
7168        this.defaultValue = new CanonicalType();
7169      if (!(this.defaultValue instanceof CanonicalType))
7170        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7171      return (CanonicalType) this.defaultValue;
7172    }
7173
7174    public boolean hasDefaultValueCanonicalType() { 
7175      return this != null && this.defaultValue instanceof CanonicalType;
7176    }
7177
7178    /**
7179     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7180     */
7181    public CodeType getDefaultValueCodeType() throws FHIRException { 
7182      if (this.defaultValue == null)
7183        this.defaultValue = new CodeType();
7184      if (!(this.defaultValue instanceof CodeType))
7185        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7186      return (CodeType) this.defaultValue;
7187    }
7188
7189    public boolean hasDefaultValueCodeType() { 
7190      return this != null && this.defaultValue instanceof CodeType;
7191    }
7192
7193    /**
7194     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7195     */
7196    public DateType getDefaultValueDateType() throws FHIRException { 
7197      if (this.defaultValue == null)
7198        this.defaultValue = new DateType();
7199      if (!(this.defaultValue instanceof DateType))
7200        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7201      return (DateType) this.defaultValue;
7202    }
7203
7204    public boolean hasDefaultValueDateType() { 
7205      return this != null && this.defaultValue instanceof DateType;
7206    }
7207
7208    /**
7209     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7210     */
7211    public DateTimeType getDefaultValueDateTimeType() throws FHIRException { 
7212      if (this.defaultValue == null)
7213        this.defaultValue = new DateTimeType();
7214      if (!(this.defaultValue instanceof DateTimeType))
7215        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7216      return (DateTimeType) this.defaultValue;
7217    }
7218
7219    public boolean hasDefaultValueDateTimeType() { 
7220      return this != null && this.defaultValue instanceof DateTimeType;
7221    }
7222
7223    /**
7224     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7225     */
7226    public DecimalType getDefaultValueDecimalType() throws FHIRException { 
7227      if (this.defaultValue == null)
7228        this.defaultValue = new DecimalType();
7229      if (!(this.defaultValue instanceof DecimalType))
7230        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7231      return (DecimalType) this.defaultValue;
7232    }
7233
7234    public boolean hasDefaultValueDecimalType() { 
7235      return this != null && this.defaultValue instanceof DecimalType;
7236    }
7237
7238    /**
7239     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7240     */
7241    public IdType getDefaultValueIdType() throws FHIRException { 
7242      if (this.defaultValue == null)
7243        this.defaultValue = new IdType();
7244      if (!(this.defaultValue instanceof IdType))
7245        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7246      return (IdType) this.defaultValue;
7247    }
7248
7249    public boolean hasDefaultValueIdType() { 
7250      return this != null && this.defaultValue instanceof IdType;
7251    }
7252
7253    /**
7254     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7255     */
7256    public InstantType getDefaultValueInstantType() throws FHIRException { 
7257      if (this.defaultValue == null)
7258        this.defaultValue = new InstantType();
7259      if (!(this.defaultValue instanceof InstantType))
7260        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7261      return (InstantType) this.defaultValue;
7262    }
7263
7264    public boolean hasDefaultValueInstantType() { 
7265      return this != null && this.defaultValue instanceof InstantType;
7266    }
7267
7268    /**
7269     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7270     */
7271    public IntegerType getDefaultValueIntegerType() throws FHIRException { 
7272      if (this.defaultValue == null)
7273        this.defaultValue = new IntegerType();
7274      if (!(this.defaultValue instanceof IntegerType))
7275        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7276      return (IntegerType) this.defaultValue;
7277    }
7278
7279    public boolean hasDefaultValueIntegerType() { 
7280      return this != null && this.defaultValue instanceof IntegerType;
7281    }
7282
7283    /**
7284     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7285     */
7286    public Integer64Type getDefaultValueInteger64Type() throws FHIRException { 
7287      if (this.defaultValue == null)
7288        this.defaultValue = new Integer64Type();
7289      if (!(this.defaultValue instanceof Integer64Type))
7290        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7291      return (Integer64Type) this.defaultValue;
7292    }
7293
7294    public boolean hasDefaultValueInteger64Type() { 
7295      return this != null && this.defaultValue instanceof Integer64Type;
7296    }
7297
7298    /**
7299     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7300     */
7301    public MarkdownType getDefaultValueMarkdownType() throws FHIRException { 
7302      if (this.defaultValue == null)
7303        this.defaultValue = new MarkdownType();
7304      if (!(this.defaultValue instanceof MarkdownType))
7305        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7306      return (MarkdownType) this.defaultValue;
7307    }
7308
7309    public boolean hasDefaultValueMarkdownType() { 
7310      return this != null && this.defaultValue instanceof MarkdownType;
7311    }
7312
7313    /**
7314     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7315     */
7316    public OidType getDefaultValueOidType() throws FHIRException { 
7317      if (this.defaultValue == null)
7318        this.defaultValue = new OidType();
7319      if (!(this.defaultValue instanceof OidType))
7320        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7321      return (OidType) this.defaultValue;
7322    }
7323
7324    public boolean hasDefaultValueOidType() { 
7325      return this != null && this.defaultValue instanceof OidType;
7326    }
7327
7328    /**
7329     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7330     */
7331    public PositiveIntType getDefaultValuePositiveIntType() throws FHIRException { 
7332      if (this.defaultValue == null)
7333        this.defaultValue = new PositiveIntType();
7334      if (!(this.defaultValue instanceof PositiveIntType))
7335        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7336      return (PositiveIntType) this.defaultValue;
7337    }
7338
7339    public boolean hasDefaultValuePositiveIntType() { 
7340      return this != null && this.defaultValue instanceof PositiveIntType;
7341    }
7342
7343    /**
7344     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7345     */
7346    public StringType getDefaultValueStringType() throws FHIRException { 
7347      if (this.defaultValue == null)
7348        this.defaultValue = new StringType();
7349      if (!(this.defaultValue instanceof StringType))
7350        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7351      return (StringType) this.defaultValue;
7352    }
7353
7354    public boolean hasDefaultValueStringType() { 
7355      return this != null && this.defaultValue instanceof StringType;
7356    }
7357
7358    /**
7359     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7360     */
7361    public TimeType getDefaultValueTimeType() throws FHIRException { 
7362      if (this.defaultValue == null)
7363        this.defaultValue = new TimeType();
7364      if (!(this.defaultValue instanceof TimeType))
7365        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7366      return (TimeType) this.defaultValue;
7367    }
7368
7369    public boolean hasDefaultValueTimeType() { 
7370      return this != null && this.defaultValue instanceof TimeType;
7371    }
7372
7373    /**
7374     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7375     */
7376    public UnsignedIntType getDefaultValueUnsignedIntType() throws FHIRException { 
7377      if (this.defaultValue == null)
7378        this.defaultValue = new UnsignedIntType();
7379      if (!(this.defaultValue instanceof UnsignedIntType))
7380        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7381      return (UnsignedIntType) this.defaultValue;
7382    }
7383
7384    public boolean hasDefaultValueUnsignedIntType() { 
7385      return this != null && this.defaultValue instanceof UnsignedIntType;
7386    }
7387
7388    /**
7389     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7390     */
7391    public UriType getDefaultValueUriType() throws FHIRException { 
7392      if (this.defaultValue == null)
7393        this.defaultValue = new UriType();
7394      if (!(this.defaultValue instanceof UriType))
7395        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7396      return (UriType) this.defaultValue;
7397    }
7398
7399    public boolean hasDefaultValueUriType() { 
7400      return this != null && this.defaultValue instanceof UriType;
7401    }
7402
7403    /**
7404     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7405     */
7406    public UrlType getDefaultValueUrlType() throws FHIRException { 
7407      if (this.defaultValue == null)
7408        this.defaultValue = new UrlType();
7409      if (!(this.defaultValue instanceof UrlType))
7410        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7411      return (UrlType) this.defaultValue;
7412    }
7413
7414    public boolean hasDefaultValueUrlType() { 
7415      return this != null && this.defaultValue instanceof UrlType;
7416    }
7417
7418    /**
7419     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7420     */
7421    public UuidType getDefaultValueUuidType() throws FHIRException { 
7422      if (this.defaultValue == null)
7423        this.defaultValue = new UuidType();
7424      if (!(this.defaultValue instanceof UuidType))
7425        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7426      return (UuidType) this.defaultValue;
7427    }
7428
7429    public boolean hasDefaultValueUuidType() { 
7430      return this != null && this.defaultValue instanceof UuidType;
7431    }
7432
7433    /**
7434     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7435     */
7436    public Address getDefaultValueAddress() throws FHIRException { 
7437      if (this.defaultValue == null)
7438        this.defaultValue = new Address();
7439      if (!(this.defaultValue instanceof Address))
7440        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7441      return (Address) this.defaultValue;
7442    }
7443
7444    public boolean hasDefaultValueAddress() { 
7445      return this != null && this.defaultValue instanceof Address;
7446    }
7447
7448    /**
7449     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7450     */
7451    public Age getDefaultValueAge() throws FHIRException { 
7452      if (this.defaultValue == null)
7453        this.defaultValue = new Age();
7454      if (!(this.defaultValue instanceof Age))
7455        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7456      return (Age) this.defaultValue;
7457    }
7458
7459    public boolean hasDefaultValueAge() { 
7460      return this != null && this.defaultValue instanceof Age;
7461    }
7462
7463    /**
7464     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7465     */
7466    public Annotation getDefaultValueAnnotation() throws FHIRException { 
7467      if (this.defaultValue == null)
7468        this.defaultValue = new Annotation();
7469      if (!(this.defaultValue instanceof Annotation))
7470        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7471      return (Annotation) this.defaultValue;
7472    }
7473
7474    public boolean hasDefaultValueAnnotation() { 
7475      return this != null && this.defaultValue instanceof Annotation;
7476    }
7477
7478    /**
7479     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7480     */
7481    public Attachment getDefaultValueAttachment() throws FHIRException { 
7482      if (this.defaultValue == null)
7483        this.defaultValue = new Attachment();
7484      if (!(this.defaultValue instanceof Attachment))
7485        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7486      return (Attachment) this.defaultValue;
7487    }
7488
7489    public boolean hasDefaultValueAttachment() { 
7490      return this != null && this.defaultValue instanceof Attachment;
7491    }
7492
7493    /**
7494     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7495     */
7496    public CodeableConcept getDefaultValueCodeableConcept() throws FHIRException { 
7497      if (this.defaultValue == null)
7498        this.defaultValue = new CodeableConcept();
7499      if (!(this.defaultValue instanceof CodeableConcept))
7500        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7501      return (CodeableConcept) this.defaultValue;
7502    }
7503
7504    public boolean hasDefaultValueCodeableConcept() { 
7505      return this != null && this.defaultValue instanceof CodeableConcept;
7506    }
7507
7508    /**
7509     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7510     */
7511    public CodeableReference getDefaultValueCodeableReference() throws FHIRException { 
7512      if (this.defaultValue == null)
7513        this.defaultValue = new CodeableReference();
7514      if (!(this.defaultValue instanceof CodeableReference))
7515        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7516      return (CodeableReference) this.defaultValue;
7517    }
7518
7519    public boolean hasDefaultValueCodeableReference() { 
7520      return this != null && this.defaultValue instanceof CodeableReference;
7521    }
7522
7523    /**
7524     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7525     */
7526    public Coding getDefaultValueCoding() throws FHIRException { 
7527      if (this.defaultValue == null)
7528        this.defaultValue = new Coding();
7529      if (!(this.defaultValue instanceof Coding))
7530        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7531      return (Coding) this.defaultValue;
7532    }
7533
7534    public boolean hasDefaultValueCoding() { 
7535      return this != null && this.defaultValue instanceof Coding;
7536    }
7537
7538    /**
7539     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7540     */
7541    public ContactPoint getDefaultValueContactPoint() throws FHIRException { 
7542      if (this.defaultValue == null)
7543        this.defaultValue = new ContactPoint();
7544      if (!(this.defaultValue instanceof ContactPoint))
7545        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7546      return (ContactPoint) this.defaultValue;
7547    }
7548
7549    public boolean hasDefaultValueContactPoint() { 
7550      return this != null && this.defaultValue instanceof ContactPoint;
7551    }
7552
7553    /**
7554     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7555     */
7556    public Count getDefaultValueCount() throws FHIRException { 
7557      if (this.defaultValue == null)
7558        this.defaultValue = new Count();
7559      if (!(this.defaultValue instanceof Count))
7560        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7561      return (Count) this.defaultValue;
7562    }
7563
7564    public boolean hasDefaultValueCount() { 
7565      return this != null && this.defaultValue instanceof Count;
7566    }
7567
7568    /**
7569     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7570     */
7571    public Distance getDefaultValueDistance() throws FHIRException { 
7572      if (this.defaultValue == null)
7573        this.defaultValue = new Distance();
7574      if (!(this.defaultValue instanceof Distance))
7575        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7576      return (Distance) this.defaultValue;
7577    }
7578
7579    public boolean hasDefaultValueDistance() { 
7580      return this != null && this.defaultValue instanceof Distance;
7581    }
7582
7583    /**
7584     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7585     */
7586    public Duration getDefaultValueDuration() throws FHIRException { 
7587      if (this.defaultValue == null)
7588        this.defaultValue = new Duration();
7589      if (!(this.defaultValue instanceof Duration))
7590        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7591      return (Duration) this.defaultValue;
7592    }
7593
7594    public boolean hasDefaultValueDuration() { 
7595      return this != null && this.defaultValue instanceof Duration;
7596    }
7597
7598    /**
7599     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7600     */
7601    public HumanName getDefaultValueHumanName() throws FHIRException { 
7602      if (this.defaultValue == null)
7603        this.defaultValue = new HumanName();
7604      if (!(this.defaultValue instanceof HumanName))
7605        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7606      return (HumanName) this.defaultValue;
7607    }
7608
7609    public boolean hasDefaultValueHumanName() { 
7610      return this != null && this.defaultValue instanceof HumanName;
7611    }
7612
7613    /**
7614     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7615     */
7616    public Identifier getDefaultValueIdentifier() throws FHIRException { 
7617      if (this.defaultValue == null)
7618        this.defaultValue = new Identifier();
7619      if (!(this.defaultValue instanceof Identifier))
7620        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7621      return (Identifier) this.defaultValue;
7622    }
7623
7624    public boolean hasDefaultValueIdentifier() { 
7625      return this != null && this.defaultValue instanceof Identifier;
7626    }
7627
7628    /**
7629     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7630     */
7631    public Money getDefaultValueMoney() throws FHIRException { 
7632      if (this.defaultValue == null)
7633        this.defaultValue = new Money();
7634      if (!(this.defaultValue instanceof Money))
7635        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7636      return (Money) this.defaultValue;
7637    }
7638
7639    public boolean hasDefaultValueMoney() { 
7640      return this != null && this.defaultValue instanceof Money;
7641    }
7642
7643    /**
7644     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7645     */
7646    public Period getDefaultValuePeriod() throws FHIRException { 
7647      if (this.defaultValue == null)
7648        this.defaultValue = new Period();
7649      if (!(this.defaultValue instanceof Period))
7650        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7651      return (Period) this.defaultValue;
7652    }
7653
7654    public boolean hasDefaultValuePeriod() { 
7655      return this != null && this.defaultValue instanceof Period;
7656    }
7657
7658    /**
7659     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7660     */
7661    public Quantity getDefaultValueQuantity() throws FHIRException { 
7662      if (this.defaultValue == null)
7663        this.defaultValue = new Quantity();
7664      if (!(this.defaultValue instanceof Quantity))
7665        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7666      return (Quantity) this.defaultValue;
7667    }
7668
7669    public boolean hasDefaultValueQuantity() { 
7670      return this != null && this.defaultValue instanceof Quantity;
7671    }
7672
7673    /**
7674     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7675     */
7676    public Range getDefaultValueRange() throws FHIRException { 
7677      if (this.defaultValue == null)
7678        this.defaultValue = new Range();
7679      if (!(this.defaultValue instanceof Range))
7680        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7681      return (Range) this.defaultValue;
7682    }
7683
7684    public boolean hasDefaultValueRange() { 
7685      return this != null && this.defaultValue instanceof Range;
7686    }
7687
7688    /**
7689     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7690     */
7691    public Ratio getDefaultValueRatio() throws FHIRException { 
7692      if (this.defaultValue == null)
7693        this.defaultValue = new Ratio();
7694      if (!(this.defaultValue instanceof Ratio))
7695        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7696      return (Ratio) this.defaultValue;
7697    }
7698
7699    public boolean hasDefaultValueRatio() { 
7700      return this != null && this.defaultValue instanceof Ratio;
7701    }
7702
7703    /**
7704     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7705     */
7706    public RatioRange getDefaultValueRatioRange() throws FHIRException { 
7707      if (this.defaultValue == null)
7708        this.defaultValue = new RatioRange();
7709      if (!(this.defaultValue instanceof RatioRange))
7710        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7711      return (RatioRange) this.defaultValue;
7712    }
7713
7714    public boolean hasDefaultValueRatioRange() { 
7715      return this != null && this.defaultValue instanceof RatioRange;
7716    }
7717
7718    /**
7719     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7720     */
7721    public Reference getDefaultValueReference() throws FHIRException { 
7722      if (this.defaultValue == null)
7723        this.defaultValue = new Reference();
7724      if (!(this.defaultValue instanceof Reference))
7725        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7726      return (Reference) this.defaultValue;
7727    }
7728
7729    public boolean hasDefaultValueReference() { 
7730      return this != null && this.defaultValue instanceof Reference;
7731    }
7732
7733    /**
7734     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7735     */
7736    public SampledData getDefaultValueSampledData() throws FHIRException { 
7737      if (this.defaultValue == null)
7738        this.defaultValue = new SampledData();
7739      if (!(this.defaultValue instanceof SampledData))
7740        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7741      return (SampledData) this.defaultValue;
7742    }
7743
7744    public boolean hasDefaultValueSampledData() { 
7745      return this != null && this.defaultValue instanceof SampledData;
7746    }
7747
7748    /**
7749     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7750     */
7751    public Signature getDefaultValueSignature() throws FHIRException { 
7752      if (this.defaultValue == null)
7753        this.defaultValue = new Signature();
7754      if (!(this.defaultValue instanceof Signature))
7755        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7756      return (Signature) this.defaultValue;
7757    }
7758
7759    public boolean hasDefaultValueSignature() { 
7760      return this != null && this.defaultValue instanceof Signature;
7761    }
7762
7763    /**
7764     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7765     */
7766    public Timing getDefaultValueTiming() throws FHIRException { 
7767      if (this.defaultValue == null)
7768        this.defaultValue = new Timing();
7769      if (!(this.defaultValue instanceof Timing))
7770        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7771      return (Timing) this.defaultValue;
7772    }
7773
7774    public boolean hasDefaultValueTiming() { 
7775      return this != null && this.defaultValue instanceof Timing;
7776    }
7777
7778    /**
7779     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7780     */
7781    public ContactDetail getDefaultValueContactDetail() throws FHIRException { 
7782      if (this.defaultValue == null)
7783        this.defaultValue = new ContactDetail();
7784      if (!(this.defaultValue instanceof ContactDetail))
7785        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7786      return (ContactDetail) this.defaultValue;
7787    }
7788
7789    public boolean hasDefaultValueContactDetail() { 
7790      return this != null && this.defaultValue instanceof ContactDetail;
7791    }
7792
7793    /**
7794     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7795     */
7796    public DataRequirement getDefaultValueDataRequirement() throws FHIRException { 
7797      if (this.defaultValue == null)
7798        this.defaultValue = new DataRequirement();
7799      if (!(this.defaultValue instanceof DataRequirement))
7800        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7801      return (DataRequirement) this.defaultValue;
7802    }
7803
7804    public boolean hasDefaultValueDataRequirement() { 
7805      return this != null && this.defaultValue instanceof DataRequirement;
7806    }
7807
7808    /**
7809     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7810     */
7811    public Expression getDefaultValueExpression() throws FHIRException { 
7812      if (this.defaultValue == null)
7813        this.defaultValue = new Expression();
7814      if (!(this.defaultValue instanceof Expression))
7815        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7816      return (Expression) this.defaultValue;
7817    }
7818
7819    public boolean hasDefaultValueExpression() { 
7820      return this != null && this.defaultValue instanceof Expression;
7821    }
7822
7823    /**
7824     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7825     */
7826    public ParameterDefinition getDefaultValueParameterDefinition() throws FHIRException { 
7827      if (this.defaultValue == null)
7828        this.defaultValue = new ParameterDefinition();
7829      if (!(this.defaultValue instanceof ParameterDefinition))
7830        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7831      return (ParameterDefinition) this.defaultValue;
7832    }
7833
7834    public boolean hasDefaultValueParameterDefinition() { 
7835      return this != null && this.defaultValue instanceof ParameterDefinition;
7836    }
7837
7838    /**
7839     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7840     */
7841    public RelatedArtifact getDefaultValueRelatedArtifact() throws FHIRException { 
7842      if (this.defaultValue == null)
7843        this.defaultValue = new RelatedArtifact();
7844      if (!(this.defaultValue instanceof RelatedArtifact))
7845        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7846      return (RelatedArtifact) this.defaultValue;
7847    }
7848
7849    public boolean hasDefaultValueRelatedArtifact() { 
7850      return this != null && this.defaultValue instanceof RelatedArtifact;
7851    }
7852
7853    /**
7854     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7855     */
7856    public TriggerDefinition getDefaultValueTriggerDefinition() throws FHIRException { 
7857      if (this.defaultValue == null)
7858        this.defaultValue = new TriggerDefinition();
7859      if (!(this.defaultValue instanceof TriggerDefinition))
7860        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7861      return (TriggerDefinition) this.defaultValue;
7862    }
7863
7864    public boolean hasDefaultValueTriggerDefinition() { 
7865      return this != null && this.defaultValue instanceof TriggerDefinition;
7866    }
7867
7868    /**
7869     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7870     */
7871    public UsageContext getDefaultValueUsageContext() throws FHIRException { 
7872      if (this.defaultValue == null)
7873        this.defaultValue = new UsageContext();
7874      if (!(this.defaultValue instanceof UsageContext))
7875        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7876      return (UsageContext) this.defaultValue;
7877    }
7878
7879    public boolean hasDefaultValueUsageContext() { 
7880      return this != null && this.defaultValue instanceof UsageContext;
7881    }
7882
7883    /**
7884     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7885     */
7886    public Availability getDefaultValueAvailability() throws FHIRException { 
7887      if (this.defaultValue == null)
7888        this.defaultValue = new Availability();
7889      if (!(this.defaultValue instanceof Availability))
7890        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7891      return (Availability) this.defaultValue;
7892    }
7893
7894    public boolean hasDefaultValueAvailability() { 
7895      return this != null && this.defaultValue instanceof Availability;
7896    }
7897
7898    /**
7899     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7900     */
7901    public ExtendedContactDetail getDefaultValueExtendedContactDetail() throws FHIRException { 
7902      if (this.defaultValue == null)
7903        this.defaultValue = new ExtendedContactDetail();
7904      if (!(this.defaultValue instanceof ExtendedContactDetail))
7905        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7906      return (ExtendedContactDetail) this.defaultValue;
7907    }
7908
7909    public boolean hasDefaultValueExtendedContactDetail() { 
7910      return this != null && this.defaultValue instanceof ExtendedContactDetail;
7911    }
7912
7913    /**
7914     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7915     */
7916    public Dosage getDefaultValueDosage() throws FHIRException { 
7917      if (this.defaultValue == null)
7918        this.defaultValue = new Dosage();
7919      if (!(this.defaultValue instanceof Dosage))
7920        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7921      return (Dosage) this.defaultValue;
7922    }
7923
7924    public boolean hasDefaultValueDosage() { 
7925      return this != null && this.defaultValue instanceof Dosage;
7926    }
7927
7928    /**
7929     * @return {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7930     */
7931    public Meta getDefaultValueMeta() throws FHIRException { 
7932      if (this.defaultValue == null)
7933        this.defaultValue = new Meta();
7934      if (!(this.defaultValue instanceof Meta))
7935        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7936      return (Meta) this.defaultValue;
7937    }
7938
7939    public boolean hasDefaultValueMeta() { 
7940      return this != null && this.defaultValue instanceof Meta;
7941    }
7942
7943    public boolean hasDefaultValue() { 
7944      return this.defaultValue != null && !this.defaultValue.isEmpty();
7945    }
7946
7947    /**
7948     * @param value {@link #defaultValue} (The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').)
7949     */
7950    public ElementDefinition setDefaultValue(DataType value) { 
7951      if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
7952        throw new FHIRException("Not the right type for ElementDefinition.defaultValue[x]: "+value.fhirType());
7953      this.defaultValue = value;
7954      return this;
7955    }
7956
7957    /**
7958     * @return {@link #meaningWhenMissing} (The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').). This is the underlying object with id, value and extensions. The accessor "getMeaningWhenMissing" gives direct access to the value
7959     */
7960    public MarkdownType getMeaningWhenMissingElement() { 
7961      if (this.meaningWhenMissing == null)
7962        if (Configuration.errorOnAutoCreate())
7963          throw new Error("Attempt to auto-create ElementDefinition.meaningWhenMissing");
7964        else if (Configuration.doAutoCreate())
7965          this.meaningWhenMissing = new MarkdownType(); // bb
7966      return this.meaningWhenMissing;
7967    }
7968
7969    public boolean hasMeaningWhenMissingElement() { 
7970      return this.meaningWhenMissing != null && !this.meaningWhenMissing.isEmpty();
7971    }
7972
7973    public boolean hasMeaningWhenMissing() { 
7974      return this.meaningWhenMissing != null && !this.meaningWhenMissing.isEmpty();
7975    }
7976
7977    /**
7978     * @param value {@link #meaningWhenMissing} (The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').). This is the underlying object with id, value and extensions. The accessor "getMeaningWhenMissing" gives direct access to the value
7979     */
7980    public ElementDefinition setMeaningWhenMissingElement(MarkdownType value) { 
7981      this.meaningWhenMissing = value;
7982      return this;
7983    }
7984
7985    /**
7986     * @return The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').
7987     */
7988    public String getMeaningWhenMissing() { 
7989      return this.meaningWhenMissing == null ? null : this.meaningWhenMissing.getValue();
7990    }
7991
7992    /**
7993     * @param value The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').
7994     */
7995    public ElementDefinition setMeaningWhenMissing(String value) { 
7996      if (Utilities.noString(value))
7997        this.meaningWhenMissing = null;
7998      else {
7999        if (this.meaningWhenMissing == null)
8000          this.meaningWhenMissing = new MarkdownType();
8001        this.meaningWhenMissing.setValue(value);
8002      }
8003      return this;
8004    }
8005
8006    /**
8007     * @return {@link #orderMeaning} (If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.). This is the underlying object with id, value and extensions. The accessor "getOrderMeaning" gives direct access to the value
8008     */
8009    public StringType getOrderMeaningElement() { 
8010      if (this.orderMeaning == null)
8011        if (Configuration.errorOnAutoCreate())
8012          throw new Error("Attempt to auto-create ElementDefinition.orderMeaning");
8013        else if (Configuration.doAutoCreate())
8014          this.orderMeaning = new StringType(); // bb
8015      return this.orderMeaning;
8016    }
8017
8018    public boolean hasOrderMeaningElement() { 
8019      return this.orderMeaning != null && !this.orderMeaning.isEmpty();
8020    }
8021
8022    public boolean hasOrderMeaning() { 
8023      return this.orderMeaning != null && !this.orderMeaning.isEmpty();
8024    }
8025
8026    /**
8027     * @param value {@link #orderMeaning} (If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.). This is the underlying object with id, value and extensions. The accessor "getOrderMeaning" gives direct access to the value
8028     */
8029    public ElementDefinition setOrderMeaningElement(StringType value) { 
8030      this.orderMeaning = value;
8031      return this;
8032    }
8033
8034    /**
8035     * @return If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.
8036     */
8037    public String getOrderMeaning() { 
8038      return this.orderMeaning == null ? null : this.orderMeaning.getValue();
8039    }
8040
8041    /**
8042     * @param value If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.
8043     */
8044    public ElementDefinition setOrderMeaning(String value) { 
8045      if (Utilities.noString(value))
8046        this.orderMeaning = null;
8047      else {
8048        if (this.orderMeaning == null)
8049          this.orderMeaning = new StringType();
8050        this.orderMeaning.setValue(value);
8051      }
8052      return this;
8053    }
8054
8055    /**
8056     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8057     */
8058    public DataType getFixed() { 
8059      return this.fixed;
8060    }
8061
8062    /**
8063     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8064     */
8065    public Base64BinaryType getFixedBase64BinaryType() throws FHIRException { 
8066      if (this.fixed == null)
8067        this.fixed = new Base64BinaryType();
8068      if (!(this.fixed instanceof Base64BinaryType))
8069        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8070      return (Base64BinaryType) this.fixed;
8071    }
8072
8073    public boolean hasFixedBase64BinaryType() { 
8074      return this != null && this.fixed instanceof Base64BinaryType;
8075    }
8076
8077    /**
8078     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8079     */
8080    public BooleanType getFixedBooleanType() throws FHIRException { 
8081      if (this.fixed == null)
8082        this.fixed = new BooleanType();
8083      if (!(this.fixed instanceof BooleanType))
8084        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8085      return (BooleanType) this.fixed;
8086    }
8087
8088    public boolean hasFixedBooleanType() { 
8089      return this != null && this.fixed instanceof BooleanType;
8090    }
8091
8092    /**
8093     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8094     */
8095    public CanonicalType getFixedCanonicalType() throws FHIRException { 
8096      if (this.fixed == null)
8097        this.fixed = new CanonicalType();
8098      if (!(this.fixed instanceof CanonicalType))
8099        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8100      return (CanonicalType) this.fixed;
8101    }
8102
8103    public boolean hasFixedCanonicalType() { 
8104      return this != null && this.fixed instanceof CanonicalType;
8105    }
8106
8107    /**
8108     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8109     */
8110    public CodeType getFixedCodeType() throws FHIRException { 
8111      if (this.fixed == null)
8112        this.fixed = new CodeType();
8113      if (!(this.fixed instanceof CodeType))
8114        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8115      return (CodeType) this.fixed;
8116    }
8117
8118    public boolean hasFixedCodeType() { 
8119      return this != null && this.fixed instanceof CodeType;
8120    }
8121
8122    /**
8123     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8124     */
8125    public DateType getFixedDateType() throws FHIRException { 
8126      if (this.fixed == null)
8127        this.fixed = new DateType();
8128      if (!(this.fixed instanceof DateType))
8129        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8130      return (DateType) this.fixed;
8131    }
8132
8133    public boolean hasFixedDateType() { 
8134      return this != null && this.fixed instanceof DateType;
8135    }
8136
8137    /**
8138     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8139     */
8140    public DateTimeType getFixedDateTimeType() throws FHIRException { 
8141      if (this.fixed == null)
8142        this.fixed = new DateTimeType();
8143      if (!(this.fixed instanceof DateTimeType))
8144        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8145      return (DateTimeType) this.fixed;
8146    }
8147
8148    public boolean hasFixedDateTimeType() { 
8149      return this != null && this.fixed instanceof DateTimeType;
8150    }
8151
8152    /**
8153     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8154     */
8155    public DecimalType getFixedDecimalType() throws FHIRException { 
8156      if (this.fixed == null)
8157        this.fixed = new DecimalType();
8158      if (!(this.fixed instanceof DecimalType))
8159        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8160      return (DecimalType) this.fixed;
8161    }
8162
8163    public boolean hasFixedDecimalType() { 
8164      return this != null && this.fixed instanceof DecimalType;
8165    }
8166
8167    /**
8168     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8169     */
8170    public IdType getFixedIdType() throws FHIRException { 
8171      if (this.fixed == null)
8172        this.fixed = new IdType();
8173      if (!(this.fixed instanceof IdType))
8174        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8175      return (IdType) this.fixed;
8176    }
8177
8178    public boolean hasFixedIdType() { 
8179      return this != null && this.fixed instanceof IdType;
8180    }
8181
8182    /**
8183     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8184     */
8185    public InstantType getFixedInstantType() throws FHIRException { 
8186      if (this.fixed == null)
8187        this.fixed = new InstantType();
8188      if (!(this.fixed instanceof InstantType))
8189        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8190      return (InstantType) this.fixed;
8191    }
8192
8193    public boolean hasFixedInstantType() { 
8194      return this != null && this.fixed instanceof InstantType;
8195    }
8196
8197    /**
8198     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8199     */
8200    public IntegerType getFixedIntegerType() throws FHIRException { 
8201      if (this.fixed == null)
8202        this.fixed = new IntegerType();
8203      if (!(this.fixed instanceof IntegerType))
8204        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8205      return (IntegerType) this.fixed;
8206    }
8207
8208    public boolean hasFixedIntegerType() { 
8209      return this != null && this.fixed instanceof IntegerType;
8210    }
8211
8212    /**
8213     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8214     */
8215    public Integer64Type getFixedInteger64Type() throws FHIRException { 
8216      if (this.fixed == null)
8217        this.fixed = new Integer64Type();
8218      if (!(this.fixed instanceof Integer64Type))
8219        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.fixed.getClass().getName()+" was encountered");
8220      return (Integer64Type) this.fixed;
8221    }
8222
8223    public boolean hasFixedInteger64Type() { 
8224      return this != null && this.fixed instanceof Integer64Type;
8225    }
8226
8227    /**
8228     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8229     */
8230    public MarkdownType getFixedMarkdownType() throws FHIRException { 
8231      if (this.fixed == null)
8232        this.fixed = new MarkdownType();
8233      if (!(this.fixed instanceof MarkdownType))
8234        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8235      return (MarkdownType) this.fixed;
8236    }
8237
8238    public boolean hasFixedMarkdownType() { 
8239      return this != null && this.fixed instanceof MarkdownType;
8240    }
8241
8242    /**
8243     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8244     */
8245    public OidType getFixedOidType() throws FHIRException { 
8246      if (this.fixed == null)
8247        this.fixed = new OidType();
8248      if (!(this.fixed instanceof OidType))
8249        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8250      return (OidType) this.fixed;
8251    }
8252
8253    public boolean hasFixedOidType() { 
8254      return this != null && this.fixed instanceof OidType;
8255    }
8256
8257    /**
8258     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8259     */
8260    public PositiveIntType getFixedPositiveIntType() throws FHIRException { 
8261      if (this.fixed == null)
8262        this.fixed = new PositiveIntType();
8263      if (!(this.fixed instanceof PositiveIntType))
8264        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8265      return (PositiveIntType) this.fixed;
8266    }
8267
8268    public boolean hasFixedPositiveIntType() { 
8269      return this != null && this.fixed instanceof PositiveIntType;
8270    }
8271
8272    /**
8273     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8274     */
8275    public StringType getFixedStringType() throws FHIRException { 
8276      if (this.fixed == null)
8277        this.fixed = new StringType();
8278      if (!(this.fixed instanceof StringType))
8279        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8280      return (StringType) this.fixed;
8281    }
8282
8283    public boolean hasFixedStringType() { 
8284      return this != null && this.fixed instanceof StringType;
8285    }
8286
8287    /**
8288     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8289     */
8290    public TimeType getFixedTimeType() throws FHIRException { 
8291      if (this.fixed == null)
8292        this.fixed = new TimeType();
8293      if (!(this.fixed instanceof TimeType))
8294        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8295      return (TimeType) this.fixed;
8296    }
8297
8298    public boolean hasFixedTimeType() { 
8299      return this != null && this.fixed instanceof TimeType;
8300    }
8301
8302    /**
8303     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8304     */
8305    public UnsignedIntType getFixedUnsignedIntType() throws FHIRException { 
8306      if (this.fixed == null)
8307        this.fixed = new UnsignedIntType();
8308      if (!(this.fixed instanceof UnsignedIntType))
8309        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8310      return (UnsignedIntType) this.fixed;
8311    }
8312
8313    public boolean hasFixedUnsignedIntType() { 
8314      return this != null && this.fixed instanceof UnsignedIntType;
8315    }
8316
8317    /**
8318     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8319     */
8320    public UriType getFixedUriType() throws FHIRException { 
8321      if (this.fixed == null)
8322        this.fixed = new UriType();
8323      if (!(this.fixed instanceof UriType))
8324        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8325      return (UriType) this.fixed;
8326    }
8327
8328    public boolean hasFixedUriType() { 
8329      return this != null && this.fixed instanceof UriType;
8330    }
8331
8332    /**
8333     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8334     */
8335    public UrlType getFixedUrlType() throws FHIRException { 
8336      if (this.fixed == null)
8337        this.fixed = new UrlType();
8338      if (!(this.fixed instanceof UrlType))
8339        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8340      return (UrlType) this.fixed;
8341    }
8342
8343    public boolean hasFixedUrlType() { 
8344      return this != null && this.fixed instanceof UrlType;
8345    }
8346
8347    /**
8348     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8349     */
8350    public UuidType getFixedUuidType() throws FHIRException { 
8351      if (this.fixed == null)
8352        this.fixed = new UuidType();
8353      if (!(this.fixed instanceof UuidType))
8354        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8355      return (UuidType) this.fixed;
8356    }
8357
8358    public boolean hasFixedUuidType() { 
8359      return this != null && this.fixed instanceof UuidType;
8360    }
8361
8362    /**
8363     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8364     */
8365    public Address getFixedAddress() throws FHIRException { 
8366      if (this.fixed == null)
8367        this.fixed = new Address();
8368      if (!(this.fixed instanceof Address))
8369        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.fixed.getClass().getName()+" was encountered");
8370      return (Address) this.fixed;
8371    }
8372
8373    public boolean hasFixedAddress() { 
8374      return this != null && this.fixed instanceof Address;
8375    }
8376
8377    /**
8378     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8379     */
8380    public Age getFixedAge() throws FHIRException { 
8381      if (this.fixed == null)
8382        this.fixed = new Age();
8383      if (!(this.fixed instanceof Age))
8384        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.fixed.getClass().getName()+" was encountered");
8385      return (Age) this.fixed;
8386    }
8387
8388    public boolean hasFixedAge() { 
8389      return this != null && this.fixed instanceof Age;
8390    }
8391
8392    /**
8393     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8394     */
8395    public Annotation getFixedAnnotation() throws FHIRException { 
8396      if (this.fixed == null)
8397        this.fixed = new Annotation();
8398      if (!(this.fixed instanceof Annotation))
8399        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.fixed.getClass().getName()+" was encountered");
8400      return (Annotation) this.fixed;
8401    }
8402
8403    public boolean hasFixedAnnotation() { 
8404      return this != null && this.fixed instanceof Annotation;
8405    }
8406
8407    /**
8408     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8409     */
8410    public Attachment getFixedAttachment() throws FHIRException { 
8411      if (this.fixed == null)
8412        this.fixed = new Attachment();
8413      if (!(this.fixed instanceof Attachment))
8414        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.fixed.getClass().getName()+" was encountered");
8415      return (Attachment) this.fixed;
8416    }
8417
8418    public boolean hasFixedAttachment() { 
8419      return this != null && this.fixed instanceof Attachment;
8420    }
8421
8422    /**
8423     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8424     */
8425    public CodeableConcept getFixedCodeableConcept() throws FHIRException { 
8426      if (this.fixed == null)
8427        this.fixed = new CodeableConcept();
8428      if (!(this.fixed instanceof CodeableConcept))
8429        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.fixed.getClass().getName()+" was encountered");
8430      return (CodeableConcept) this.fixed;
8431    }
8432
8433    public boolean hasFixedCodeableConcept() { 
8434      return this != null && this.fixed instanceof CodeableConcept;
8435    }
8436
8437    /**
8438     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8439     */
8440    public CodeableReference getFixedCodeableReference() throws FHIRException { 
8441      if (this.fixed == null)
8442        this.fixed = new CodeableReference();
8443      if (!(this.fixed instanceof CodeableReference))
8444        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.fixed.getClass().getName()+" was encountered");
8445      return (CodeableReference) this.fixed;
8446    }
8447
8448    public boolean hasFixedCodeableReference() { 
8449      return this != null && this.fixed instanceof CodeableReference;
8450    }
8451
8452    /**
8453     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8454     */
8455    public Coding getFixedCoding() throws FHIRException { 
8456      if (this.fixed == null)
8457        this.fixed = new Coding();
8458      if (!(this.fixed instanceof Coding))
8459        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.fixed.getClass().getName()+" was encountered");
8460      return (Coding) this.fixed;
8461    }
8462
8463    public boolean hasFixedCoding() { 
8464      return this != null && this.fixed instanceof Coding;
8465    }
8466
8467    /**
8468     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8469     */
8470    public ContactPoint getFixedContactPoint() throws FHIRException { 
8471      if (this.fixed == null)
8472        this.fixed = new ContactPoint();
8473      if (!(this.fixed instanceof ContactPoint))
8474        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.fixed.getClass().getName()+" was encountered");
8475      return (ContactPoint) this.fixed;
8476    }
8477
8478    public boolean hasFixedContactPoint() { 
8479      return this != null && this.fixed instanceof ContactPoint;
8480    }
8481
8482    /**
8483     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8484     */
8485    public Count getFixedCount() throws FHIRException { 
8486      if (this.fixed == null)
8487        this.fixed = new Count();
8488      if (!(this.fixed instanceof Count))
8489        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.fixed.getClass().getName()+" was encountered");
8490      return (Count) this.fixed;
8491    }
8492
8493    public boolean hasFixedCount() { 
8494      return this != null && this.fixed instanceof Count;
8495    }
8496
8497    /**
8498     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8499     */
8500    public Distance getFixedDistance() throws FHIRException { 
8501      if (this.fixed == null)
8502        this.fixed = new Distance();
8503      if (!(this.fixed instanceof Distance))
8504        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.fixed.getClass().getName()+" was encountered");
8505      return (Distance) this.fixed;
8506    }
8507
8508    public boolean hasFixedDistance() { 
8509      return this != null && this.fixed instanceof Distance;
8510    }
8511
8512    /**
8513     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8514     */
8515    public Duration getFixedDuration() throws FHIRException { 
8516      if (this.fixed == null)
8517        this.fixed = new Duration();
8518      if (!(this.fixed instanceof Duration))
8519        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.fixed.getClass().getName()+" was encountered");
8520      return (Duration) this.fixed;
8521    }
8522
8523    public boolean hasFixedDuration() { 
8524      return this != null && this.fixed instanceof Duration;
8525    }
8526
8527    /**
8528     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8529     */
8530    public HumanName getFixedHumanName() throws FHIRException { 
8531      if (this.fixed == null)
8532        this.fixed = new HumanName();
8533      if (!(this.fixed instanceof HumanName))
8534        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.fixed.getClass().getName()+" was encountered");
8535      return (HumanName) this.fixed;
8536    }
8537
8538    public boolean hasFixedHumanName() { 
8539      return this != null && this.fixed instanceof HumanName;
8540    }
8541
8542    /**
8543     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8544     */
8545    public Identifier getFixedIdentifier() throws FHIRException { 
8546      if (this.fixed == null)
8547        this.fixed = new Identifier();
8548      if (!(this.fixed instanceof Identifier))
8549        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.fixed.getClass().getName()+" was encountered");
8550      return (Identifier) this.fixed;
8551    }
8552
8553    public boolean hasFixedIdentifier() { 
8554      return this != null && this.fixed instanceof Identifier;
8555    }
8556
8557    /**
8558     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8559     */
8560    public Money getFixedMoney() throws FHIRException { 
8561      if (this.fixed == null)
8562        this.fixed = new Money();
8563      if (!(this.fixed instanceof Money))
8564        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.fixed.getClass().getName()+" was encountered");
8565      return (Money) this.fixed;
8566    }
8567
8568    public boolean hasFixedMoney() { 
8569      return this != null && this.fixed instanceof Money;
8570    }
8571
8572    /**
8573     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8574     */
8575    public Period getFixedPeriod() throws FHIRException { 
8576      if (this.fixed == null)
8577        this.fixed = new Period();
8578      if (!(this.fixed instanceof Period))
8579        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.fixed.getClass().getName()+" was encountered");
8580      return (Period) this.fixed;
8581    }
8582
8583    public boolean hasFixedPeriod() { 
8584      return this != null && this.fixed instanceof Period;
8585    }
8586
8587    /**
8588     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8589     */
8590    public Quantity getFixedQuantity() throws FHIRException { 
8591      if (this.fixed == null)
8592        this.fixed = new Quantity();
8593      if (!(this.fixed instanceof Quantity))
8594        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.fixed.getClass().getName()+" was encountered");
8595      return (Quantity) this.fixed;
8596    }
8597
8598    public boolean hasFixedQuantity() { 
8599      return this != null && this.fixed instanceof Quantity;
8600    }
8601
8602    /**
8603     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8604     */
8605    public Range getFixedRange() throws FHIRException { 
8606      if (this.fixed == null)
8607        this.fixed = new Range();
8608      if (!(this.fixed instanceof Range))
8609        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.fixed.getClass().getName()+" was encountered");
8610      return (Range) this.fixed;
8611    }
8612
8613    public boolean hasFixedRange() { 
8614      return this != null && this.fixed instanceof Range;
8615    }
8616
8617    /**
8618     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8619     */
8620    public Ratio getFixedRatio() throws FHIRException { 
8621      if (this.fixed == null)
8622        this.fixed = new Ratio();
8623      if (!(this.fixed instanceof Ratio))
8624        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.fixed.getClass().getName()+" was encountered");
8625      return (Ratio) this.fixed;
8626    }
8627
8628    public boolean hasFixedRatio() { 
8629      return this != null && this.fixed instanceof Ratio;
8630    }
8631
8632    /**
8633     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8634     */
8635    public RatioRange getFixedRatioRange() throws FHIRException { 
8636      if (this.fixed == null)
8637        this.fixed = new RatioRange();
8638      if (!(this.fixed instanceof RatioRange))
8639        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.fixed.getClass().getName()+" was encountered");
8640      return (RatioRange) this.fixed;
8641    }
8642
8643    public boolean hasFixedRatioRange() { 
8644      return this != null && this.fixed instanceof RatioRange;
8645    }
8646
8647    /**
8648     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8649     */
8650    public Reference getFixedReference() throws FHIRException { 
8651      if (this.fixed == null)
8652        this.fixed = new Reference();
8653      if (!(this.fixed instanceof Reference))
8654        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.fixed.getClass().getName()+" was encountered");
8655      return (Reference) this.fixed;
8656    }
8657
8658    public boolean hasFixedReference() { 
8659      return this != null && this.fixed instanceof Reference;
8660    }
8661
8662    /**
8663     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8664     */
8665    public SampledData getFixedSampledData() throws FHIRException { 
8666      if (this.fixed == null)
8667        this.fixed = new SampledData();
8668      if (!(this.fixed instanceof SampledData))
8669        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.fixed.getClass().getName()+" was encountered");
8670      return (SampledData) this.fixed;
8671    }
8672
8673    public boolean hasFixedSampledData() { 
8674      return this != null && this.fixed instanceof SampledData;
8675    }
8676
8677    /**
8678     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8679     */
8680    public Signature getFixedSignature() throws FHIRException { 
8681      if (this.fixed == null)
8682        this.fixed = new Signature();
8683      if (!(this.fixed instanceof Signature))
8684        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.fixed.getClass().getName()+" was encountered");
8685      return (Signature) this.fixed;
8686    }
8687
8688    public boolean hasFixedSignature() { 
8689      return this != null && this.fixed instanceof Signature;
8690    }
8691
8692    /**
8693     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8694     */
8695    public Timing getFixedTiming() throws FHIRException { 
8696      if (this.fixed == null)
8697        this.fixed = new Timing();
8698      if (!(this.fixed instanceof Timing))
8699        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.fixed.getClass().getName()+" was encountered");
8700      return (Timing) this.fixed;
8701    }
8702
8703    public boolean hasFixedTiming() { 
8704      return this != null && this.fixed instanceof Timing;
8705    }
8706
8707    /**
8708     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8709     */
8710    public ContactDetail getFixedContactDetail() throws FHIRException { 
8711      if (this.fixed == null)
8712        this.fixed = new ContactDetail();
8713      if (!(this.fixed instanceof ContactDetail))
8714        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.fixed.getClass().getName()+" was encountered");
8715      return (ContactDetail) this.fixed;
8716    }
8717
8718    public boolean hasFixedContactDetail() { 
8719      return this != null && this.fixed instanceof ContactDetail;
8720    }
8721
8722    /**
8723     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8724     */
8725    public DataRequirement getFixedDataRequirement() throws FHIRException { 
8726      if (this.fixed == null)
8727        this.fixed = new DataRequirement();
8728      if (!(this.fixed instanceof DataRequirement))
8729        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.fixed.getClass().getName()+" was encountered");
8730      return (DataRequirement) this.fixed;
8731    }
8732
8733    public boolean hasFixedDataRequirement() { 
8734      return this != null && this.fixed instanceof DataRequirement;
8735    }
8736
8737    /**
8738     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8739     */
8740    public Expression getFixedExpression() throws FHIRException { 
8741      if (this.fixed == null)
8742        this.fixed = new Expression();
8743      if (!(this.fixed instanceof Expression))
8744        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.fixed.getClass().getName()+" was encountered");
8745      return (Expression) this.fixed;
8746    }
8747
8748    public boolean hasFixedExpression() { 
8749      return this != null && this.fixed instanceof Expression;
8750    }
8751
8752    /**
8753     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8754     */
8755    public ParameterDefinition getFixedParameterDefinition() throws FHIRException { 
8756      if (this.fixed == null)
8757        this.fixed = new ParameterDefinition();
8758      if (!(this.fixed instanceof ParameterDefinition))
8759        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.fixed.getClass().getName()+" was encountered");
8760      return (ParameterDefinition) this.fixed;
8761    }
8762
8763    public boolean hasFixedParameterDefinition() { 
8764      return this != null && this.fixed instanceof ParameterDefinition;
8765    }
8766
8767    /**
8768     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8769     */
8770    public RelatedArtifact getFixedRelatedArtifact() throws FHIRException { 
8771      if (this.fixed == null)
8772        this.fixed = new RelatedArtifact();
8773      if (!(this.fixed instanceof RelatedArtifact))
8774        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.fixed.getClass().getName()+" was encountered");
8775      return (RelatedArtifact) this.fixed;
8776    }
8777
8778    public boolean hasFixedRelatedArtifact() { 
8779      return this != null && this.fixed instanceof RelatedArtifact;
8780    }
8781
8782    /**
8783     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8784     */
8785    public TriggerDefinition getFixedTriggerDefinition() throws FHIRException { 
8786      if (this.fixed == null)
8787        this.fixed = new TriggerDefinition();
8788      if (!(this.fixed instanceof TriggerDefinition))
8789        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.fixed.getClass().getName()+" was encountered");
8790      return (TriggerDefinition) this.fixed;
8791    }
8792
8793    public boolean hasFixedTriggerDefinition() { 
8794      return this != null && this.fixed instanceof TriggerDefinition;
8795    }
8796
8797    /**
8798     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8799     */
8800    public UsageContext getFixedUsageContext() throws FHIRException { 
8801      if (this.fixed == null)
8802        this.fixed = new UsageContext();
8803      if (!(this.fixed instanceof UsageContext))
8804        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.fixed.getClass().getName()+" was encountered");
8805      return (UsageContext) this.fixed;
8806    }
8807
8808    public boolean hasFixedUsageContext() { 
8809      return this != null && this.fixed instanceof UsageContext;
8810    }
8811
8812    /**
8813     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8814     */
8815    public Availability getFixedAvailability() throws FHIRException { 
8816      if (this.fixed == null)
8817        this.fixed = new Availability();
8818      if (!(this.fixed instanceof Availability))
8819        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.fixed.getClass().getName()+" was encountered");
8820      return (Availability) this.fixed;
8821    }
8822
8823    public boolean hasFixedAvailability() { 
8824      return this != null && this.fixed instanceof Availability;
8825    }
8826
8827    /**
8828     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8829     */
8830    public ExtendedContactDetail getFixedExtendedContactDetail() throws FHIRException { 
8831      if (this.fixed == null)
8832        this.fixed = new ExtendedContactDetail();
8833      if (!(this.fixed instanceof ExtendedContactDetail))
8834        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.fixed.getClass().getName()+" was encountered");
8835      return (ExtendedContactDetail) this.fixed;
8836    }
8837
8838    public boolean hasFixedExtendedContactDetail() { 
8839      return this != null && this.fixed instanceof ExtendedContactDetail;
8840    }
8841
8842    /**
8843     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8844     */
8845    public Dosage getFixedDosage() throws FHIRException { 
8846      if (this.fixed == null)
8847        this.fixed = new Dosage();
8848      if (!(this.fixed instanceof Dosage))
8849        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.fixed.getClass().getName()+" was encountered");
8850      return (Dosage) this.fixed;
8851    }
8852
8853    public boolean hasFixedDosage() { 
8854      return this != null && this.fixed instanceof Dosage;
8855    }
8856
8857    /**
8858     * @return {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8859     */
8860    public Meta getFixedMeta() throws FHIRException { 
8861      if (this.fixed == null)
8862        this.fixed = new Meta();
8863      if (!(this.fixed instanceof Meta))
8864        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.fixed.getClass().getName()+" was encountered");
8865      return (Meta) this.fixed;
8866    }
8867
8868    public boolean hasFixedMeta() { 
8869      return this != null && this.fixed instanceof Meta;
8870    }
8871
8872    public boolean hasFixed() { 
8873      return this.fixed != null && !this.fixed.isEmpty();
8874    }
8875
8876    /**
8877     * @param value {@link #fixed} (Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.)
8878     */
8879    public ElementDefinition setFixed(DataType value) { 
8880      if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
8881        throw new FHIRException("Not the right type for ElementDefinition.fixed[x]: "+value.fhirType());
8882      this.fixed = value;
8883      return this;
8884    }
8885
8886    /**
8887     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
8888
8889When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
8890
8891When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
8892
8893When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
8894
88951. If primitive: it must match exactly the pattern value
88962. If a complex object: it must match (recursively) the pattern value
88973. If an array: it must match (recursively) the pattern value
8898
8899If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
8900     */
8901    public DataType getPattern() { 
8902      return this.pattern;
8903    }
8904
8905    /**
8906     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
8907
8908When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
8909
8910When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
8911
8912When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
8913
89141. If primitive: it must match exactly the pattern value
89152. If a complex object: it must match (recursively) the pattern value
89163. If an array: it must match (recursively) the pattern value
8917
8918If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
8919     */
8920    public Base64BinaryType getPatternBase64BinaryType() throws FHIRException { 
8921      if (this.pattern == null)
8922        this.pattern = new Base64BinaryType();
8923      if (!(this.pattern instanceof Base64BinaryType))
8924        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.pattern.getClass().getName()+" was encountered");
8925      return (Base64BinaryType) this.pattern;
8926    }
8927
8928    public boolean hasPatternBase64BinaryType() { 
8929      return this != null && this.pattern instanceof Base64BinaryType;
8930    }
8931
8932    /**
8933     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
8934
8935When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
8936
8937When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
8938
8939When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
8940
89411. If primitive: it must match exactly the pattern value
89422. If a complex object: it must match (recursively) the pattern value
89433. If an array: it must match (recursively) the pattern value
8944
8945If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
8946     */
8947    public BooleanType getPatternBooleanType() throws FHIRException { 
8948      if (this.pattern == null)
8949        this.pattern = new BooleanType();
8950      if (!(this.pattern instanceof BooleanType))
8951        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.pattern.getClass().getName()+" was encountered");
8952      return (BooleanType) this.pattern;
8953    }
8954
8955    public boolean hasPatternBooleanType() { 
8956      return this != null && this.pattern instanceof BooleanType;
8957    }
8958
8959    /**
8960     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
8961
8962When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
8963
8964When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
8965
8966When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
8967
89681. If primitive: it must match exactly the pattern value
89692. If a complex object: it must match (recursively) the pattern value
89703. If an array: it must match (recursively) the pattern value
8971
8972If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
8973     */
8974    public CanonicalType getPatternCanonicalType() throws FHIRException { 
8975      if (this.pattern == null)
8976        this.pattern = new CanonicalType();
8977      if (!(this.pattern instanceof CanonicalType))
8978        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.pattern.getClass().getName()+" was encountered");
8979      return (CanonicalType) this.pattern;
8980    }
8981
8982    public boolean hasPatternCanonicalType() { 
8983      return this != null && this.pattern instanceof CanonicalType;
8984    }
8985
8986    /**
8987     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
8988
8989When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
8990
8991When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
8992
8993When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
8994
89951. If primitive: it must match exactly the pattern value
89962. If a complex object: it must match (recursively) the pattern value
89973. If an array: it must match (recursively) the pattern value
8998
8999If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9000     */
9001    public CodeType getPatternCodeType() throws FHIRException { 
9002      if (this.pattern == null)
9003        this.pattern = new CodeType();
9004      if (!(this.pattern instanceof CodeType))
9005        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9006      return (CodeType) this.pattern;
9007    }
9008
9009    public boolean hasPatternCodeType() { 
9010      return this != null && this.pattern instanceof CodeType;
9011    }
9012
9013    /**
9014     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9015
9016When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9017
9018When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9019
9020When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9021
90221. If primitive: it must match exactly the pattern value
90232. If a complex object: it must match (recursively) the pattern value
90243. If an array: it must match (recursively) the pattern value
9025
9026If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9027     */
9028    public DateType getPatternDateType() throws FHIRException { 
9029      if (this.pattern == null)
9030        this.pattern = new DateType();
9031      if (!(this.pattern instanceof DateType))
9032        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9033      return (DateType) this.pattern;
9034    }
9035
9036    public boolean hasPatternDateType() { 
9037      return this != null && this.pattern instanceof DateType;
9038    }
9039
9040    /**
9041     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9042
9043When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9044
9045When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9046
9047When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9048
90491. If primitive: it must match exactly the pattern value
90502. If a complex object: it must match (recursively) the pattern value
90513. If an array: it must match (recursively) the pattern value
9052
9053If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9054     */
9055    public DateTimeType getPatternDateTimeType() throws FHIRException { 
9056      if (this.pattern == null)
9057        this.pattern = new DateTimeType();
9058      if (!(this.pattern instanceof DateTimeType))
9059        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9060      return (DateTimeType) this.pattern;
9061    }
9062
9063    public boolean hasPatternDateTimeType() { 
9064      return this != null && this.pattern instanceof DateTimeType;
9065    }
9066
9067    /**
9068     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9069
9070When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9071
9072When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9073
9074When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9075
90761. If primitive: it must match exactly the pattern value
90772. If a complex object: it must match (recursively) the pattern value
90783. If an array: it must match (recursively) the pattern value
9079
9080If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9081     */
9082    public DecimalType getPatternDecimalType() throws FHIRException { 
9083      if (this.pattern == null)
9084        this.pattern = new DecimalType();
9085      if (!(this.pattern instanceof DecimalType))
9086        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9087      return (DecimalType) this.pattern;
9088    }
9089
9090    public boolean hasPatternDecimalType() { 
9091      return this != null && this.pattern instanceof DecimalType;
9092    }
9093
9094    /**
9095     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9096
9097When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9098
9099When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9100
9101When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9102
91031. If primitive: it must match exactly the pattern value
91042. If a complex object: it must match (recursively) the pattern value
91053. If an array: it must match (recursively) the pattern value
9106
9107If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9108     */
9109    public IdType getPatternIdType() throws FHIRException { 
9110      if (this.pattern == null)
9111        this.pattern = new IdType();
9112      if (!(this.pattern instanceof IdType))
9113        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9114      return (IdType) this.pattern;
9115    }
9116
9117    public boolean hasPatternIdType() { 
9118      return this != null && this.pattern instanceof IdType;
9119    }
9120
9121    /**
9122     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9123
9124When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9125
9126When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9127
9128When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9129
91301. If primitive: it must match exactly the pattern value
91312. If a complex object: it must match (recursively) the pattern value
91323. If an array: it must match (recursively) the pattern value
9133
9134If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9135     */
9136    public InstantType getPatternInstantType() throws FHIRException { 
9137      if (this.pattern == null)
9138        this.pattern = new InstantType();
9139      if (!(this.pattern instanceof InstantType))
9140        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9141      return (InstantType) this.pattern;
9142    }
9143
9144    public boolean hasPatternInstantType() { 
9145      return this != null && this.pattern instanceof InstantType;
9146    }
9147
9148    /**
9149     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9150
9151When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9152
9153When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9154
9155When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9156
91571. If primitive: it must match exactly the pattern value
91582. If a complex object: it must match (recursively) the pattern value
91593. If an array: it must match (recursively) the pattern value
9160
9161If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9162     */
9163    public IntegerType getPatternIntegerType() throws FHIRException { 
9164      if (this.pattern == null)
9165        this.pattern = new IntegerType();
9166      if (!(this.pattern instanceof IntegerType))
9167        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9168      return (IntegerType) this.pattern;
9169    }
9170
9171    public boolean hasPatternIntegerType() { 
9172      return this != null && this.pattern instanceof IntegerType;
9173    }
9174
9175    /**
9176     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9177
9178When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9179
9180When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9181
9182When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9183
91841. If primitive: it must match exactly the pattern value
91852. If a complex object: it must match (recursively) the pattern value
91863. If an array: it must match (recursively) the pattern value
9187
9188If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9189     */
9190    public Integer64Type getPatternInteger64Type() throws FHIRException { 
9191      if (this.pattern == null)
9192        this.pattern = new Integer64Type();
9193      if (!(this.pattern instanceof Integer64Type))
9194        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.pattern.getClass().getName()+" was encountered");
9195      return (Integer64Type) this.pattern;
9196    }
9197
9198    public boolean hasPatternInteger64Type() { 
9199      return this != null && this.pattern instanceof Integer64Type;
9200    }
9201
9202    /**
9203     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9204
9205When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9206
9207When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9208
9209When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9210
92111. If primitive: it must match exactly the pattern value
92122. If a complex object: it must match (recursively) the pattern value
92133. If an array: it must match (recursively) the pattern value
9214
9215If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9216     */
9217    public MarkdownType getPatternMarkdownType() throws FHIRException { 
9218      if (this.pattern == null)
9219        this.pattern = new MarkdownType();
9220      if (!(this.pattern instanceof MarkdownType))
9221        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9222      return (MarkdownType) this.pattern;
9223    }
9224
9225    public boolean hasPatternMarkdownType() { 
9226      return this != null && this.pattern instanceof MarkdownType;
9227    }
9228
9229    /**
9230     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9231
9232When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9233
9234When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9235
9236When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9237
92381. If primitive: it must match exactly the pattern value
92392. If a complex object: it must match (recursively) the pattern value
92403. If an array: it must match (recursively) the pattern value
9241
9242If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9243     */
9244    public OidType getPatternOidType() throws FHIRException { 
9245      if (this.pattern == null)
9246        this.pattern = new OidType();
9247      if (!(this.pattern instanceof OidType))
9248        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9249      return (OidType) this.pattern;
9250    }
9251
9252    public boolean hasPatternOidType() { 
9253      return this != null && this.pattern instanceof OidType;
9254    }
9255
9256    /**
9257     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9258
9259When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9260
9261When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9262
9263When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9264
92651. If primitive: it must match exactly the pattern value
92662. If a complex object: it must match (recursively) the pattern value
92673. If an array: it must match (recursively) the pattern value
9268
9269If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9270     */
9271    public PositiveIntType getPatternPositiveIntType() throws FHIRException { 
9272      if (this.pattern == null)
9273        this.pattern = new PositiveIntType();
9274      if (!(this.pattern instanceof PositiveIntType))
9275        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9276      return (PositiveIntType) this.pattern;
9277    }
9278
9279    public boolean hasPatternPositiveIntType() { 
9280      return this != null && this.pattern instanceof PositiveIntType;
9281    }
9282
9283    /**
9284     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9285
9286When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9287
9288When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9289
9290When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9291
92921. If primitive: it must match exactly the pattern value
92932. If a complex object: it must match (recursively) the pattern value
92943. If an array: it must match (recursively) the pattern value
9295
9296If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9297     */
9298    public StringType getPatternStringType() throws FHIRException { 
9299      if (this.pattern == null)
9300        this.pattern = new StringType();
9301      if (!(this.pattern instanceof StringType))
9302        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9303      return (StringType) this.pattern;
9304    }
9305
9306    public boolean hasPatternStringType() { 
9307      return this != null && this.pattern instanceof StringType;
9308    }
9309
9310    /**
9311     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9312
9313When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9314
9315When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9316
9317When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9318
93191. If primitive: it must match exactly the pattern value
93202. If a complex object: it must match (recursively) the pattern value
93213. If an array: it must match (recursively) the pattern value
9322
9323If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9324     */
9325    public TimeType getPatternTimeType() throws FHIRException { 
9326      if (this.pattern == null)
9327        this.pattern = new TimeType();
9328      if (!(this.pattern instanceof TimeType))
9329        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9330      return (TimeType) this.pattern;
9331    }
9332
9333    public boolean hasPatternTimeType() { 
9334      return this != null && this.pattern instanceof TimeType;
9335    }
9336
9337    /**
9338     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9339
9340When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9341
9342When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9343
9344When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9345
93461. If primitive: it must match exactly the pattern value
93472. If a complex object: it must match (recursively) the pattern value
93483. If an array: it must match (recursively) the pattern value
9349
9350If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9351     */
9352    public UnsignedIntType getPatternUnsignedIntType() throws FHIRException { 
9353      if (this.pattern == null)
9354        this.pattern = new UnsignedIntType();
9355      if (!(this.pattern instanceof UnsignedIntType))
9356        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9357      return (UnsignedIntType) this.pattern;
9358    }
9359
9360    public boolean hasPatternUnsignedIntType() { 
9361      return this != null && this.pattern instanceof UnsignedIntType;
9362    }
9363
9364    /**
9365     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9366
9367When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9368
9369When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9370
9371When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9372
93731. If primitive: it must match exactly the pattern value
93742. If a complex object: it must match (recursively) the pattern value
93753. If an array: it must match (recursively) the pattern value
9376
9377If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9378     */
9379    public UriType getPatternUriType() throws FHIRException { 
9380      if (this.pattern == null)
9381        this.pattern = new UriType();
9382      if (!(this.pattern instanceof UriType))
9383        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9384      return (UriType) this.pattern;
9385    }
9386
9387    public boolean hasPatternUriType() { 
9388      return this != null && this.pattern instanceof UriType;
9389    }
9390
9391    /**
9392     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9393
9394When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9395
9396When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9397
9398When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9399
94001. If primitive: it must match exactly the pattern value
94012. If a complex object: it must match (recursively) the pattern value
94023. If an array: it must match (recursively) the pattern value
9403
9404If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9405     */
9406    public UrlType getPatternUrlType() throws FHIRException { 
9407      if (this.pattern == null)
9408        this.pattern = new UrlType();
9409      if (!(this.pattern instanceof UrlType))
9410        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9411      return (UrlType) this.pattern;
9412    }
9413
9414    public boolean hasPatternUrlType() { 
9415      return this != null && this.pattern instanceof UrlType;
9416    }
9417
9418    /**
9419     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9420
9421When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9422
9423When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9424
9425When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9426
94271. If primitive: it must match exactly the pattern value
94282. If a complex object: it must match (recursively) the pattern value
94293. If an array: it must match (recursively) the pattern value
9430
9431If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9432     */
9433    public UuidType getPatternUuidType() throws FHIRException { 
9434      if (this.pattern == null)
9435        this.pattern = new UuidType();
9436      if (!(this.pattern instanceof UuidType))
9437        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9438      return (UuidType) this.pattern;
9439    }
9440
9441    public boolean hasPatternUuidType() { 
9442      return this != null && this.pattern instanceof UuidType;
9443    }
9444
9445    /**
9446     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9447
9448When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9449
9450When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9451
9452When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9453
94541. If primitive: it must match exactly the pattern value
94552. If a complex object: it must match (recursively) the pattern value
94563. If an array: it must match (recursively) the pattern value
9457
9458If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9459     */
9460    public Address getPatternAddress() throws FHIRException { 
9461      if (this.pattern == null)
9462        this.pattern = new Address();
9463      if (!(this.pattern instanceof Address))
9464        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.pattern.getClass().getName()+" was encountered");
9465      return (Address) this.pattern;
9466    }
9467
9468    public boolean hasPatternAddress() { 
9469      return this != null && this.pattern instanceof Address;
9470    }
9471
9472    /**
9473     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9474
9475When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9476
9477When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9478
9479When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9480
94811. If primitive: it must match exactly the pattern value
94822. If a complex object: it must match (recursively) the pattern value
94833. If an array: it must match (recursively) the pattern value
9484
9485If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9486     */
9487    public Age getPatternAge() throws FHIRException { 
9488      if (this.pattern == null)
9489        this.pattern = new Age();
9490      if (!(this.pattern instanceof Age))
9491        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.pattern.getClass().getName()+" was encountered");
9492      return (Age) this.pattern;
9493    }
9494
9495    public boolean hasPatternAge() { 
9496      return this != null && this.pattern instanceof Age;
9497    }
9498
9499    /**
9500     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9501
9502When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9503
9504When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9505
9506When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9507
95081. If primitive: it must match exactly the pattern value
95092. If a complex object: it must match (recursively) the pattern value
95103. If an array: it must match (recursively) the pattern value
9511
9512If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9513     */
9514    public Annotation getPatternAnnotation() throws FHIRException { 
9515      if (this.pattern == null)
9516        this.pattern = new Annotation();
9517      if (!(this.pattern instanceof Annotation))
9518        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.pattern.getClass().getName()+" was encountered");
9519      return (Annotation) this.pattern;
9520    }
9521
9522    public boolean hasPatternAnnotation() { 
9523      return this != null && this.pattern instanceof Annotation;
9524    }
9525
9526    /**
9527     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9528
9529When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9530
9531When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9532
9533When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9534
95351. If primitive: it must match exactly the pattern value
95362. If a complex object: it must match (recursively) the pattern value
95373. If an array: it must match (recursively) the pattern value
9538
9539If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9540     */
9541    public Attachment getPatternAttachment() throws FHIRException { 
9542      if (this.pattern == null)
9543        this.pattern = new Attachment();
9544      if (!(this.pattern instanceof Attachment))
9545        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.pattern.getClass().getName()+" was encountered");
9546      return (Attachment) this.pattern;
9547    }
9548
9549    public boolean hasPatternAttachment() { 
9550      return this != null && this.pattern instanceof Attachment;
9551    }
9552
9553    /**
9554     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9555
9556When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9557
9558When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9559
9560When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9561
95621. If primitive: it must match exactly the pattern value
95632. If a complex object: it must match (recursively) the pattern value
95643. If an array: it must match (recursively) the pattern value
9565
9566If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9567     */
9568    public CodeableConcept getPatternCodeableConcept() throws FHIRException { 
9569      if (this.pattern == null)
9570        this.pattern = new CodeableConcept();
9571      if (!(this.pattern instanceof CodeableConcept))
9572        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.pattern.getClass().getName()+" was encountered");
9573      return (CodeableConcept) this.pattern;
9574    }
9575
9576    public boolean hasPatternCodeableConcept() { 
9577      return this != null && this.pattern instanceof CodeableConcept;
9578    }
9579
9580    /**
9581     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9582
9583When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9584
9585When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9586
9587When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9588
95891. If primitive: it must match exactly the pattern value
95902. If a complex object: it must match (recursively) the pattern value
95913. If an array: it must match (recursively) the pattern value
9592
9593If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9594     */
9595    public CodeableReference getPatternCodeableReference() throws FHIRException { 
9596      if (this.pattern == null)
9597        this.pattern = new CodeableReference();
9598      if (!(this.pattern instanceof CodeableReference))
9599        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.pattern.getClass().getName()+" was encountered");
9600      return (CodeableReference) this.pattern;
9601    }
9602
9603    public boolean hasPatternCodeableReference() { 
9604      return this != null && this.pattern instanceof CodeableReference;
9605    }
9606
9607    /**
9608     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9609
9610When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9611
9612When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9613
9614When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9615
96161. If primitive: it must match exactly the pattern value
96172. If a complex object: it must match (recursively) the pattern value
96183. If an array: it must match (recursively) the pattern value
9619
9620If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9621     */
9622    public Coding getPatternCoding() throws FHIRException { 
9623      if (this.pattern == null)
9624        this.pattern = new Coding();
9625      if (!(this.pattern instanceof Coding))
9626        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.pattern.getClass().getName()+" was encountered");
9627      return (Coding) this.pattern;
9628    }
9629
9630    public boolean hasPatternCoding() { 
9631      return this != null && this.pattern instanceof Coding;
9632    }
9633
9634    /**
9635     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9636
9637When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9638
9639When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9640
9641When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9642
96431. If primitive: it must match exactly the pattern value
96442. If a complex object: it must match (recursively) the pattern value
96453. If an array: it must match (recursively) the pattern value
9646
9647If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9648     */
9649    public ContactPoint getPatternContactPoint() throws FHIRException { 
9650      if (this.pattern == null)
9651        this.pattern = new ContactPoint();
9652      if (!(this.pattern instanceof ContactPoint))
9653        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.pattern.getClass().getName()+" was encountered");
9654      return (ContactPoint) this.pattern;
9655    }
9656
9657    public boolean hasPatternContactPoint() { 
9658      return this != null && this.pattern instanceof ContactPoint;
9659    }
9660
9661    /**
9662     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9663
9664When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9665
9666When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9667
9668When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9669
96701. If primitive: it must match exactly the pattern value
96712. If a complex object: it must match (recursively) the pattern value
96723. If an array: it must match (recursively) the pattern value
9673
9674If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9675     */
9676    public Count getPatternCount() throws FHIRException { 
9677      if (this.pattern == null)
9678        this.pattern = new Count();
9679      if (!(this.pattern instanceof Count))
9680        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.pattern.getClass().getName()+" was encountered");
9681      return (Count) this.pattern;
9682    }
9683
9684    public boolean hasPatternCount() { 
9685      return this != null && this.pattern instanceof Count;
9686    }
9687
9688    /**
9689     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9690
9691When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9692
9693When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9694
9695When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9696
96971. If primitive: it must match exactly the pattern value
96982. If a complex object: it must match (recursively) the pattern value
96993. If an array: it must match (recursively) the pattern value
9700
9701If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9702     */
9703    public Distance getPatternDistance() throws FHIRException { 
9704      if (this.pattern == null)
9705        this.pattern = new Distance();
9706      if (!(this.pattern instanceof Distance))
9707        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.pattern.getClass().getName()+" was encountered");
9708      return (Distance) this.pattern;
9709    }
9710
9711    public boolean hasPatternDistance() { 
9712      return this != null && this.pattern instanceof Distance;
9713    }
9714
9715    /**
9716     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9717
9718When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9719
9720When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9721
9722When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9723
97241. If primitive: it must match exactly the pattern value
97252. If a complex object: it must match (recursively) the pattern value
97263. If an array: it must match (recursively) the pattern value
9727
9728If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9729     */
9730    public Duration getPatternDuration() throws FHIRException { 
9731      if (this.pattern == null)
9732        this.pattern = new Duration();
9733      if (!(this.pattern instanceof Duration))
9734        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.pattern.getClass().getName()+" was encountered");
9735      return (Duration) this.pattern;
9736    }
9737
9738    public boolean hasPatternDuration() { 
9739      return this != null && this.pattern instanceof Duration;
9740    }
9741
9742    /**
9743     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9744
9745When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9746
9747When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9748
9749When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9750
97511. If primitive: it must match exactly the pattern value
97522. If a complex object: it must match (recursively) the pattern value
97533. If an array: it must match (recursively) the pattern value
9754
9755If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9756     */
9757    public HumanName getPatternHumanName() throws FHIRException { 
9758      if (this.pattern == null)
9759        this.pattern = new HumanName();
9760      if (!(this.pattern instanceof HumanName))
9761        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.pattern.getClass().getName()+" was encountered");
9762      return (HumanName) this.pattern;
9763    }
9764
9765    public boolean hasPatternHumanName() { 
9766      return this != null && this.pattern instanceof HumanName;
9767    }
9768
9769    /**
9770     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9771
9772When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9773
9774When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9775
9776When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9777
97781. If primitive: it must match exactly the pattern value
97792. If a complex object: it must match (recursively) the pattern value
97803. If an array: it must match (recursively) the pattern value
9781
9782If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9783     */
9784    public Identifier getPatternIdentifier() throws FHIRException { 
9785      if (this.pattern == null)
9786        this.pattern = new Identifier();
9787      if (!(this.pattern instanceof Identifier))
9788        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.pattern.getClass().getName()+" was encountered");
9789      return (Identifier) this.pattern;
9790    }
9791
9792    public boolean hasPatternIdentifier() { 
9793      return this != null && this.pattern instanceof Identifier;
9794    }
9795
9796    /**
9797     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9798
9799When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9800
9801When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9802
9803When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9804
98051. If primitive: it must match exactly the pattern value
98062. If a complex object: it must match (recursively) the pattern value
98073. If an array: it must match (recursively) the pattern value
9808
9809If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9810     */
9811    public Money getPatternMoney() throws FHIRException { 
9812      if (this.pattern == null)
9813        this.pattern = new Money();
9814      if (!(this.pattern instanceof Money))
9815        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.pattern.getClass().getName()+" was encountered");
9816      return (Money) this.pattern;
9817    }
9818
9819    public boolean hasPatternMoney() { 
9820      return this != null && this.pattern instanceof Money;
9821    }
9822
9823    /**
9824     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9825
9826When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9827
9828When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9829
9830When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9831
98321. If primitive: it must match exactly the pattern value
98332. If a complex object: it must match (recursively) the pattern value
98343. If an array: it must match (recursively) the pattern value
9835
9836If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9837     */
9838    public Period getPatternPeriod() throws FHIRException { 
9839      if (this.pattern == null)
9840        this.pattern = new Period();
9841      if (!(this.pattern instanceof Period))
9842        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.pattern.getClass().getName()+" was encountered");
9843      return (Period) this.pattern;
9844    }
9845
9846    public boolean hasPatternPeriod() { 
9847      return this != null && this.pattern instanceof Period;
9848    }
9849
9850    /**
9851     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9852
9853When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9854
9855When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9856
9857When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9858
98591. If primitive: it must match exactly the pattern value
98602. If a complex object: it must match (recursively) the pattern value
98613. If an array: it must match (recursively) the pattern value
9862
9863If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9864     */
9865    public Quantity getPatternQuantity() throws FHIRException { 
9866      if (this.pattern == null)
9867        this.pattern = new Quantity();
9868      if (!(this.pattern instanceof Quantity))
9869        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.pattern.getClass().getName()+" was encountered");
9870      return (Quantity) this.pattern;
9871    }
9872
9873    public boolean hasPatternQuantity() { 
9874      return this != null && this.pattern instanceof Quantity;
9875    }
9876
9877    /**
9878     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9879
9880When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9881
9882When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9883
9884When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9885
98861. If primitive: it must match exactly the pattern value
98872. If a complex object: it must match (recursively) the pattern value
98883. If an array: it must match (recursively) the pattern value
9889
9890If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9891     */
9892    public Range getPatternRange() throws FHIRException { 
9893      if (this.pattern == null)
9894        this.pattern = new Range();
9895      if (!(this.pattern instanceof Range))
9896        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.pattern.getClass().getName()+" was encountered");
9897      return (Range) this.pattern;
9898    }
9899
9900    public boolean hasPatternRange() { 
9901      return this != null && this.pattern instanceof Range;
9902    }
9903
9904    /**
9905     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9906
9907When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9908
9909When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9910
9911When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9912
99131. If primitive: it must match exactly the pattern value
99142. If a complex object: it must match (recursively) the pattern value
99153. If an array: it must match (recursively) the pattern value
9916
9917If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9918     */
9919    public Ratio getPatternRatio() throws FHIRException { 
9920      if (this.pattern == null)
9921        this.pattern = new Ratio();
9922      if (!(this.pattern instanceof Ratio))
9923        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.pattern.getClass().getName()+" was encountered");
9924      return (Ratio) this.pattern;
9925    }
9926
9927    public boolean hasPatternRatio() { 
9928      return this != null && this.pattern instanceof Ratio;
9929    }
9930
9931    /**
9932     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9933
9934When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9935
9936When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9937
9938When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9939
99401. If primitive: it must match exactly the pattern value
99412. If a complex object: it must match (recursively) the pattern value
99423. If an array: it must match (recursively) the pattern value
9943
9944If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9945     */
9946    public RatioRange getPatternRatioRange() throws FHIRException { 
9947      if (this.pattern == null)
9948        this.pattern = new RatioRange();
9949      if (!(this.pattern instanceof RatioRange))
9950        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.pattern.getClass().getName()+" was encountered");
9951      return (RatioRange) this.pattern;
9952    }
9953
9954    public boolean hasPatternRatioRange() { 
9955      return this != null && this.pattern instanceof RatioRange;
9956    }
9957
9958    /**
9959     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9960
9961When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9962
9963When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9964
9965When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9966
99671. If primitive: it must match exactly the pattern value
99682. If a complex object: it must match (recursively) the pattern value
99693. If an array: it must match (recursively) the pattern value
9970
9971If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9972     */
9973    public Reference getPatternReference() throws FHIRException { 
9974      if (this.pattern == null)
9975        this.pattern = new Reference();
9976      if (!(this.pattern instanceof Reference))
9977        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.pattern.getClass().getName()+" was encountered");
9978      return (Reference) this.pattern;
9979    }
9980
9981    public boolean hasPatternReference() { 
9982      return this != null && this.pattern instanceof Reference;
9983    }
9984
9985    /**
9986     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
9987
9988When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9989
9990When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
9991
9992When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
9993
99941. If primitive: it must match exactly the pattern value
99952. If a complex object: it must match (recursively) the pattern value
99963. If an array: it must match (recursively) the pattern value
9997
9998If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
9999     */
10000    public SampledData getPatternSampledData() throws FHIRException { 
10001      if (this.pattern == null)
10002        this.pattern = new SampledData();
10003      if (!(this.pattern instanceof SampledData))
10004        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.pattern.getClass().getName()+" was encountered");
10005      return (SampledData) this.pattern;
10006    }
10007
10008    public boolean hasPatternSampledData() { 
10009      return this != null && this.pattern instanceof SampledData;
10010    }
10011
10012    /**
10013     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10014
10015When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10016
10017When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10018
10019When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10020
100211. If primitive: it must match exactly the pattern value
100222. If a complex object: it must match (recursively) the pattern value
100233. If an array: it must match (recursively) the pattern value
10024
10025If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10026     */
10027    public Signature getPatternSignature() throws FHIRException { 
10028      if (this.pattern == null)
10029        this.pattern = new Signature();
10030      if (!(this.pattern instanceof Signature))
10031        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.pattern.getClass().getName()+" was encountered");
10032      return (Signature) this.pattern;
10033    }
10034
10035    public boolean hasPatternSignature() { 
10036      return this != null && this.pattern instanceof Signature;
10037    }
10038
10039    /**
10040     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10041
10042When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10043
10044When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10045
10046When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10047
100481. If primitive: it must match exactly the pattern value
100492. If a complex object: it must match (recursively) the pattern value
100503. If an array: it must match (recursively) the pattern value
10051
10052If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10053     */
10054    public Timing getPatternTiming() throws FHIRException { 
10055      if (this.pattern == null)
10056        this.pattern = new Timing();
10057      if (!(this.pattern instanceof Timing))
10058        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.pattern.getClass().getName()+" was encountered");
10059      return (Timing) this.pattern;
10060    }
10061
10062    public boolean hasPatternTiming() { 
10063      return this != null && this.pattern instanceof Timing;
10064    }
10065
10066    /**
10067     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10068
10069When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10070
10071When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10072
10073When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10074
100751. If primitive: it must match exactly the pattern value
100762. If a complex object: it must match (recursively) the pattern value
100773. If an array: it must match (recursively) the pattern value
10078
10079If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10080     */
10081    public ContactDetail getPatternContactDetail() throws FHIRException { 
10082      if (this.pattern == null)
10083        this.pattern = new ContactDetail();
10084      if (!(this.pattern instanceof ContactDetail))
10085        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.pattern.getClass().getName()+" was encountered");
10086      return (ContactDetail) this.pattern;
10087    }
10088
10089    public boolean hasPatternContactDetail() { 
10090      return this != null && this.pattern instanceof ContactDetail;
10091    }
10092
10093    /**
10094     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10095
10096When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10097
10098When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10099
10100When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10101
101021. If primitive: it must match exactly the pattern value
101032. If a complex object: it must match (recursively) the pattern value
101043. If an array: it must match (recursively) the pattern value
10105
10106If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10107     */
10108    public DataRequirement getPatternDataRequirement() throws FHIRException { 
10109      if (this.pattern == null)
10110        this.pattern = new DataRequirement();
10111      if (!(this.pattern instanceof DataRequirement))
10112        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.pattern.getClass().getName()+" was encountered");
10113      return (DataRequirement) this.pattern;
10114    }
10115
10116    public boolean hasPatternDataRequirement() { 
10117      return this != null && this.pattern instanceof DataRequirement;
10118    }
10119
10120    /**
10121     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10122
10123When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10124
10125When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10126
10127When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10128
101291. If primitive: it must match exactly the pattern value
101302. If a complex object: it must match (recursively) the pattern value
101313. If an array: it must match (recursively) the pattern value
10132
10133If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10134     */
10135    public Expression getPatternExpression() throws FHIRException { 
10136      if (this.pattern == null)
10137        this.pattern = new Expression();
10138      if (!(this.pattern instanceof Expression))
10139        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.pattern.getClass().getName()+" was encountered");
10140      return (Expression) this.pattern;
10141    }
10142
10143    public boolean hasPatternExpression() { 
10144      return this != null && this.pattern instanceof Expression;
10145    }
10146
10147    /**
10148     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10149
10150When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10151
10152When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10153
10154When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10155
101561. If primitive: it must match exactly the pattern value
101572. If a complex object: it must match (recursively) the pattern value
101583. If an array: it must match (recursively) the pattern value
10159
10160If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10161     */
10162    public ParameterDefinition getPatternParameterDefinition() throws FHIRException { 
10163      if (this.pattern == null)
10164        this.pattern = new ParameterDefinition();
10165      if (!(this.pattern instanceof ParameterDefinition))
10166        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.pattern.getClass().getName()+" was encountered");
10167      return (ParameterDefinition) this.pattern;
10168    }
10169
10170    public boolean hasPatternParameterDefinition() { 
10171      return this != null && this.pattern instanceof ParameterDefinition;
10172    }
10173
10174    /**
10175     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10176
10177When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10178
10179When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10180
10181When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10182
101831. If primitive: it must match exactly the pattern value
101842. If a complex object: it must match (recursively) the pattern value
101853. If an array: it must match (recursively) the pattern value
10186
10187If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10188     */
10189    public RelatedArtifact getPatternRelatedArtifact() throws FHIRException { 
10190      if (this.pattern == null)
10191        this.pattern = new RelatedArtifact();
10192      if (!(this.pattern instanceof RelatedArtifact))
10193        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.pattern.getClass().getName()+" was encountered");
10194      return (RelatedArtifact) this.pattern;
10195    }
10196
10197    public boolean hasPatternRelatedArtifact() { 
10198      return this != null && this.pattern instanceof RelatedArtifact;
10199    }
10200
10201    /**
10202     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10203
10204When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10205
10206When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10207
10208When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10209
102101. If primitive: it must match exactly the pattern value
102112. If a complex object: it must match (recursively) the pattern value
102123. If an array: it must match (recursively) the pattern value
10213
10214If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10215     */
10216    public TriggerDefinition getPatternTriggerDefinition() throws FHIRException { 
10217      if (this.pattern == null)
10218        this.pattern = new TriggerDefinition();
10219      if (!(this.pattern instanceof TriggerDefinition))
10220        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.pattern.getClass().getName()+" was encountered");
10221      return (TriggerDefinition) this.pattern;
10222    }
10223
10224    public boolean hasPatternTriggerDefinition() { 
10225      return this != null && this.pattern instanceof TriggerDefinition;
10226    }
10227
10228    /**
10229     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10230
10231When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10232
10233When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10234
10235When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10236
102371. If primitive: it must match exactly the pattern value
102382. If a complex object: it must match (recursively) the pattern value
102393. If an array: it must match (recursively) the pattern value
10240
10241If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10242     */
10243    public UsageContext getPatternUsageContext() throws FHIRException { 
10244      if (this.pattern == null)
10245        this.pattern = new UsageContext();
10246      if (!(this.pattern instanceof UsageContext))
10247        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.pattern.getClass().getName()+" was encountered");
10248      return (UsageContext) this.pattern;
10249    }
10250
10251    public boolean hasPatternUsageContext() { 
10252      return this != null && this.pattern instanceof UsageContext;
10253    }
10254
10255    /**
10256     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10257
10258When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10259
10260When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10261
10262When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10263
102641. If primitive: it must match exactly the pattern value
102652. If a complex object: it must match (recursively) the pattern value
102663. If an array: it must match (recursively) the pattern value
10267
10268If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10269     */
10270    public Availability getPatternAvailability() throws FHIRException { 
10271      if (this.pattern == null)
10272        this.pattern = new Availability();
10273      if (!(this.pattern instanceof Availability))
10274        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.pattern.getClass().getName()+" was encountered");
10275      return (Availability) this.pattern;
10276    }
10277
10278    public boolean hasPatternAvailability() { 
10279      return this != null && this.pattern instanceof Availability;
10280    }
10281
10282    /**
10283     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10284
10285When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10286
10287When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10288
10289When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10290
102911. If primitive: it must match exactly the pattern value
102922. If a complex object: it must match (recursively) the pattern value
102933. If an array: it must match (recursively) the pattern value
10294
10295If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10296     */
10297    public ExtendedContactDetail getPatternExtendedContactDetail() throws FHIRException { 
10298      if (this.pattern == null)
10299        this.pattern = new ExtendedContactDetail();
10300      if (!(this.pattern instanceof ExtendedContactDetail))
10301        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.pattern.getClass().getName()+" was encountered");
10302      return (ExtendedContactDetail) this.pattern;
10303    }
10304
10305    public boolean hasPatternExtendedContactDetail() { 
10306      return this != null && this.pattern instanceof ExtendedContactDetail;
10307    }
10308
10309    /**
10310     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10311
10312When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10313
10314When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10315
10316When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10317
103181. If primitive: it must match exactly the pattern value
103192. If a complex object: it must match (recursively) the pattern value
103203. If an array: it must match (recursively) the pattern value
10321
10322If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10323     */
10324    public Dosage getPatternDosage() throws FHIRException { 
10325      if (this.pattern == null)
10326        this.pattern = new Dosage();
10327      if (!(this.pattern instanceof Dosage))
10328        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.pattern.getClass().getName()+" was encountered");
10329      return (Dosage) this.pattern;
10330    }
10331
10332    public boolean hasPatternDosage() { 
10333      return this != null && this.pattern instanceof Dosage;
10334    }
10335
10336    /**
10337     * @return {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10338
10339When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10340
10341When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10342
10343When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10344
103451. If primitive: it must match exactly the pattern value
103462. If a complex object: it must match (recursively) the pattern value
103473. If an array: it must match (recursively) the pattern value
10348
10349If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10350     */
10351    public Meta getPatternMeta() throws FHIRException { 
10352      if (this.pattern == null)
10353        this.pattern = new Meta();
10354      if (!(this.pattern instanceof Meta))
10355        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.pattern.getClass().getName()+" was encountered");
10356      return (Meta) this.pattern;
10357    }
10358
10359    public boolean hasPatternMeta() { 
10360      return this != null && this.pattern instanceof Meta;
10361    }
10362
10363    public boolean hasPattern() { 
10364      return this.pattern != null && !this.pattern.isEmpty();
10365    }
10366
10367    /**
10368     * @param value {@link #pattern} (Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  
10369
10370When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10371
10372When an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.
10373
10374When pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,
10375
103761. If primitive: it must match exactly the pattern value
103772. If a complex object: it must match (recursively) the pattern value
103783. If an array: it must match (recursively) the pattern value
10379
10380If a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.)
10381     */
10382    public ElementDefinition setPattern(DataType value) { 
10383      if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
10384        throw new FHIRException("Not the right type for ElementDefinition.pattern[x]: "+value.fhirType());
10385      this.pattern = value;
10386      return this;
10387    }
10388
10389    /**
10390     * @return {@link #example} (A sample value for this element demonstrating the type of information that would typically be found in the element.)
10391     */
10392    public List<ElementDefinitionExampleComponent> getExample() { 
10393      if (this.example == null)
10394        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10395      return this.example;
10396    }
10397
10398    /**
10399     * @return Returns a reference to <code>this</code> for easy method chaining
10400     */
10401    public ElementDefinition setExample(List<ElementDefinitionExampleComponent> theExample) { 
10402      this.example = theExample;
10403      return this;
10404    }
10405
10406    public boolean hasExample() { 
10407      if (this.example == null)
10408        return false;
10409      for (ElementDefinitionExampleComponent item : this.example)
10410        if (!item.isEmpty())
10411          return true;
10412      return false;
10413    }
10414
10415    public ElementDefinitionExampleComponent addExample() { //3
10416      ElementDefinitionExampleComponent t = new ElementDefinitionExampleComponent();
10417      if (this.example == null)
10418        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10419      this.example.add(t);
10420      return t;
10421    }
10422
10423    public ElementDefinition addExample(ElementDefinitionExampleComponent t) { //3
10424      if (t == null)
10425        return this;
10426      if (this.example == null)
10427        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10428      this.example.add(t);
10429      return this;
10430    }
10431
10432    /**
10433     * @return The first repetition of repeating field {@link #example}, creating it if it does not already exist {3}
10434     */
10435    public ElementDefinitionExampleComponent getExampleFirstRep() { 
10436      if (getExample().isEmpty()) {
10437        addExample();
10438      }
10439      return getExample().get(0);
10440    }
10441
10442    /**
10443     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10444     */
10445    public DataType getMinValue() { 
10446      return this.minValue;
10447    }
10448
10449    /**
10450     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10451     */
10452    public DateType getMinValueDateType() throws FHIRException { 
10453      if (this.minValue == null)
10454        this.minValue = new DateType();
10455      if (!(this.minValue instanceof DateType))
10456        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10457      return (DateType) this.minValue;
10458    }
10459
10460    public boolean hasMinValueDateType() { 
10461      return this != null && this.minValue instanceof DateType;
10462    }
10463
10464    /**
10465     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10466     */
10467    public DateTimeType getMinValueDateTimeType() throws FHIRException { 
10468      if (this.minValue == null)
10469        this.minValue = new DateTimeType();
10470      if (!(this.minValue instanceof DateTimeType))
10471        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10472      return (DateTimeType) this.minValue;
10473    }
10474
10475    public boolean hasMinValueDateTimeType() { 
10476      return this != null && this.minValue instanceof DateTimeType;
10477    }
10478
10479    /**
10480     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10481     */
10482    public InstantType getMinValueInstantType() throws FHIRException { 
10483      if (this.minValue == null)
10484        this.minValue = new InstantType();
10485      if (!(this.minValue instanceof InstantType))
10486        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10487      return (InstantType) this.minValue;
10488    }
10489
10490    public boolean hasMinValueInstantType() { 
10491      return this != null && this.minValue instanceof InstantType;
10492    }
10493
10494    /**
10495     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10496     */
10497    public TimeType getMinValueTimeType() throws FHIRException { 
10498      if (this.minValue == null)
10499        this.minValue = new TimeType();
10500      if (!(this.minValue instanceof TimeType))
10501        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10502      return (TimeType) this.minValue;
10503    }
10504
10505    public boolean hasMinValueTimeType() { 
10506      return this != null && this.minValue instanceof TimeType;
10507    }
10508
10509    /**
10510     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10511     */
10512    public DecimalType getMinValueDecimalType() throws FHIRException { 
10513      if (this.minValue == null)
10514        this.minValue = new DecimalType();
10515      if (!(this.minValue instanceof DecimalType))
10516        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10517      return (DecimalType) this.minValue;
10518    }
10519
10520    public boolean hasMinValueDecimalType() { 
10521      return this != null && this.minValue instanceof DecimalType;
10522    }
10523
10524    /**
10525     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10526     */
10527    public IntegerType getMinValueIntegerType() throws FHIRException { 
10528      if (this.minValue == null)
10529        this.minValue = new IntegerType();
10530      if (!(this.minValue instanceof IntegerType))
10531        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10532      return (IntegerType) this.minValue;
10533    }
10534
10535    public boolean hasMinValueIntegerType() { 
10536      return this != null && this.minValue instanceof IntegerType;
10537    }
10538
10539    /**
10540     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10541     */
10542    public Integer64Type getMinValueInteger64Type() throws FHIRException { 
10543      if (this.minValue == null)
10544        this.minValue = new Integer64Type();
10545      if (!(this.minValue instanceof Integer64Type))
10546        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.minValue.getClass().getName()+" was encountered");
10547      return (Integer64Type) this.minValue;
10548    }
10549
10550    public boolean hasMinValueInteger64Type() { 
10551      return this != null && this.minValue instanceof Integer64Type;
10552    }
10553
10554    /**
10555     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10556     */
10557    public PositiveIntType getMinValuePositiveIntType() throws FHIRException { 
10558      if (this.minValue == null)
10559        this.minValue = new PositiveIntType();
10560      if (!(this.minValue instanceof PositiveIntType))
10561        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10562      return (PositiveIntType) this.minValue;
10563    }
10564
10565    public boolean hasMinValuePositiveIntType() { 
10566      return this != null && this.minValue instanceof PositiveIntType;
10567    }
10568
10569    /**
10570     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10571     */
10572    public UnsignedIntType getMinValueUnsignedIntType() throws FHIRException { 
10573      if (this.minValue == null)
10574        this.minValue = new UnsignedIntType();
10575      if (!(this.minValue instanceof UnsignedIntType))
10576        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10577      return (UnsignedIntType) this.minValue;
10578    }
10579
10580    public boolean hasMinValueUnsignedIntType() { 
10581      return this != null && this.minValue instanceof UnsignedIntType;
10582    }
10583
10584    /**
10585     * @return {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10586     */
10587    public Quantity getMinValueQuantity() throws FHIRException { 
10588      if (this.minValue == null)
10589        this.minValue = new Quantity();
10590      if (!(this.minValue instanceof Quantity))
10591        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.minValue.getClass().getName()+" was encountered");
10592      return (Quantity) this.minValue;
10593    }
10594
10595    public boolean hasMinValueQuantity() { 
10596      return this != null && this.minValue instanceof Quantity;
10597    }
10598
10599    public boolean hasMinValue() { 
10600      return this.minValue != null && !this.minValue.isEmpty();
10601    }
10602
10603    /**
10604     * @param value {@link #minValue} (The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10605     */
10606    public ElementDefinition setMinValue(DataType value) { 
10607      if (value != null && !(value instanceof DateType || value instanceof DateTimeType || value instanceof InstantType || value instanceof TimeType || value instanceof DecimalType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof PositiveIntType || value instanceof UnsignedIntType || value instanceof Quantity))
10608        throw new FHIRException("Not the right type for ElementDefinition.minValue[x]: "+value.fhirType());
10609      this.minValue = value;
10610      return this;
10611    }
10612
10613    /**
10614     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10615     */
10616    public DataType getMaxValue() { 
10617      return this.maxValue;
10618    }
10619
10620    /**
10621     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10622     */
10623    public DateType getMaxValueDateType() throws FHIRException { 
10624      if (this.maxValue == null)
10625        this.maxValue = new DateType();
10626      if (!(this.maxValue instanceof DateType))
10627        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10628      return (DateType) this.maxValue;
10629    }
10630
10631    public boolean hasMaxValueDateType() { 
10632      return this != null && this.maxValue instanceof DateType;
10633    }
10634
10635    /**
10636     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10637     */
10638    public DateTimeType getMaxValueDateTimeType() throws FHIRException { 
10639      if (this.maxValue == null)
10640        this.maxValue = new DateTimeType();
10641      if (!(this.maxValue instanceof DateTimeType))
10642        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10643      return (DateTimeType) this.maxValue;
10644    }
10645
10646    public boolean hasMaxValueDateTimeType() { 
10647      return this != null && this.maxValue instanceof DateTimeType;
10648    }
10649
10650    /**
10651     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10652     */
10653    public InstantType getMaxValueInstantType() throws FHIRException { 
10654      if (this.maxValue == null)
10655        this.maxValue = new InstantType();
10656      if (!(this.maxValue instanceof InstantType))
10657        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10658      return (InstantType) this.maxValue;
10659    }
10660
10661    public boolean hasMaxValueInstantType() { 
10662      return this != null && this.maxValue instanceof InstantType;
10663    }
10664
10665    /**
10666     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10667     */
10668    public TimeType getMaxValueTimeType() throws FHIRException { 
10669      if (this.maxValue == null)
10670        this.maxValue = new TimeType();
10671      if (!(this.maxValue instanceof TimeType))
10672        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10673      return (TimeType) this.maxValue;
10674    }
10675
10676    public boolean hasMaxValueTimeType() { 
10677      return this != null && this.maxValue instanceof TimeType;
10678    }
10679
10680    /**
10681     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10682     */
10683    public DecimalType getMaxValueDecimalType() throws FHIRException { 
10684      if (this.maxValue == null)
10685        this.maxValue = new DecimalType();
10686      if (!(this.maxValue instanceof DecimalType))
10687        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10688      return (DecimalType) this.maxValue;
10689    }
10690
10691    public boolean hasMaxValueDecimalType() { 
10692      return this != null && this.maxValue instanceof DecimalType;
10693    }
10694
10695    /**
10696     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10697     */
10698    public IntegerType getMaxValueIntegerType() throws FHIRException { 
10699      if (this.maxValue == null)
10700        this.maxValue = new IntegerType();
10701      if (!(this.maxValue instanceof IntegerType))
10702        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10703      return (IntegerType) this.maxValue;
10704    }
10705
10706    public boolean hasMaxValueIntegerType() { 
10707      return this != null && this.maxValue instanceof IntegerType;
10708    }
10709
10710    /**
10711     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10712     */
10713    public Integer64Type getMaxValueInteger64Type() throws FHIRException { 
10714      if (this.maxValue == null)
10715        this.maxValue = new Integer64Type();
10716      if (!(this.maxValue instanceof Integer64Type))
10717        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10718      return (Integer64Type) this.maxValue;
10719    }
10720
10721    public boolean hasMaxValueInteger64Type() { 
10722      return this != null && this.maxValue instanceof Integer64Type;
10723    }
10724
10725    /**
10726     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10727     */
10728    public PositiveIntType getMaxValuePositiveIntType() throws FHIRException { 
10729      if (this.maxValue == null)
10730        this.maxValue = new PositiveIntType();
10731      if (!(this.maxValue instanceof PositiveIntType))
10732        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10733      return (PositiveIntType) this.maxValue;
10734    }
10735
10736    public boolean hasMaxValuePositiveIntType() { 
10737      return this != null && this.maxValue instanceof PositiveIntType;
10738    }
10739
10740    /**
10741     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10742     */
10743    public UnsignedIntType getMaxValueUnsignedIntType() throws FHIRException { 
10744      if (this.maxValue == null)
10745        this.maxValue = new UnsignedIntType();
10746      if (!(this.maxValue instanceof UnsignedIntType))
10747        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10748      return (UnsignedIntType) this.maxValue;
10749    }
10750
10751    public boolean hasMaxValueUnsignedIntType() { 
10752      return this != null && this.maxValue instanceof UnsignedIntType;
10753    }
10754
10755    /**
10756     * @return {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10757     */
10758    public Quantity getMaxValueQuantity() throws FHIRException { 
10759      if (this.maxValue == null)
10760        this.maxValue = new Quantity();
10761      if (!(this.maxValue instanceof Quantity))
10762        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.maxValue.getClass().getName()+" was encountered");
10763      return (Quantity) this.maxValue;
10764    }
10765
10766    public boolean hasMaxValueQuantity() { 
10767      return this != null && this.maxValue instanceof Quantity;
10768    }
10769
10770    public boolean hasMaxValue() { 
10771      return this.maxValue != null && !this.maxValue.isEmpty();
10772    }
10773
10774    /**
10775     * @param value {@link #maxValue} (The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.)
10776     */
10777    public ElementDefinition setMaxValue(DataType value) { 
10778      if (value != null && !(value instanceof DateType || value instanceof DateTimeType || value instanceof InstantType || value instanceof TimeType || value instanceof DecimalType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof PositiveIntType || value instanceof UnsignedIntType || value instanceof Quantity))
10779        throw new FHIRException("Not the right type for ElementDefinition.maxValue[x]: "+value.fhirType());
10780      this.maxValue = value;
10781      return this;
10782    }
10783
10784    /**
10785     * @return {@link #maxLength} (Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).). This is the underlying object with id, value and extensions. The accessor "getMaxLength" gives direct access to the value
10786     */
10787    public IntegerType getMaxLengthElement() { 
10788      if (this.maxLength == null)
10789        if (Configuration.errorOnAutoCreate())
10790          throw new Error("Attempt to auto-create ElementDefinition.maxLength");
10791        else if (Configuration.doAutoCreate())
10792          this.maxLength = new IntegerType(); // bb
10793      return this.maxLength;
10794    }
10795
10796    public boolean hasMaxLengthElement() { 
10797      return this.maxLength != null && !this.maxLength.isEmpty();
10798    }
10799
10800    public boolean hasMaxLength() { 
10801      return this.maxLength != null && !this.maxLength.isEmpty();
10802    }
10803
10804    /**
10805     * @param value {@link #maxLength} (Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).). This is the underlying object with id, value and extensions. The accessor "getMaxLength" gives direct access to the value
10806     */
10807    public ElementDefinition setMaxLengthElement(IntegerType value) { 
10808      this.maxLength = value;
10809      return this;
10810    }
10811
10812    /**
10813     * @return Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).
10814     */
10815    public int getMaxLength() { 
10816      return this.maxLength == null || this.maxLength.isEmpty() ? 0 : this.maxLength.getValue();
10817    }
10818
10819    /**
10820     * @param value Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).
10821     */
10822    public ElementDefinition setMaxLength(int value) { 
10823        if (this.maxLength == null)
10824          this.maxLength = new IntegerType();
10825        this.maxLength.setValue(value);
10826      return this;
10827    }
10828
10829    /**
10830     * @return {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
10831     */
10832    public List<IdType> getCondition() { 
10833      if (this.condition == null)
10834        this.condition = new ArrayList<IdType>();
10835      return this.condition;
10836    }
10837
10838    /**
10839     * @return Returns a reference to <code>this</code> for easy method chaining
10840     */
10841    public ElementDefinition setCondition(List<IdType> theCondition) { 
10842      this.condition = theCondition;
10843      return this;
10844    }
10845
10846    public boolean hasCondition() { 
10847      if (this.condition == null)
10848        return false;
10849      for (IdType item : this.condition)
10850        if (!item.isEmpty())
10851          return true;
10852      return false;
10853    }
10854
10855    /**
10856     * @return {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
10857     */
10858    public IdType addConditionElement() {//2 
10859      IdType t = new IdType();
10860      if (this.condition == null)
10861        this.condition = new ArrayList<IdType>();
10862      this.condition.add(t);
10863      return t;
10864    }
10865
10866    /**
10867     * @param value {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
10868     */
10869    public ElementDefinition addCondition(String value) { //1
10870      IdType t = new IdType();
10871      t.setValue(value);
10872      if (this.condition == null)
10873        this.condition = new ArrayList<IdType>();
10874      this.condition.add(t);
10875      return this;
10876    }
10877
10878    /**
10879     * @param value {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
10880     */
10881    public boolean hasCondition(String value) { 
10882      if (this.condition == null)
10883        return false;
10884      for (IdType v : this.condition)
10885        if (v.getValue().equals(value)) // id
10886          return true;
10887      return false;
10888    }
10889
10890    /**
10891     * @return {@link #constraint} (Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.)
10892     */
10893    public List<ElementDefinitionConstraintComponent> getConstraint() { 
10894      if (this.constraint == null)
10895        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
10896      return this.constraint;
10897    }
10898
10899    /**
10900     * @return Returns a reference to <code>this</code> for easy method chaining
10901     */
10902    public ElementDefinition setConstraint(List<ElementDefinitionConstraintComponent> theConstraint) { 
10903      this.constraint = theConstraint;
10904      return this;
10905    }
10906
10907    public boolean hasConstraint() { 
10908      if (this.constraint == null)
10909        return false;
10910      for (ElementDefinitionConstraintComponent item : this.constraint)
10911        if (!item.isEmpty())
10912          return true;
10913      return false;
10914    }
10915
10916    public ElementDefinitionConstraintComponent addConstraint() { //3
10917      ElementDefinitionConstraintComponent t = new ElementDefinitionConstraintComponent();
10918      if (this.constraint == null)
10919        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
10920      this.constraint.add(t);
10921      return t;
10922    }
10923
10924    public ElementDefinition addConstraint(ElementDefinitionConstraintComponent t) { //3
10925      if (t == null)
10926        return this;
10927      if (this.constraint == null)
10928        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
10929      this.constraint.add(t);
10930      return this;
10931    }
10932
10933    /**
10934     * @return The first repetition of repeating field {@link #constraint}, creating it if it does not already exist {3}
10935     */
10936    public ElementDefinitionConstraintComponent getConstraintFirstRep() { 
10937      if (getConstraint().isEmpty()) {
10938        addConstraint();
10939      }
10940      return getConstraint().get(0);
10941    }
10942
10943    /**
10944     * @return {@link #mustHaveValue} (Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.). This is the underlying object with id, value and extensions. The accessor "getMustHaveValue" gives direct access to the value
10945     */
10946    public BooleanType getMustHaveValueElement() { 
10947      if (this.mustHaveValue == null)
10948        if (Configuration.errorOnAutoCreate())
10949          throw new Error("Attempt to auto-create ElementDefinition.mustHaveValue");
10950        else if (Configuration.doAutoCreate())
10951          this.mustHaveValue = new BooleanType(); // bb
10952      return this.mustHaveValue;
10953    }
10954
10955    public boolean hasMustHaveValueElement() { 
10956      return this.mustHaveValue != null && !this.mustHaveValue.isEmpty();
10957    }
10958
10959    public boolean hasMustHaveValue() { 
10960      return this.mustHaveValue != null && !this.mustHaveValue.isEmpty();
10961    }
10962
10963    /**
10964     * @param value {@link #mustHaveValue} (Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.). This is the underlying object with id, value and extensions. The accessor "getMustHaveValue" gives direct access to the value
10965     */
10966    public ElementDefinition setMustHaveValueElement(BooleanType value) { 
10967      this.mustHaveValue = value;
10968      return this;
10969    }
10970
10971    /**
10972     * @return Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
10973     */
10974    public boolean getMustHaveValue() { 
10975      return this.mustHaveValue == null || this.mustHaveValue.isEmpty() ? false : this.mustHaveValue.getValue();
10976    }
10977
10978    /**
10979     * @param value Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
10980     */
10981    public ElementDefinition setMustHaveValue(boolean value) { 
10982        if (this.mustHaveValue == null)
10983          this.mustHaveValue = new BooleanType();
10984        this.mustHaveValue.setValue(value);
10985      return this;
10986    }
10987
10988    /**
10989     * @return {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
10990     */
10991    public List<CanonicalType> getValueAlternatives() { 
10992      if (this.valueAlternatives == null)
10993        this.valueAlternatives = new ArrayList<CanonicalType>();
10994      return this.valueAlternatives;
10995    }
10996
10997    /**
10998     * @return Returns a reference to <code>this</code> for easy method chaining
10999     */
11000    public ElementDefinition setValueAlternatives(List<CanonicalType> theValueAlternatives) { 
11001      this.valueAlternatives = theValueAlternatives;
11002      return this;
11003    }
11004
11005    public boolean hasValueAlternatives() { 
11006      if (this.valueAlternatives == null)
11007        return false;
11008      for (CanonicalType item : this.valueAlternatives)
11009        if (!item.isEmpty())
11010          return true;
11011      return false;
11012    }
11013
11014    /**
11015     * @return {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11016     */
11017    public CanonicalType addValueAlternativesElement() {//2 
11018      CanonicalType t = new CanonicalType();
11019      if (this.valueAlternatives == null)
11020        this.valueAlternatives = new ArrayList<CanonicalType>();
11021      this.valueAlternatives.add(t);
11022      return t;
11023    }
11024
11025    /**
11026     * @param value {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11027     */
11028    public ElementDefinition addValueAlternatives(String value) { //1
11029      CanonicalType t = new CanonicalType();
11030      t.setValue(value);
11031      if (this.valueAlternatives == null)
11032        this.valueAlternatives = new ArrayList<CanonicalType>();
11033      this.valueAlternatives.add(t);
11034      return this;
11035    }
11036
11037    /**
11038     * @param value {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11039     */
11040    public boolean hasValueAlternatives(String value) { 
11041      if (this.valueAlternatives == null)
11042        return false;
11043      for (CanonicalType v : this.valueAlternatives)
11044        if (v.getValue().equals(value)) // canonical
11045          return true;
11046      return false;
11047    }
11048
11049    /**
11050     * @return {@link #mustSupport} (If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.). This is the underlying object with id, value and extensions. The accessor "getMustSupport" gives direct access to the value
11051     */
11052    public BooleanType getMustSupportElement() { 
11053      if (this.mustSupport == null)
11054        if (Configuration.errorOnAutoCreate())
11055          throw new Error("Attempt to auto-create ElementDefinition.mustSupport");
11056        else if (Configuration.doAutoCreate())
11057          this.mustSupport = new BooleanType(); // bb
11058      return this.mustSupport;
11059    }
11060
11061    public boolean hasMustSupportElement() { 
11062      return this.mustSupport != null && !this.mustSupport.isEmpty();
11063    }
11064
11065    public boolean hasMustSupport() { 
11066      return this.mustSupport != null && !this.mustSupport.isEmpty();
11067    }
11068
11069    /**
11070     * @param value {@link #mustSupport} (If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.). This is the underlying object with id, value and extensions. The accessor "getMustSupport" gives direct access to the value
11071     */
11072    public ElementDefinition setMustSupportElement(BooleanType value) { 
11073      this.mustSupport = value;
11074      return this;
11075    }
11076
11077    /**
11078     * @return If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.
11079     */
11080    public boolean getMustSupport() { 
11081      return this.mustSupport == null || this.mustSupport.isEmpty() ? false : this.mustSupport.getValue();
11082    }
11083
11084    /**
11085     * @param value If true, implementations that produce or consume resources SHALL provide "support" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.
11086     */
11087    public ElementDefinition setMustSupport(boolean value) { 
11088        if (this.mustSupport == null)
11089          this.mustSupport = new BooleanType();
11090        this.mustSupport.setValue(value);
11091      return this;
11092    }
11093
11094    /**
11095     * @return {@link #isModifier} (If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.). This is the underlying object with id, value and extensions. The accessor "getIsModifier" gives direct access to the value
11096     */
11097    public BooleanType getIsModifierElement() { 
11098      if (this.isModifier == null)
11099        if (Configuration.errorOnAutoCreate())
11100          throw new Error("Attempt to auto-create ElementDefinition.isModifier");
11101        else if (Configuration.doAutoCreate())
11102          this.isModifier = new BooleanType(); // bb
11103      return this.isModifier;
11104    }
11105
11106    public boolean hasIsModifierElement() { 
11107      return this.isModifier != null && !this.isModifier.isEmpty();
11108    }
11109
11110    public boolean hasIsModifier() { 
11111      return this.isModifier != null && !this.isModifier.isEmpty();
11112    }
11113
11114    /**
11115     * @param value {@link #isModifier} (If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.). This is the underlying object with id, value and extensions. The accessor "getIsModifier" gives direct access to the value
11116     */
11117    public ElementDefinition setIsModifierElement(BooleanType value) { 
11118      this.isModifier = value;
11119      return this;
11120    }
11121
11122    /**
11123     * @return If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.
11124     */
11125    public boolean getIsModifier() { 
11126      return this.isModifier == null || this.isModifier.isEmpty() ? false : this.isModifier.getValue();
11127    }
11128
11129    /**
11130     * @param value If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.
11131     */
11132    public ElementDefinition setIsModifier(boolean value) { 
11133        if (this.isModifier == null)
11134          this.isModifier = new BooleanType();
11135        this.isModifier.setValue(value);
11136      return this;
11137    }
11138
11139    /**
11140     * @return {@link #isModifierReason} (Explains how that element affects the interpretation of the resource or element that contains it.). This is the underlying object with id, value and extensions. The accessor "getIsModifierReason" gives direct access to the value
11141     */
11142    public StringType getIsModifierReasonElement() { 
11143      if (this.isModifierReason == null)
11144        if (Configuration.errorOnAutoCreate())
11145          throw new Error("Attempt to auto-create ElementDefinition.isModifierReason");
11146        else if (Configuration.doAutoCreate())
11147          this.isModifierReason = new StringType(); // bb
11148      return this.isModifierReason;
11149    }
11150
11151    public boolean hasIsModifierReasonElement() { 
11152      return this.isModifierReason != null && !this.isModifierReason.isEmpty();
11153    }
11154
11155    public boolean hasIsModifierReason() { 
11156      return this.isModifierReason != null && !this.isModifierReason.isEmpty();
11157    }
11158
11159    /**
11160     * @param value {@link #isModifierReason} (Explains how that element affects the interpretation of the resource or element that contains it.). This is the underlying object with id, value and extensions. The accessor "getIsModifierReason" gives direct access to the value
11161     */
11162    public ElementDefinition setIsModifierReasonElement(StringType value) { 
11163      this.isModifierReason = value;
11164      return this;
11165    }
11166
11167    /**
11168     * @return Explains how that element affects the interpretation of the resource or element that contains it.
11169     */
11170    public String getIsModifierReason() { 
11171      return this.isModifierReason == null ? null : this.isModifierReason.getValue();
11172    }
11173
11174    /**
11175     * @param value Explains how that element affects the interpretation of the resource or element that contains it.
11176     */
11177    public ElementDefinition setIsModifierReason(String value) { 
11178      if (Utilities.noString(value))
11179        this.isModifierReason = null;
11180      else {
11181        if (this.isModifierReason == null)
11182          this.isModifierReason = new StringType();
11183        this.isModifierReason.setValue(value);
11184      }
11185      return this;
11186    }
11187
11188    /**
11189     * @return {@link #isSummary} (Whether the element should be included if a client requests a search with the parameter _summary=true.). This is the underlying object with id, value and extensions. The accessor "getIsSummary" gives direct access to the value
11190     */
11191    public BooleanType getIsSummaryElement() { 
11192      if (this.isSummary == null)
11193        if (Configuration.errorOnAutoCreate())
11194          throw new Error("Attempt to auto-create ElementDefinition.isSummary");
11195        else if (Configuration.doAutoCreate())
11196          this.isSummary = new BooleanType(); // bb
11197      return this.isSummary;
11198    }
11199
11200    public boolean hasIsSummaryElement() { 
11201      return this.isSummary != null && !this.isSummary.isEmpty();
11202    }
11203
11204    public boolean hasIsSummary() { 
11205      return this.isSummary != null && !this.isSummary.isEmpty();
11206    }
11207
11208    /**
11209     * @param value {@link #isSummary} (Whether the element should be included if a client requests a search with the parameter _summary=true.). This is the underlying object with id, value and extensions. The accessor "getIsSummary" gives direct access to the value
11210     */
11211    public ElementDefinition setIsSummaryElement(BooleanType value) { 
11212      this.isSummary = value;
11213      return this;
11214    }
11215
11216    /**
11217     * @return Whether the element should be included if a client requests a search with the parameter _summary=true.
11218     */
11219    public boolean getIsSummary() { 
11220      return this.isSummary == null || this.isSummary.isEmpty() ? false : this.isSummary.getValue();
11221    }
11222
11223    /**
11224     * @param value Whether the element should be included if a client requests a search with the parameter _summary=true.
11225     */
11226    public ElementDefinition setIsSummary(boolean value) { 
11227        if (this.isSummary == null)
11228          this.isSummary = new BooleanType();
11229        this.isSummary.setValue(value);
11230      return this;
11231    }
11232
11233    /**
11234     * @return {@link #binding} (Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).)
11235     */
11236    public ElementDefinitionBindingComponent getBinding() { 
11237      if (this.binding == null)
11238        if (Configuration.errorOnAutoCreate())
11239          throw new Error("Attempt to auto-create ElementDefinition.binding");
11240        else if (Configuration.doAutoCreate())
11241          this.binding = new ElementDefinitionBindingComponent(); // cc
11242      return this.binding;
11243    }
11244
11245    public boolean hasBinding() { 
11246      return this.binding != null && !this.binding.isEmpty();
11247    }
11248
11249    /**
11250     * @param value {@link #binding} (Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).)
11251     */
11252    public ElementDefinition setBinding(ElementDefinitionBindingComponent value) { 
11253      this.binding = value;
11254      return this;
11255    }
11256
11257    /**
11258     * @return {@link #mapping} (Identifies a concept from an external specification that roughly corresponds to this element.)
11259     */
11260    public List<ElementDefinitionMappingComponent> getMapping() { 
11261      if (this.mapping == null)
11262        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11263      return this.mapping;
11264    }
11265
11266    /**
11267     * @return Returns a reference to <code>this</code> for easy method chaining
11268     */
11269    public ElementDefinition setMapping(List<ElementDefinitionMappingComponent> theMapping) { 
11270      this.mapping = theMapping;
11271      return this;
11272    }
11273
11274    public boolean hasMapping() { 
11275      if (this.mapping == null)
11276        return false;
11277      for (ElementDefinitionMappingComponent item : this.mapping)
11278        if (!item.isEmpty())
11279          return true;
11280      return false;
11281    }
11282
11283    public ElementDefinitionMappingComponent addMapping() { //3
11284      ElementDefinitionMappingComponent t = new ElementDefinitionMappingComponent();
11285      if (this.mapping == null)
11286        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11287      this.mapping.add(t);
11288      return t;
11289    }
11290
11291    public ElementDefinition addMapping(ElementDefinitionMappingComponent t) { //3
11292      if (t == null)
11293        return this;
11294      if (this.mapping == null)
11295        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11296      this.mapping.add(t);
11297      return this;
11298    }
11299
11300    /**
11301     * @return The first repetition of repeating field {@link #mapping}, creating it if it does not already exist {3}
11302     */
11303    public ElementDefinitionMappingComponent getMappingFirstRep() { 
11304      if (getMapping().isEmpty()) {
11305        addMapping();
11306      }
11307      return getMapping().get(0);
11308    }
11309
11310      protected void listChildren(List<Property> children) {
11311        super.listChildren(children);
11312        children.add(new Property("path", "string", "The path identifies the element and is expressed as a \".\"-separated list of ancestor elements, beginning with the name of the resource or extension.", 0, 1, path));
11313        children.add(new Property("representation", "code", "Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.", 0, java.lang.Integer.MAX_VALUE, representation));
11314        children.add(new Property("sliceName", "string", "The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.", 0, 1, sliceName));
11315        children.add(new Property("sliceIsConstraining", "boolean", "If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.", 0, 1, sliceIsConstraining));
11316        children.add(new Property("label", "string", "A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.", 0, 1, label));
11317        children.add(new Property("code", "Coding", "A code that has the same meaning as the element in a particular terminology.", 0, java.lang.Integer.MAX_VALUE, code));
11318        children.add(new Property("slicing", "", "Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).", 0, 1, slicing));
11319        children.add(new Property("short", "string", "A concise description of what this element means (e.g. for use in autogenerated summaries).", 0, 1, short_));
11320        children.add(new Property("definition", "markdown", "Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).", 0, 1, definition));
11321        children.add(new Property("comment", "markdown", "Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).", 0, 1, comment));
11322        children.add(new Property("requirements", "markdown", "This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.", 0, 1, requirements));
11323        children.add(new Property("alias", "string", "Identifies additional names by which this element might also be known.", 0, java.lang.Integer.MAX_VALUE, alias));
11324        children.add(new Property("min", "unsignedInt", "The minimum number of times this element SHALL appear in the instance.", 0, 1, min));
11325        children.add(new Property("max", "string", "The maximum number of times this element is permitted to appear in the instance.", 0, 1, max));
11326        children.add(new Property("base", "", "Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.", 0, 1, base));
11327        children.add(new Property("contentReference", "uri", "Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.", 0, 1, contentReference));
11328        children.add(new Property("type", "", "The data type or resource that the value of this element is permitted to be.", 0, java.lang.Integer.MAX_VALUE, type));
11329        children.add(new Property("defaultValue[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue));
11330        children.add(new Property("meaningWhenMissing", "markdown", "The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').", 0, 1, meaningWhenMissing));
11331        children.add(new Property("orderMeaning", "string", "If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.", 0, 1, orderMeaning));
11332        children.add(new Property("fixed[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed));
11333        children.add(new Property("pattern[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern));
11334        children.add(new Property("example", "", "A sample value for this element demonstrating the type of information that would typically be found in the element.", 0, java.lang.Integer.MAX_VALUE, example));
11335        children.add(new Property("minValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue));
11336        children.add(new Property("maxValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue));
11337        children.add(new Property("maxLength", "integer", "Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).", 0, 1, maxLength));
11338        children.add(new Property("condition", "id", "A reference to an invariant that may make additional statements about the cardinality or value in the instance.", 0, java.lang.Integer.MAX_VALUE, condition));
11339        children.add(new Property("constraint", "", "Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.", 0, java.lang.Integer.MAX_VALUE, constraint));
11340        children.add(new Property("mustHaveValue", "boolean", "Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.", 0, 1, mustHaveValue));
11341        children.add(new Property("valueAlternatives", "canonical(StructureDefinition)", "Specifies a list of extensions that can appear in place of a primitive value.", 0, java.lang.Integer.MAX_VALUE, valueAlternatives));
11342        children.add(new Property("mustSupport", "boolean", "If true, implementations that produce or consume resources SHALL provide \"support\" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.", 0, 1, mustSupport));
11343        children.add(new Property("isModifier", "boolean", "If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.", 0, 1, isModifier));
11344        children.add(new Property("isModifierReason", "string", "Explains how that element affects the interpretation of the resource or element that contains it.", 0, 1, isModifierReason));
11345        children.add(new Property("isSummary", "boolean", "Whether the element should be included if a client requests a search with the parameter _summary=true.", 0, 1, isSummary));
11346        children.add(new Property("binding", "", "Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).", 0, 1, binding));
11347        children.add(new Property("mapping", "", "Identifies a concept from an external specification that roughly corresponds to this element.", 0, java.lang.Integer.MAX_VALUE, mapping));
11348      }
11349
11350      @Override
11351      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
11352        switch (_hash) {
11353        case 3433509: /*path*/  return new Property("path", "string", "The path identifies the element and is expressed as a \".\"-separated list of ancestor elements, beginning with the name of the resource or extension.", 0, 1, path);
11354        case -671065907: /*representation*/  return new Property("representation", "code", "Codes that define how this element is represented in instances, when the deviation varies from the normal case. No extensions are allowed on elements with a representation of 'xmlAttr', no matter what FHIR serialization format is used.", 0, java.lang.Integer.MAX_VALUE, representation);
11355        case -825289923: /*sliceName*/  return new Property("sliceName", "string", "The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.", 0, 1, sliceName);
11356        case 333040519: /*sliceIsConstraining*/  return new Property("sliceIsConstraining", "boolean", "If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.", 0, 1, sliceIsConstraining);
11357        case 102727412: /*label*/  return new Property("label", "string", "A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.", 0, 1, label);
11358        case 3059181: /*code*/  return new Property("code", "Coding", "A code that has the same meaning as the element in a particular terminology.", 0, java.lang.Integer.MAX_VALUE, code);
11359        case -2119287345: /*slicing*/  return new Property("slicing", "", "Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).", 0, 1, slicing);
11360        case 109413500: /*short*/  return new Property("short", "string", "A concise description of what this element means (e.g. for use in autogenerated summaries).", 0, 1, short_);
11361        case -1014418093: /*definition*/  return new Property("definition", "markdown", "Provides a complete explanation of the meaning of the data element for human readability.  For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).", 0, 1, definition);
11362        case 950398559: /*comment*/  return new Property("comment", "markdown", "Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).", 0, 1, comment);
11363        case -1619874672: /*requirements*/  return new Property("requirements", "markdown", "This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.", 0, 1, requirements);
11364        case 92902992: /*alias*/  return new Property("alias", "string", "Identifies additional names by which this element might also be known.", 0, java.lang.Integer.MAX_VALUE, alias);
11365        case 108114: /*min*/  return new Property("min", "unsignedInt", "The minimum number of times this element SHALL appear in the instance.", 0, 1, min);
11366        case 107876: /*max*/  return new Property("max", "string", "The maximum number of times this element is permitted to appear in the instance.", 0, 1, max);
11367        case 3016401: /*base*/  return new Property("base", "", "Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - e.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.", 0, 1, base);
11368        case 1193747154: /*contentReference*/  return new Property("contentReference", "uri", "Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.", 0, 1, contentReference);
11369        case 3575610: /*type*/  return new Property("type", "", "The data type or resource that the value of this element is permitted to be.", 0, java.lang.Integer.MAX_VALUE, type);
11370        case 587922128: /*defaultValue[x]*/  return new Property("defaultValue[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11371        case -659125328: /*defaultValue*/  return new Property("defaultValue[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11372        case 1470297600: /*defaultValueBase64Binary*/  return new Property("defaultValue[x]", "base64Binary", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11373        case 600437336: /*defaultValueBoolean*/  return new Property("defaultValue[x]", "boolean", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11374        case 264593188: /*defaultValueCanonical*/  return new Property("defaultValue[x]", "canonical", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11375        case 1044993469: /*defaultValueCode*/  return new Property("defaultValue[x]", "code", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11376        case 1045010302: /*defaultValueDate*/  return new Property("defaultValue[x]", "date", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11377        case 1220374379: /*defaultValueDateTime*/  return new Property("defaultValue[x]", "dateTime", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11378        case 2077989249: /*defaultValueDecimal*/  return new Property("defaultValue[x]", "decimal", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11379        case -2059245333: /*defaultValueId*/  return new Property("defaultValue[x]", "id", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11380        case -1801671663: /*defaultValueInstant*/  return new Property("defaultValue[x]", "instant", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11381        case -1801189522: /*defaultValueInteger*/  return new Property("defaultValue[x]", "integer", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11382        case -71308628: /*defaultValueInteger64*/  return new Property("defaultValue[x]", "integer64", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11383        case -325436225: /*defaultValueMarkdown*/  return new Property("defaultValue[x]", "markdown", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11384        case 587910138: /*defaultValueOid*/  return new Property("defaultValue[x]", "oid", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11385        case -737344154: /*defaultValuePositiveInt*/  return new Property("defaultValue[x]", "positiveInt", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11386        case -320515103: /*defaultValueString*/  return new Property("defaultValue[x]", "string", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11387        case 1045494429: /*defaultValueTime*/  return new Property("defaultValue[x]", "time", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11388        case 539117290: /*defaultValueUnsignedInt*/  return new Property("defaultValue[x]", "unsignedInt", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11389        case 587916188: /*defaultValueUri*/  return new Property("defaultValue[x]", "uri", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11390        case 587916191: /*defaultValueUrl*/  return new Property("defaultValue[x]", "url", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11391        case 1045535627: /*defaultValueUuid*/  return new Property("defaultValue[x]", "uuid", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11392        case -611966428: /*defaultValueAddress*/  return new Property("defaultValue[x]", "Address", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11393        case 587896623: /*defaultValueAge*/  return new Property("defaultValue[x]", "Age", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11394        case -1851689217: /*defaultValueAnnotation*/  return new Property("defaultValue[x]", "Annotation", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11395        case 2034820339: /*defaultValueAttachment*/  return new Property("defaultValue[x]", "Attachment", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11396        case -410434095: /*defaultValueCodeableConcept*/  return new Property("defaultValue[x]", "CodeableConcept", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11397        case 678417524: /*defaultValueCodeableReference*/  return new Property("defaultValue[x]", "CodeableReference", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11398        case -783616198: /*defaultValueCoding*/  return new Property("defaultValue[x]", "Coding", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11399        case -344740576: /*defaultValueContactPoint*/  return new Property("defaultValue[x]", "ContactPoint", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11400        case -1964924097: /*defaultValueCount*/  return new Property("defaultValue[x]", "Count", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11401        case -283915323: /*defaultValueDistance*/  return new Property("defaultValue[x]", "Distance", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11402        case 1730579812: /*defaultValueDuration*/  return new Property("defaultValue[x]", "Duration", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11403        case -975393912: /*defaultValueHumanName*/  return new Property("defaultValue[x]", "HumanName", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11404        case -1915078535: /*defaultValueIdentifier*/  return new Property("defaultValue[x]", "Identifier", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11405        case -1955695888: /*defaultValueMoney*/  return new Property("defaultValue[x]", "Money", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11406        case -420255343: /*defaultValuePeriod*/  return new Property("defaultValue[x]", "Period", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11407        case -1857379237: /*defaultValueQuantity*/  return new Property("defaultValue[x]", "Quantity", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11408        case -1951495315: /*defaultValueRange*/  return new Property("defaultValue[x]", "Range", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11409        case -1951489477: /*defaultValueRatio*/  return new Property("defaultValue[x]", "Ratio", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11410        case 1803932610: /*defaultValueRatioRange*/  return new Property("defaultValue[x]", "RatioRange", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11411        case -1488914053: /*defaultValueReference*/  return new Property("defaultValue[x]", "Reference", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11412        case -449641228: /*defaultValueSampledData*/  return new Property("defaultValue[x]", "SampledData", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11413        case 509825768: /*defaultValueSignature*/  return new Property("defaultValue[x]", "Signature", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11414        case -302193638: /*defaultValueTiming*/  return new Property("defaultValue[x]", "Timing", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11415        case 1845473985: /*defaultValueContactDetail*/  return new Property("defaultValue[x]", "ContactDetail", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11416        case 375217257: /*defaultValueDataRequirement*/  return new Property("defaultValue[x]", "DataRequirement", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11417        case -2092097944: /*defaultValueExpression*/  return new Property("defaultValue[x]", "Expression", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11418        case -701053940: /*defaultValueParameterDefinition*/  return new Property("defaultValue[x]", "ParameterDefinition", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11419        case 412877133: /*defaultValueRelatedArtifact*/  return new Property("defaultValue[x]", "RelatedArtifact", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11420        case 1913203547: /*defaultValueTriggerDefinition*/  return new Property("defaultValue[x]", "TriggerDefinition", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11421        case -701644642: /*defaultValueUsageContext*/  return new Property("defaultValue[x]", "UsageContext", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11422        case 388885803: /*defaultValueAvailability*/  return new Property("defaultValue[x]", "Availability", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11423        case 1398098440: /*defaultValueExtendedContactDetail*/  return new Property("defaultValue[x]", "ExtendedContactDetail", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11424        case -754548089: /*defaultValueDosage*/  return new Property("defaultValue[x]", "Dosage", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11425        case 1045282261: /*defaultValueMeta*/  return new Property("defaultValue[x]", "Meta", "The value that should be used if there is no value stated in the instance (e.g. 'if not otherwise specified, the abstract is false').", 0, 1, defaultValue);
11426        case 1857257103: /*meaningWhenMissing*/  return new Property("meaningWhenMissing", "markdown", "The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').", 0, 1, meaningWhenMissing);
11427        case 1828196047: /*orderMeaning*/  return new Property("orderMeaning", "string", "If present, indicates that the order of the repeating element has meaning and describes what that meaning is.  If absent, it means that the order of the element has no meaning.", 0, 1, orderMeaning);
11428        case -391522164: /*fixed[x]*/  return new Property("fixed[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11429        case 97445748: /*fixed*/  return new Property("fixed[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11430        case -799290428: /*fixedBase64Binary*/  return new Property("fixed[x]", "base64Binary", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11431        case 520851988: /*fixedBoolean*/  return new Property("fixed[x]", "boolean", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11432        case 1092485088: /*fixedCanonical*/  return new Property("fixed[x]", "canonical", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11433        case 746991489: /*fixedCode*/  return new Property("fixed[x]", "code", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11434        case 747008322: /*fixedDate*/  return new Property("fixed[x]", "date", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11435        case -1246771409: /*fixedDateTime*/  return new Property("fixed[x]", "dateTime", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11436        case 1998403901: /*fixedDecimal*/  return new Property("fixed[x]", "decimal", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11437        case -843914321: /*fixedId*/  return new Property("fixed[x]", "id", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11438        case -1881257011: /*fixedInstant*/  return new Property("fixed[x]", "instant", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11439        case -1880774870: /*fixedInteger*/  return new Property("fixed[x]", "integer", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11440        case 756583272: /*fixedInteger64*/  return new Property("fixed[x]", "integer64", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11441        case 1502385283: /*fixedMarkdown*/  return new Property("fixed[x]", "markdown", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11442        case -391534154: /*fixedOid*/  return new Property("fixed[x]", "oid", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11443        case 297821986: /*fixedPositiveInt*/  return new Property("fixed[x]", "positiveInt", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11444        case 1062390949: /*fixedString*/  return new Property("fixed[x]", "string", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11445        case 747492449: /*fixedTime*/  return new Property("fixed[x]", "time", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11446        case 1574283430: /*fixedUnsignedInt*/  return new Property("fixed[x]", "unsignedInt", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11447        case -391528104: /*fixedUri*/  return new Property("fixed[x]", "uri", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11448        case -391528101: /*fixedUrl*/  return new Property("fixed[x]", "url", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11449        case 747533647: /*fixedUuid*/  return new Property("fixed[x]", "uuid", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11450        case -691551776: /*fixedAddress*/  return new Property("fixed[x]", "Address", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11451        case -391547669: /*fixedAge*/  return new Property("fixed[x]", "Age", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11452        case -1956844093: /*fixedAnnotation*/  return new Property("fixed[x]", "Annotation", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11453        case 1929665463: /*fixedAttachment*/  return new Property("fixed[x]", "Attachment", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11454        case 1962764685: /*fixedCodeableConcept*/  return new Property("fixed[x]", "CodeableConcept", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11455        case 694810928: /*fixedCodeableReference*/  return new Property("fixed[x]", "CodeableReference", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11456        case 599289854: /*fixedCoding*/  return new Property("fixed[x]", "Coding", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11457        case 1680638692: /*fixedContactPoint*/  return new Property("fixed[x]", "ContactPoint", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11458        case 1681916411: /*fixedCount*/  return new Property("fixed[x]", "Count", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11459        case 1543906185: /*fixedDistance*/  return new Property("fixed[x]", "Distance", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11460        case -736565976: /*fixedDuration*/  return new Property("fixed[x]", "Duration", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11461        case -147502012: /*fixedHumanName*/  return new Property("fixed[x]", "HumanName", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11462        case -2020233411: /*fixedIdentifier*/  return new Property("fixed[x]", "Identifier", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11463        case 1691144620: /*fixedMoney*/  return new Property("fixed[x]", "Money", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11464        case 962650709: /*fixedPeriod*/  return new Property("fixed[x]", "Period", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11465        case -29557729: /*fixedQuantity*/  return new Property("fixed[x]", "Quantity", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11466        case 1695345193: /*fixedRange*/  return new Property("fixed[x]", "Range", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11467        case 1695351031: /*fixedRatio*/  return new Property("fixed[x]", "Ratio", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11468        case 1698777734: /*fixedRatioRange*/  return new Property("fixed[x]", "RatioRange", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11469        case -661022153: /*fixedReference*/  return new Property("fixed[x]", "Reference", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11470        case 585524912: /*fixedSampledData*/  return new Property("fixed[x]", "SampledData", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11471        case 1337717668: /*fixedSignature*/  return new Property("fixed[x]", "Signature", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11472        case 1080712414: /*fixedTiming*/  return new Property("fixed[x]", "Timing", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11473        case 207721853: /*fixedContactDetail*/  return new Property("fixed[x]", "ContactDetail", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11474        case -1546551259: /*fixedDataRequirement*/  return new Property("fixed[x]", "DataRequirement", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11475        case 2097714476: /*fixedExpression*/  return new Property("fixed[x]", "Expression", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11476        case -2126861880: /*fixedParameterDefinition*/  return new Property("fixed[x]", "ParameterDefinition", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11477        case -1508891383: /*fixedRelatedArtifact*/  return new Property("fixed[x]", "RelatedArtifact", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11478        case 1929596951: /*fixedTriggerDefinition*/  return new Property("fixed[x]", "TriggerDefinition", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11479        case 1323734626: /*fixedUsageContext*/  return new Property("fixed[x]", "UsageContext", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11480        case -1880702225: /*fixedAvailability*/  return new Property("fixed[x]", "Availability", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11481        case 1291235524: /*fixedExtendedContactDetail*/  return new Property("fixed[x]", "ExtendedContactDetail", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11482        case 628357963: /*fixedDosage*/  return new Property("fixed[x]", "Dosage", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11483        case 747280281: /*fixedMeta*/  return new Property("fixed[x]", "Meta", "Specifies a value that SHALL be exactly the value  for this element in the instance, if present. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", 0, 1, fixed);
11484        case -885125392: /*pattern[x]*/  return new Property("pattern[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11485        case -791090288: /*pattern*/  return new Property("pattern[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11486        case 2127857120: /*patternBase64Binary*/  return new Property("pattern[x]", "base64Binary", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11487        case -1776945544: /*patternBoolean*/  return new Property("pattern[x]", "boolean", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11488        case 522246980: /*patternCanonical*/  return new Property("pattern[x]", "canonical", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11489        case -1669806691: /*patternCode*/  return new Property("pattern[x]", "code", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11490        case -1669789858: /*patternDate*/  return new Property("pattern[x]", "date", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11491        case 535949131: /*patternDateTime*/  return new Property("pattern[x]", "dateTime", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11492        case -299393631: /*patternDecimal*/  return new Property("pattern[x]", "decimal", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11493        case -28553013: /*patternId*/  return new Property("pattern[x]", "id", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11494        case 115912753: /*patternInstant*/  return new Property("pattern[x]", "instant", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11495        case 116394894: /*patternInteger*/  return new Property("pattern[x]", "integer", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11496        case 186345164: /*patternInteger64*/  return new Property("pattern[x]", "integer64", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11497        case -1009861473: /*patternMarkdown*/  return new Property("pattern[x]", "markdown", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11498        case -885137382: /*patternOid*/  return new Property("pattern[x]", "oid", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11499        case 2054814086: /*patternPositiveInt*/  return new Property("pattern[x]", "positiveInt", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11500        case 2096647105: /*patternString*/  return new Property("pattern[x]", "string", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11501        case -1669305731: /*patternTime*/  return new Property("pattern[x]", "time", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11502        case -963691766: /*patternUnsignedInt*/  return new Property("pattern[x]", "unsignedInt", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11503        case -885131332: /*patternUri*/  return new Property("pattern[x]", "uri", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11504        case -885131329: /*patternUrl*/  return new Property("pattern[x]", "url", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11505        case -1669264533: /*patternUuid*/  return new Property("pattern[x]", "uuid", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11506        case 1305617988: /*patternAddress*/  return new Property("pattern[x]", "Address", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11507        case -885150897: /*patternAge*/  return new Property("pattern[x]", "Age", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11508        case 1840611039: /*patternAnnotation*/  return new Property("pattern[x]", "Annotation", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11509        case 1432153299: /*patternAttachment*/  return new Property("pattern[x]", "Attachment", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11510        case -400610831: /*patternCodeableConcept*/  return new Property("pattern[x]", "CodeableConcept", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11511        case 1528639636: /*patternCodeableReference*/  return new Property("pattern[x]", "CodeableReference", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11512        case 1633546010: /*patternCoding*/  return new Property("pattern[x]", "Coding", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11513        case 312818944: /*patternContactPoint*/  return new Property("pattern[x]", "ContactPoint", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11514        case -224383137: /*patternCount*/  return new Property("pattern[x]", "Count", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11515        case -968340571: /*patternDistance*/  return new Property("pattern[x]", "Distance", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11516        case 1046154564: /*patternDuration*/  return new Property("pattern[x]", "Duration", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11517        case -717740120: /*patternHumanName*/  return new Property("pattern[x]", "HumanName", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11518        case 1777221721: /*patternIdentifier*/  return new Property("pattern[x]", "Identifier", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11519        case -215154928: /*patternMoney*/  return new Property("pattern[x]", "Money", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11520        case 1996906865: /*patternPeriod*/  return new Property("pattern[x]", "Period", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11521        case 1753162811: /*patternQuantity*/  return new Property("pattern[x]", "Quantity", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11522        case -210954355: /*patternRange*/  return new Property("pattern[x]", "Range", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11523        case -210948517: /*patternRatio*/  return new Property("pattern[x]", "Ratio", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11524        case 1201265570: /*patternRatioRange*/  return new Property("pattern[x]", "RatioRange", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11525        case -1231260261: /*patternReference*/  return new Property("pattern[x]", "Reference", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11526        case -1952450284: /*patternSampledData*/  return new Property("pattern[x]", "SampledData", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11527        case 767479560: /*patternSignature*/  return new Property("pattern[x]", "Signature", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11528        case 2114968570: /*patternTiming*/  return new Property("pattern[x]", "Timing", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11529        case 754982625: /*patternContactDetail*/  return new Property("pattern[x]", "ContactDetail", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11530        case 385040521: /*patternDataRequirement*/  return new Property("pattern[x]", "DataRequirement", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11531        case 1600202312: /*patternExpression*/  return new Property("pattern[x]", "Expression", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11532        case 318609452: /*patternParameterDefinition*/  return new Property("pattern[x]", "ParameterDefinition", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11533        case 422700397: /*patternRelatedArtifact*/  return new Property("pattern[x]", "RelatedArtifact", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11534        case -1531541637: /*patternTriggerDefinition*/  return new Property("pattern[x]", "TriggerDefinition", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11535        case -44085122: /*patternUsageContext*/  return new Property("pattern[x]", "UsageContext", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11536        case 1046445323: /*patternAvailability*/  return new Property("pattern[x]", "Availability", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11537        case 2042074664: /*patternExtendedContactDetail*/  return new Property("pattern[x]", "ExtendedContactDetail", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11538        case 1662614119: /*patternDosage*/  return new Property("pattern[x]", "Dosage", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11539        case -1669517899: /*patternMeta*/  return new Property("pattern[x]", "Meta", "Specifies a value that each occurrence of the element in the instance SHALL follow - that is, any value in the pattern must be found in the instance, if the element has a value. Other additional values may be found too. This is effectively constraint by example.  \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen an element within a pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value\n\nIf a pattern[x] is declared on a repeating element, the pattern applies to all repetitions.  If the desire is for a pattern to apply to only one element or a subset of elements, slicing must be used. See [Examples of Patterns](elementdefinition-examples.html#pattern-examples) for examples of pattern usage and the effect it will have.", 0, 1, pattern);
11540        case -1322970774: /*example*/  return new Property("example", "", "A sample value for this element demonstrating the type of information that would typically be found in the element.", 0, java.lang.Integer.MAX_VALUE, example);
11541        case -55301663: /*minValue[x]*/  return new Property("minValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11542        case -1376969153: /*minValue*/  return new Property("minValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11543        case -1715058035: /*minValueDate*/  return new Property("minValue[x]", "date", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11544        case 1635517178: /*minValueDateTime*/  return new Property("minValue[x]", "dateTime", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11545        case 151382690: /*minValueInstant*/  return new Property("minValue[x]", "instant", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11546        case -1714573908: /*minValueTime*/  return new Property("minValue[x]", "time", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11547        case -263923694: /*minValueDecimal*/  return new Property("minValue[x]", "decimal", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11548        case 151864831: /*minValueInteger*/  return new Property("minValue[x]", "integer", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11549        case -86783747: /*minValueInteger64*/  return new Property("minValue[x]", "integer64", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11550        case 1570935671: /*minValuePositiveInt*/  return new Property("minValue[x]", "positiveInt", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11551        case -1447570181: /*minValueUnsignedInt*/  return new Property("minValue[x]", "unsignedInt", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11552        case -1442236438: /*minValueQuantity*/  return new Property("minValue[x]", "Quantity", "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, minValue);
11553        case 622130931: /*maxValue[x]*/  return new Property("maxValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11554        case 399227501: /*maxValue*/  return new Property("maxValue[x]", "date|dateTime|instant|time|decimal|integer|integer64|positiveInt|unsignedInt|Quantity", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11555        case 2105483195: /*maxValueDate*/  return new Property("maxValue[x]", "date", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11556        case 1699385640: /*maxValueDateTime*/  return new Property("maxValue[x]", "dateTime", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11557        case 1261821620: /*maxValueInstant*/  return new Property("maxValue[x]", "instant", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11558        case 2105967322: /*maxValueTime*/  return new Property("maxValue[x]", "time", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11559        case 846515236: /*maxValueDecimal*/  return new Property("maxValue[x]", "decimal", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11560        case 1262303761: /*maxValueInteger*/  return new Property("maxValue[x]", "integer", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11561        case 1893138575: /*maxValueInteger64*/  return new Property("maxValue[x]", "integer64", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11562        case 1605774985: /*maxValuePositiveInt*/  return new Property("maxValue[x]", "positiveInt", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11563        case -1412730867: /*maxValueUnsignedInt*/  return new Property("maxValue[x]", "unsignedInt", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11564        case -1378367976: /*maxValueQuantity*/  return new Property("maxValue[x]", "Quantity", "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", 0, 1, maxValue);
11565        case -791400086: /*maxLength*/  return new Property("maxLength", "integer", "Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element. ```maxLength``` SHOULD only be used on primitive data types that have a string representation (see [http://hl7.org/fhir/StructureDefinition/structuredefinition-type-characteristics](https://build.fhir.org/ig/HL7/fhir-extensions/StructureDefinition-structuredefinition-type-characteristics.html)).", 0, 1, maxLength);
11566        case -861311717: /*condition*/  return new Property("condition", "id", "A reference to an invariant that may make additional statements about the cardinality or value in the instance.", 0, java.lang.Integer.MAX_VALUE, condition);
11567        case -190376483: /*constraint*/  return new Property("constraint", "", "Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.", 0, java.lang.Integer.MAX_VALUE, constraint);
11568        case -923694880: /*mustHaveValue*/  return new Property("mustHaveValue", "boolean", "Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.", 0, 1, mustHaveValue);
11569        case -2124672393: /*valueAlternatives*/  return new Property("valueAlternatives", "canonical(StructureDefinition)", "Specifies a list of extensions that can appear in place of a primitive value.", 0, java.lang.Integer.MAX_VALUE, valueAlternatives);
11570        case -1402857082: /*mustSupport*/  return new Property("mustSupport", "boolean", "If true, implementations that produce or consume resources SHALL provide \"support\" for the element in some meaningful way. Note that this is being phased out and replaced by obligations (see below).  If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.", 0, 1, mustSupport);
11571        case -1408783839: /*isModifier*/  return new Property("isModifier", "boolean", "If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system. When used on the root element in an extension definition, this indicates whether or not the extension is a modifier extension.", 0, 1, isModifier);
11572        case -1854387259: /*isModifierReason*/  return new Property("isModifierReason", "string", "Explains how that element affects the interpretation of the resource or element that contains it.", 0, 1, isModifierReason);
11573        case 1857548060: /*isSummary*/  return new Property("isSummary", "boolean", "Whether the element should be included if a client requests a search with the parameter _summary=true.", 0, 1, isSummary);
11574        case -108220795: /*binding*/  return new Property("binding", "", "Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).", 0, 1, binding);
11575        case 837556430: /*mapping*/  return new Property("mapping", "", "Identifies a concept from an external specification that roughly corresponds to this element.", 0, java.lang.Integer.MAX_VALUE, mapping);
11576        default: return super.getNamedProperty(_hash, _name, _checkValid);
11577        }
11578
11579      }
11580
11581      @Override
11582      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
11583        switch (hash) {
11584        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
11585        case -671065907: /*representation*/ return this.representation == null ? new Base[0] : this.representation.toArray(new Base[this.representation.size()]); // Enumeration<PropertyRepresentation>
11586        case -825289923: /*sliceName*/ return this.sliceName == null ? new Base[0] : new Base[] {this.sliceName}; // StringType
11587        case 333040519: /*sliceIsConstraining*/ return this.sliceIsConstraining == null ? new Base[0] : new Base[] {this.sliceIsConstraining}; // BooleanType
11588        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
11589        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // Coding
11590        case -2119287345: /*slicing*/ return this.slicing == null ? new Base[0] : new Base[] {this.slicing}; // ElementDefinitionSlicingComponent
11591        case 109413500: /*short*/ return this.short_ == null ? new Base[0] : new Base[] {this.short_}; // StringType
11592        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : new Base[] {this.definition}; // MarkdownType
11593        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
11594        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // MarkdownType
11595        case 92902992: /*alias*/ return this.alias == null ? new Base[0] : this.alias.toArray(new Base[this.alias.size()]); // StringType
11596        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // UnsignedIntType
11597        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
11598        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // ElementDefinitionBaseComponent
11599        case 1193747154: /*contentReference*/ return this.contentReference == null ? new Base[0] : new Base[] {this.contentReference}; // UriType
11600        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // TypeRefComponent
11601        case -659125328: /*defaultValue*/ return this.defaultValue == null ? new Base[0] : new Base[] {this.defaultValue}; // DataType
11602        case 1857257103: /*meaningWhenMissing*/ return this.meaningWhenMissing == null ? new Base[0] : new Base[] {this.meaningWhenMissing}; // MarkdownType
11603        case 1828196047: /*orderMeaning*/ return this.orderMeaning == null ? new Base[0] : new Base[] {this.orderMeaning}; // StringType
11604        case 97445748: /*fixed*/ return this.fixed == null ? new Base[0] : new Base[] {this.fixed}; // DataType
11605        case -791090288: /*pattern*/ return this.pattern == null ? new Base[0] : new Base[] {this.pattern}; // DataType
11606        case -1322970774: /*example*/ return this.example == null ? new Base[0] : this.example.toArray(new Base[this.example.size()]); // ElementDefinitionExampleComponent
11607        case -1376969153: /*minValue*/ return this.minValue == null ? new Base[0] : new Base[] {this.minValue}; // DataType
11608        case 399227501: /*maxValue*/ return this.maxValue == null ? new Base[0] : new Base[] {this.maxValue}; // DataType
11609        case -791400086: /*maxLength*/ return this.maxLength == null ? new Base[0] : new Base[] {this.maxLength}; // IntegerType
11610        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // IdType
11611        case -190376483: /*constraint*/ return this.constraint == null ? new Base[0] : this.constraint.toArray(new Base[this.constraint.size()]); // ElementDefinitionConstraintComponent
11612        case -923694880: /*mustHaveValue*/ return this.mustHaveValue == null ? new Base[0] : new Base[] {this.mustHaveValue}; // BooleanType
11613        case -2124672393: /*valueAlternatives*/ return this.valueAlternatives == null ? new Base[0] : this.valueAlternatives.toArray(new Base[this.valueAlternatives.size()]); // CanonicalType
11614        case -1402857082: /*mustSupport*/ return this.mustSupport == null ? new Base[0] : new Base[] {this.mustSupport}; // BooleanType
11615        case -1408783839: /*isModifier*/ return this.isModifier == null ? new Base[0] : new Base[] {this.isModifier}; // BooleanType
11616        case -1854387259: /*isModifierReason*/ return this.isModifierReason == null ? new Base[0] : new Base[] {this.isModifierReason}; // StringType
11617        case 1857548060: /*isSummary*/ return this.isSummary == null ? new Base[0] : new Base[] {this.isSummary}; // BooleanType
11618        case -108220795: /*binding*/ return this.binding == null ? new Base[0] : new Base[] {this.binding}; // ElementDefinitionBindingComponent
11619        case 837556430: /*mapping*/ return this.mapping == null ? new Base[0] : this.mapping.toArray(new Base[this.mapping.size()]); // ElementDefinitionMappingComponent
11620        default: return super.getProperty(hash, name, checkValid);
11621        }
11622
11623      }
11624
11625      @Override
11626      public Base setProperty(int hash, String name, Base value) throws FHIRException {
11627        switch (hash) {
11628        case 3433509: // path
11629          this.path = TypeConvertor.castToString(value); // StringType
11630          return value;
11631        case -671065907: // representation
11632          value = new PropertyRepresentationEnumFactory().fromType(TypeConvertor.castToCode(value));
11633          this.getRepresentation().add((Enumeration) value); // Enumeration<PropertyRepresentation>
11634          return value;
11635        case -825289923: // sliceName
11636          this.sliceName = TypeConvertor.castToString(value); // StringType
11637          return value;
11638        case 333040519: // sliceIsConstraining
11639          this.sliceIsConstraining = TypeConvertor.castToBoolean(value); // BooleanType
11640          return value;
11641        case 102727412: // label
11642          this.label = TypeConvertor.castToString(value); // StringType
11643          return value;
11644        case 3059181: // code
11645          this.getCode().add(TypeConvertor.castToCoding(value)); // Coding
11646          return value;
11647        case -2119287345: // slicing
11648          this.slicing = (ElementDefinitionSlicingComponent) value; // ElementDefinitionSlicingComponent
11649          return value;
11650        case 109413500: // short
11651          this.short_ = TypeConvertor.castToString(value); // StringType
11652          return value;
11653        case -1014418093: // definition
11654          this.definition = TypeConvertor.castToMarkdown(value); // MarkdownType
11655          return value;
11656        case 950398559: // comment
11657          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
11658          return value;
11659        case -1619874672: // requirements
11660          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
11661          return value;
11662        case 92902992: // alias
11663          this.getAlias().add(TypeConvertor.castToString(value)); // StringType
11664          return value;
11665        case 108114: // min
11666          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
11667          return value;
11668        case 107876: // max
11669          this.max = TypeConvertor.castToString(value); // StringType
11670          return value;
11671        case 3016401: // base
11672          this.base = (ElementDefinitionBaseComponent) value; // ElementDefinitionBaseComponent
11673          return value;
11674        case 1193747154: // contentReference
11675          this.contentReference = TypeConvertor.castToUri(value); // UriType
11676          return value;
11677        case 3575610: // type
11678          this.getType().add((TypeRefComponent) value); // TypeRefComponent
11679          return value;
11680        case -659125328: // defaultValue
11681          this.defaultValue = TypeConvertor.castToType(value); // DataType
11682          return value;
11683        case 1857257103: // meaningWhenMissing
11684          this.meaningWhenMissing = TypeConvertor.castToMarkdown(value); // MarkdownType
11685          return value;
11686        case 1828196047: // orderMeaning
11687          this.orderMeaning = TypeConvertor.castToString(value); // StringType
11688          return value;
11689        case 97445748: // fixed
11690          this.fixed = TypeConvertor.castToType(value); // DataType
11691          return value;
11692        case -791090288: // pattern
11693          this.pattern = TypeConvertor.castToType(value); // DataType
11694          return value;
11695        case -1322970774: // example
11696          this.getExample().add((ElementDefinitionExampleComponent) value); // ElementDefinitionExampleComponent
11697          return value;
11698        case -1376969153: // minValue
11699          this.minValue = TypeConvertor.castToType(value); // DataType
11700          return value;
11701        case 399227501: // maxValue
11702          this.maxValue = TypeConvertor.castToType(value); // DataType
11703          return value;
11704        case -791400086: // maxLength
11705          this.maxLength = TypeConvertor.castToInteger(value); // IntegerType
11706          return value;
11707        case -861311717: // condition
11708          this.getCondition().add(TypeConvertor.castToId(value)); // IdType
11709          return value;
11710        case -190376483: // constraint
11711          this.getConstraint().add((ElementDefinitionConstraintComponent) value); // ElementDefinitionConstraintComponent
11712          return value;
11713        case -923694880: // mustHaveValue
11714          this.mustHaveValue = TypeConvertor.castToBoolean(value); // BooleanType
11715          return value;
11716        case -2124672393: // valueAlternatives
11717          this.getValueAlternatives().add(TypeConvertor.castToCanonical(value)); // CanonicalType
11718          return value;
11719        case -1402857082: // mustSupport
11720          this.mustSupport = TypeConvertor.castToBoolean(value); // BooleanType
11721          return value;
11722        case -1408783839: // isModifier
11723          this.isModifier = TypeConvertor.castToBoolean(value); // BooleanType
11724          return value;
11725        case -1854387259: // isModifierReason
11726          this.isModifierReason = TypeConvertor.castToString(value); // StringType
11727          return value;
11728        case 1857548060: // isSummary
11729          this.isSummary = TypeConvertor.castToBoolean(value); // BooleanType
11730          return value;
11731        case -108220795: // binding
11732          this.binding = (ElementDefinitionBindingComponent) value; // ElementDefinitionBindingComponent
11733          return value;
11734        case 837556430: // mapping
11735          this.getMapping().add((ElementDefinitionMappingComponent) value); // ElementDefinitionMappingComponent
11736          return value;
11737        default: return super.setProperty(hash, name, value);
11738        }
11739
11740      }
11741
11742      @Override
11743      public Base setProperty(String name, Base value) throws FHIRException {
11744        if (name.equals("path")) {
11745          this.path = TypeConvertor.castToString(value); // StringType
11746        } else if (name.equals("representation")) {
11747          value = new PropertyRepresentationEnumFactory().fromType(TypeConvertor.castToCode(value));
11748          this.getRepresentation().add((Enumeration) value);
11749        } else if (name.equals("sliceName")) {
11750          this.sliceName = TypeConvertor.castToString(value); // StringType
11751        } else if (name.equals("sliceIsConstraining")) {
11752          this.sliceIsConstraining = TypeConvertor.castToBoolean(value); // BooleanType
11753        } else if (name.equals("label")) {
11754          this.label = TypeConvertor.castToString(value); // StringType
11755        } else if (name.equals("code")) {
11756          this.getCode().add(TypeConvertor.castToCoding(value));
11757        } else if (name.equals("slicing")) {
11758          this.slicing = (ElementDefinitionSlicingComponent) value; // ElementDefinitionSlicingComponent
11759        } else if (name.equals("short")) {
11760          this.short_ = TypeConvertor.castToString(value); // StringType
11761        } else if (name.equals("definition")) {
11762          this.definition = TypeConvertor.castToMarkdown(value); // MarkdownType
11763        } else if (name.equals("comment")) {
11764          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
11765        } else if (name.equals("requirements")) {
11766          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
11767        } else if (name.equals("alias")) {
11768          this.getAlias().add(TypeConvertor.castToString(value));
11769        } else if (name.equals("min")) {
11770          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
11771        } else if (name.equals("max")) {
11772          this.max = TypeConvertor.castToString(value); // StringType
11773        } else if (name.equals("base")) {
11774          this.base = (ElementDefinitionBaseComponent) value; // ElementDefinitionBaseComponent
11775        } else if (name.equals("contentReference")) {
11776          this.contentReference = TypeConvertor.castToUri(value); // UriType
11777        } else if (name.equals("type")) {
11778          this.getType().add((TypeRefComponent) value);
11779        } else if (name.equals("defaultValue[x]")) {
11780          this.defaultValue = TypeConvertor.castToType(value); // DataType
11781        } else if (name.equals("meaningWhenMissing")) {
11782          this.meaningWhenMissing = TypeConvertor.castToMarkdown(value); // MarkdownType
11783        } else if (name.equals("orderMeaning")) {
11784          this.orderMeaning = TypeConvertor.castToString(value); // StringType
11785        } else if (name.equals("fixed[x]")) {
11786          this.fixed = TypeConvertor.castToType(value); // DataType
11787        } else if (name.equals("pattern[x]")) {
11788          this.pattern = TypeConvertor.castToType(value); // DataType
11789        } else if (name.equals("example")) {
11790          this.getExample().add((ElementDefinitionExampleComponent) value);
11791        } else if (name.equals("minValue[x]")) {
11792          this.minValue = TypeConvertor.castToType(value); // DataType
11793        } else if (name.equals("maxValue[x]")) {
11794          this.maxValue = TypeConvertor.castToType(value); // DataType
11795        } else if (name.equals("maxLength")) {
11796          this.maxLength = TypeConvertor.castToInteger(value); // IntegerType
11797        } else if (name.equals("condition")) {
11798          this.getCondition().add(TypeConvertor.castToId(value));
11799        } else if (name.equals("constraint")) {
11800          this.getConstraint().add((ElementDefinitionConstraintComponent) value);
11801        } else if (name.equals("mustHaveValue")) {
11802          this.mustHaveValue = TypeConvertor.castToBoolean(value); // BooleanType
11803        } else if (name.equals("valueAlternatives")) {
11804          this.getValueAlternatives().add(TypeConvertor.castToCanonical(value));
11805        } else if (name.equals("mustSupport")) {
11806          this.mustSupport = TypeConvertor.castToBoolean(value); // BooleanType
11807        } else if (name.equals("isModifier")) {
11808          this.isModifier = TypeConvertor.castToBoolean(value); // BooleanType
11809        } else if (name.equals("isModifierReason")) {
11810          this.isModifierReason = TypeConvertor.castToString(value); // StringType
11811        } else if (name.equals("isSummary")) {
11812          this.isSummary = TypeConvertor.castToBoolean(value); // BooleanType
11813        } else if (name.equals("binding")) {
11814          this.binding = (ElementDefinitionBindingComponent) value; // ElementDefinitionBindingComponent
11815        } else if (name.equals("mapping")) {
11816          this.getMapping().add((ElementDefinitionMappingComponent) value);
11817        } else
11818          return super.setProperty(name, value);
11819        return value;
11820      }
11821
11822  @Override
11823  public void removeChild(String name, Base value) throws FHIRException {
11824        if (name.equals("path")) {
11825          this.path = null;
11826        } else if (name.equals("representation")) {
11827          value = new PropertyRepresentationEnumFactory().fromType(TypeConvertor.castToCode(value));
11828          this.getRepresentation().remove((Enumeration) value);
11829        } else if (name.equals("sliceName")) {
11830          this.sliceName = null;
11831        } else if (name.equals("sliceIsConstraining")) {
11832          this.sliceIsConstraining = null;
11833        } else if (name.equals("label")) {
11834          this.label = null;
11835        } else if (name.equals("code")) {
11836          this.getCode().remove(value);
11837        } else if (name.equals("slicing")) {
11838          this.slicing = (ElementDefinitionSlicingComponent) value; // ElementDefinitionSlicingComponent
11839        } else if (name.equals("short")) {
11840          this.short_ = null;
11841        } else if (name.equals("definition")) {
11842          this.definition = null;
11843        } else if (name.equals("comment")) {
11844          this.comment = null;
11845        } else if (name.equals("requirements")) {
11846          this.requirements = null;
11847        } else if (name.equals("alias")) {
11848          this.getAlias().remove(value);
11849        } else if (name.equals("min")) {
11850          this.min = null;
11851        } else if (name.equals("max")) {
11852          this.max = null;
11853        } else if (name.equals("base")) {
11854          this.base = (ElementDefinitionBaseComponent) value; // ElementDefinitionBaseComponent
11855        } else if (name.equals("contentReference")) {
11856          this.contentReference = null;
11857        } else if (name.equals("type")) {
11858          this.getType().remove((TypeRefComponent) value);
11859        } else if (name.equals("defaultValue[x]")) {
11860          this.defaultValue = null;
11861        } else if (name.equals("meaningWhenMissing")) {
11862          this.meaningWhenMissing = null;
11863        } else if (name.equals("orderMeaning")) {
11864          this.orderMeaning = null;
11865        } else if (name.equals("fixed[x]")) {
11866          this.fixed = null;
11867        } else if (name.equals("pattern[x]")) {
11868          this.pattern = null;
11869        } else if (name.equals("example")) {
11870          this.getExample().remove((ElementDefinitionExampleComponent) value);
11871        } else if (name.equals("minValue[x]")) {
11872          this.minValue = null;
11873        } else if (name.equals("maxValue[x]")) {
11874          this.maxValue = null;
11875        } else if (name.equals("maxLength")) {
11876          this.maxLength = null;
11877        } else if (name.equals("condition")) {
11878          this.getCondition().remove(value);
11879        } else if (name.equals("constraint")) {
11880          this.getConstraint().remove((ElementDefinitionConstraintComponent) value);
11881        } else if (name.equals("mustHaveValue")) {
11882          this.mustHaveValue = null;
11883        } else if (name.equals("valueAlternatives")) {
11884          this.getValueAlternatives().remove(value);
11885        } else if (name.equals("mustSupport")) {
11886          this.mustSupport = null;
11887        } else if (name.equals("isModifier")) {
11888          this.isModifier = null;
11889        } else if (name.equals("isModifierReason")) {
11890          this.isModifierReason = null;
11891        } else if (name.equals("isSummary")) {
11892          this.isSummary = null;
11893        } else if (name.equals("binding")) {
11894          this.binding = (ElementDefinitionBindingComponent) value; // ElementDefinitionBindingComponent
11895        } else if (name.equals("mapping")) {
11896          this.getMapping().remove((ElementDefinitionMappingComponent) value);
11897        } else
11898          super.removeChild(name, value);
11899        
11900      }
11901
11902      @Override
11903      public Base makeProperty(int hash, String name) throws FHIRException {
11904        switch (hash) {
11905        case 3433509:  return getPathElement();
11906        case -671065907:  return addRepresentationElement();
11907        case -825289923:  return getSliceNameElement();
11908        case 333040519:  return getSliceIsConstrainingElement();
11909        case 102727412:  return getLabelElement();
11910        case 3059181:  return addCode(); 
11911        case -2119287345:  return getSlicing();
11912        case 109413500:  return getShortElement();
11913        case -1014418093:  return getDefinitionElement();
11914        case 950398559:  return getCommentElement();
11915        case -1619874672:  return getRequirementsElement();
11916        case 92902992:  return addAliasElement();
11917        case 108114:  return getMinElement();
11918        case 107876:  return getMaxElement();
11919        case 3016401:  return getBase();
11920        case 1193747154:  return getContentReferenceElement();
11921        case 3575610:  return addType(); 
11922        case 587922128:  return getDefaultValue();
11923        case -659125328:  return getDefaultValue();
11924        case 1857257103:  return getMeaningWhenMissingElement();
11925        case 1828196047:  return getOrderMeaningElement();
11926        case -391522164:  return getFixed();
11927        case 97445748:  return getFixed();
11928        case -885125392:  return getPattern();
11929        case -791090288:  return getPattern();
11930        case -1322970774:  return addExample(); 
11931        case -55301663:  return getMinValue();
11932        case -1376969153:  return getMinValue();
11933        case 622130931:  return getMaxValue();
11934        case 399227501:  return getMaxValue();
11935        case -791400086:  return getMaxLengthElement();
11936        case -861311717:  return addConditionElement();
11937        case -190376483:  return addConstraint(); 
11938        case -923694880:  return getMustHaveValueElement();
11939        case -2124672393:  return addValueAlternativesElement();
11940        case -1402857082:  return getMustSupportElement();
11941        case -1408783839:  return getIsModifierElement();
11942        case -1854387259:  return getIsModifierReasonElement();
11943        case 1857548060:  return getIsSummaryElement();
11944        case -108220795:  return getBinding();
11945        case 837556430:  return addMapping(); 
11946        default: return super.makeProperty(hash, name);
11947        }
11948
11949      }
11950
11951      @Override
11952      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
11953        switch (hash) {
11954        case 3433509: /*path*/ return new String[] {"string"};
11955        case -671065907: /*representation*/ return new String[] {"code"};
11956        case -825289923: /*sliceName*/ return new String[] {"string"};
11957        case 333040519: /*sliceIsConstraining*/ return new String[] {"boolean"};
11958        case 102727412: /*label*/ return new String[] {"string"};
11959        case 3059181: /*code*/ return new String[] {"Coding"};
11960        case -2119287345: /*slicing*/ return new String[] {};
11961        case 109413500: /*short*/ return new String[] {"string"};
11962        case -1014418093: /*definition*/ return new String[] {"markdown"};
11963        case 950398559: /*comment*/ return new String[] {"markdown"};
11964        case -1619874672: /*requirements*/ return new String[] {"markdown"};
11965        case 92902992: /*alias*/ return new String[] {"string"};
11966        case 108114: /*min*/ return new String[] {"unsignedInt"};
11967        case 107876: /*max*/ return new String[] {"string"};
11968        case 3016401: /*base*/ return new String[] {};
11969        case 1193747154: /*contentReference*/ return new String[] {"uri"};
11970        case 3575610: /*type*/ return new String[] {};
11971        case -659125328: /*defaultValue*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
11972        case 1857257103: /*meaningWhenMissing*/ return new String[] {"markdown"};
11973        case 1828196047: /*orderMeaning*/ return new String[] {"string"};
11974        case 97445748: /*fixed*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
11975        case -791090288: /*pattern*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
11976        case -1322970774: /*example*/ return new String[] {};
11977        case -1376969153: /*minValue*/ return new String[] {"date", "dateTime", "instant", "time", "decimal", "integer", "integer64", "positiveInt", "unsignedInt", "Quantity"};
11978        case 399227501: /*maxValue*/ return new String[] {"date", "dateTime", "instant", "time", "decimal", "integer", "integer64", "positiveInt", "unsignedInt", "Quantity"};
11979        case -791400086: /*maxLength*/ return new String[] {"integer"};
11980        case -861311717: /*condition*/ return new String[] {"id"};
11981        case -190376483: /*constraint*/ return new String[] {};
11982        case -923694880: /*mustHaveValue*/ return new String[] {"boolean"};
11983        case -2124672393: /*valueAlternatives*/ return new String[] {"canonical"};
11984        case -1402857082: /*mustSupport*/ return new String[] {"boolean"};
11985        case -1408783839: /*isModifier*/ return new String[] {"boolean"};
11986        case -1854387259: /*isModifierReason*/ return new String[] {"string"};
11987        case 1857548060: /*isSummary*/ return new String[] {"boolean"};
11988        case -108220795: /*binding*/ return new String[] {};
11989        case 837556430: /*mapping*/ return new String[] {};
11990        default: return super.getTypesForProperty(hash, name);
11991        }
11992
11993      }
11994
11995      @Override
11996      public Base addChild(String name) throws FHIRException {
11997        if (name.equals("path")) {
11998          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.path");
11999        }
12000        else if (name.equals("representation")) {
12001          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.representation");
12002        }
12003        else if (name.equals("sliceName")) {
12004          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.sliceName");
12005        }
12006        else if (name.equals("sliceIsConstraining")) {
12007          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.sliceIsConstraining");
12008        }
12009        else if (name.equals("label")) {
12010          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.label");
12011        }
12012        else if (name.equals("code")) {
12013          return addCode();
12014        }
12015        else if (name.equals("slicing")) {
12016          this.slicing = new ElementDefinitionSlicingComponent();
12017          return this.slicing;
12018        }
12019        else if (name.equals("short")) {
12020          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.short");
12021        }
12022        else if (name.equals("definition")) {
12023          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.definition");
12024        }
12025        else if (name.equals("comment")) {
12026          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.comment");
12027        }
12028        else if (name.equals("requirements")) {
12029          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.requirements");
12030        }
12031        else if (name.equals("alias")) {
12032          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.alias");
12033        }
12034        else if (name.equals("min")) {
12035          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.min");
12036        }
12037        else if (name.equals("max")) {
12038          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.max");
12039        }
12040        else if (name.equals("base")) {
12041          this.base = new ElementDefinitionBaseComponent();
12042          return this.base;
12043        }
12044        else if (name.equals("contentReference")) {
12045          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.contentReference");
12046        }
12047        else if (name.equals("type")) {
12048          return addType();
12049        }
12050        else if (name.equals("defaultValueBase64Binary")) {
12051          this.defaultValue = new Base64BinaryType();
12052          return this.defaultValue;
12053        }
12054        else if (name.equals("defaultValueBoolean")) {
12055          this.defaultValue = new BooleanType();
12056          return this.defaultValue;
12057        }
12058        else if (name.equals("defaultValueCanonical")) {
12059          this.defaultValue = new CanonicalType();
12060          return this.defaultValue;
12061        }
12062        else if (name.equals("defaultValueCode")) {
12063          this.defaultValue = new CodeType();
12064          return this.defaultValue;
12065        }
12066        else if (name.equals("defaultValueDate")) {
12067          this.defaultValue = new DateType();
12068          return this.defaultValue;
12069        }
12070        else if (name.equals("defaultValueDateTime")) {
12071          this.defaultValue = new DateTimeType();
12072          return this.defaultValue;
12073        }
12074        else if (name.equals("defaultValueDecimal")) {
12075          this.defaultValue = new DecimalType();
12076          return this.defaultValue;
12077        }
12078        else if (name.equals("defaultValueId")) {
12079          this.defaultValue = new IdType();
12080          return this.defaultValue;
12081        }
12082        else if (name.equals("defaultValueInstant")) {
12083          this.defaultValue = new InstantType();
12084          return this.defaultValue;
12085        }
12086        else if (name.equals("defaultValueInteger")) {
12087          this.defaultValue = new IntegerType();
12088          return this.defaultValue;
12089        }
12090        else if (name.equals("defaultValueInteger64")) {
12091          this.defaultValue = new Integer64Type();
12092          return this.defaultValue;
12093        }
12094        else if (name.equals("defaultValueMarkdown")) {
12095          this.defaultValue = new MarkdownType();
12096          return this.defaultValue;
12097        }
12098        else if (name.equals("defaultValueOid")) {
12099          this.defaultValue = new OidType();
12100          return this.defaultValue;
12101        }
12102        else if (name.equals("defaultValuePositiveInt")) {
12103          this.defaultValue = new PositiveIntType();
12104          return this.defaultValue;
12105        }
12106        else if (name.equals("defaultValueString")) {
12107          this.defaultValue = new StringType();
12108          return this.defaultValue;
12109        }
12110        else if (name.equals("defaultValueTime")) {
12111          this.defaultValue = new TimeType();
12112          return this.defaultValue;
12113        }
12114        else if (name.equals("defaultValueUnsignedInt")) {
12115          this.defaultValue = new UnsignedIntType();
12116          return this.defaultValue;
12117        }
12118        else if (name.equals("defaultValueUri")) {
12119          this.defaultValue = new UriType();
12120          return this.defaultValue;
12121        }
12122        else if (name.equals("defaultValueUrl")) {
12123          this.defaultValue = new UrlType();
12124          return this.defaultValue;
12125        }
12126        else if (name.equals("defaultValueUuid")) {
12127          this.defaultValue = new UuidType();
12128          return this.defaultValue;
12129        }
12130        else if (name.equals("defaultValueAddress")) {
12131          this.defaultValue = new Address();
12132          return this.defaultValue;
12133        }
12134        else if (name.equals("defaultValueAge")) {
12135          this.defaultValue = new Age();
12136          return this.defaultValue;
12137        }
12138        else if (name.equals("defaultValueAnnotation")) {
12139          this.defaultValue = new Annotation();
12140          return this.defaultValue;
12141        }
12142        else if (name.equals("defaultValueAttachment")) {
12143          this.defaultValue = new Attachment();
12144          return this.defaultValue;
12145        }
12146        else if (name.equals("defaultValueCodeableConcept")) {
12147          this.defaultValue = new CodeableConcept();
12148          return this.defaultValue;
12149        }
12150        else if (name.equals("defaultValueCodeableReference")) {
12151          this.defaultValue = new CodeableReference();
12152          return this.defaultValue;
12153        }
12154        else if (name.equals("defaultValueCoding")) {
12155          this.defaultValue = new Coding();
12156          return this.defaultValue;
12157        }
12158        else if (name.equals("defaultValueContactPoint")) {
12159          this.defaultValue = new ContactPoint();
12160          return this.defaultValue;
12161        }
12162        else if (name.equals("defaultValueCount")) {
12163          this.defaultValue = new Count();
12164          return this.defaultValue;
12165        }
12166        else if (name.equals("defaultValueDistance")) {
12167          this.defaultValue = new Distance();
12168          return this.defaultValue;
12169        }
12170        else if (name.equals("defaultValueDuration")) {
12171          this.defaultValue = new Duration();
12172          return this.defaultValue;
12173        }
12174        else if (name.equals("defaultValueHumanName")) {
12175          this.defaultValue = new HumanName();
12176          return this.defaultValue;
12177        }
12178        else if (name.equals("defaultValueIdentifier")) {
12179          this.defaultValue = new Identifier();
12180          return this.defaultValue;
12181        }
12182        else if (name.equals("defaultValueMoney")) {
12183          this.defaultValue = new Money();
12184          return this.defaultValue;
12185        }
12186        else if (name.equals("defaultValuePeriod")) {
12187          this.defaultValue = new Period();
12188          return this.defaultValue;
12189        }
12190        else if (name.equals("defaultValueQuantity")) {
12191          this.defaultValue = new Quantity();
12192          return this.defaultValue;
12193        }
12194        else if (name.equals("defaultValueRange")) {
12195          this.defaultValue = new Range();
12196          return this.defaultValue;
12197        }
12198        else if (name.equals("defaultValueRatio")) {
12199          this.defaultValue = new Ratio();
12200          return this.defaultValue;
12201        }
12202        else if (name.equals("defaultValueRatioRange")) {
12203          this.defaultValue = new RatioRange();
12204          return this.defaultValue;
12205        }
12206        else if (name.equals("defaultValueReference")) {
12207          this.defaultValue = new Reference();
12208          return this.defaultValue;
12209        }
12210        else if (name.equals("defaultValueSampledData")) {
12211          this.defaultValue = new SampledData();
12212          return this.defaultValue;
12213        }
12214        else if (name.equals("defaultValueSignature")) {
12215          this.defaultValue = new Signature();
12216          return this.defaultValue;
12217        }
12218        else if (name.equals("defaultValueTiming")) {
12219          this.defaultValue = new Timing();
12220          return this.defaultValue;
12221        }
12222        else if (name.equals("defaultValueContactDetail")) {
12223          this.defaultValue = new ContactDetail();
12224          return this.defaultValue;
12225        }
12226        else if (name.equals("defaultValueDataRequirement")) {
12227          this.defaultValue = new DataRequirement();
12228          return this.defaultValue;
12229        }
12230        else if (name.equals("defaultValueExpression")) {
12231          this.defaultValue = new Expression();
12232          return this.defaultValue;
12233        }
12234        else if (name.equals("defaultValueParameterDefinition")) {
12235          this.defaultValue = new ParameterDefinition();
12236          return this.defaultValue;
12237        }
12238        else if (name.equals("defaultValueRelatedArtifact")) {
12239          this.defaultValue = new RelatedArtifact();
12240          return this.defaultValue;
12241        }
12242        else if (name.equals("defaultValueTriggerDefinition")) {
12243          this.defaultValue = new TriggerDefinition();
12244          return this.defaultValue;
12245        }
12246        else if (name.equals("defaultValueUsageContext")) {
12247          this.defaultValue = new UsageContext();
12248          return this.defaultValue;
12249        }
12250        else if (name.equals("defaultValueAvailability")) {
12251          this.defaultValue = new Availability();
12252          return this.defaultValue;
12253        }
12254        else if (name.equals("defaultValueExtendedContactDetail")) {
12255          this.defaultValue = new ExtendedContactDetail();
12256          return this.defaultValue;
12257        }
12258        else if (name.equals("defaultValueDosage")) {
12259          this.defaultValue = new Dosage();
12260          return this.defaultValue;
12261        }
12262        else if (name.equals("defaultValueMeta")) {
12263          this.defaultValue = new Meta();
12264          return this.defaultValue;
12265        }
12266        else if (name.equals("meaningWhenMissing")) {
12267          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.meaningWhenMissing");
12268        }
12269        else if (name.equals("orderMeaning")) {
12270          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.orderMeaning");
12271        }
12272        else if (name.equals("fixedBase64Binary")) {
12273          this.fixed = new Base64BinaryType();
12274          return this.fixed;
12275        }
12276        else if (name.equals("fixedBoolean")) {
12277          this.fixed = new BooleanType();
12278          return this.fixed;
12279        }
12280        else if (name.equals("fixedCanonical")) {
12281          this.fixed = new CanonicalType();
12282          return this.fixed;
12283        }
12284        else if (name.equals("fixedCode")) {
12285          this.fixed = new CodeType();
12286          return this.fixed;
12287        }
12288        else if (name.equals("fixedDate")) {
12289          this.fixed = new DateType();
12290          return this.fixed;
12291        }
12292        else if (name.equals("fixedDateTime")) {
12293          this.fixed = new DateTimeType();
12294          return this.fixed;
12295        }
12296        else if (name.equals("fixedDecimal")) {
12297          this.fixed = new DecimalType();
12298          return this.fixed;
12299        }
12300        else if (name.equals("fixedId")) {
12301          this.fixed = new IdType();
12302          return this.fixed;
12303        }
12304        else if (name.equals("fixedInstant")) {
12305          this.fixed = new InstantType();
12306          return this.fixed;
12307        }
12308        else if (name.equals("fixedInteger")) {
12309          this.fixed = new IntegerType();
12310          return this.fixed;
12311        }
12312        else if (name.equals("fixedInteger64")) {
12313          this.fixed = new Integer64Type();
12314          return this.fixed;
12315        }
12316        else if (name.equals("fixedMarkdown")) {
12317          this.fixed = new MarkdownType();
12318          return this.fixed;
12319        }
12320        else if (name.equals("fixedOid")) {
12321          this.fixed = new OidType();
12322          return this.fixed;
12323        }
12324        else if (name.equals("fixedPositiveInt")) {
12325          this.fixed = new PositiveIntType();
12326          return this.fixed;
12327        }
12328        else if (name.equals("fixedString")) {
12329          this.fixed = new StringType();
12330          return this.fixed;
12331        }
12332        else if (name.equals("fixedTime")) {
12333          this.fixed = new TimeType();
12334          return this.fixed;
12335        }
12336        else if (name.equals("fixedUnsignedInt")) {
12337          this.fixed = new UnsignedIntType();
12338          return this.fixed;
12339        }
12340        else if (name.equals("fixedUri")) {
12341          this.fixed = new UriType();
12342          return this.fixed;
12343        }
12344        else if (name.equals("fixedUrl")) {
12345          this.fixed = new UrlType();
12346          return this.fixed;
12347        }
12348        else if (name.equals("fixedUuid")) {
12349          this.fixed = new UuidType();
12350          return this.fixed;
12351        }
12352        else if (name.equals("fixedAddress")) {
12353          this.fixed = new Address();
12354          return this.fixed;
12355        }
12356        else if (name.equals("fixedAge")) {
12357          this.fixed = new Age();
12358          return this.fixed;
12359        }
12360        else if (name.equals("fixedAnnotation")) {
12361          this.fixed = new Annotation();
12362          return this.fixed;
12363        }
12364        else if (name.equals("fixedAttachment")) {
12365          this.fixed = new Attachment();
12366          return this.fixed;
12367        }
12368        else if (name.equals("fixedCodeableConcept")) {
12369          this.fixed = new CodeableConcept();
12370          return this.fixed;
12371        }
12372        else if (name.equals("fixedCodeableReference")) {
12373          this.fixed = new CodeableReference();
12374          return this.fixed;
12375        }
12376        else if (name.equals("fixedCoding")) {
12377          this.fixed = new Coding();
12378          return this.fixed;
12379        }
12380        else if (name.equals("fixedContactPoint")) {
12381          this.fixed = new ContactPoint();
12382          return this.fixed;
12383        }
12384        else if (name.equals("fixedCount")) {
12385          this.fixed = new Count();
12386          return this.fixed;
12387        }
12388        else if (name.equals("fixedDistance")) {
12389          this.fixed = new Distance();
12390          return this.fixed;
12391        }
12392        else if (name.equals("fixedDuration")) {
12393          this.fixed = new Duration();
12394          return this.fixed;
12395        }
12396        else if (name.equals("fixedHumanName")) {
12397          this.fixed = new HumanName();
12398          return this.fixed;
12399        }
12400        else if (name.equals("fixedIdentifier")) {
12401          this.fixed = new Identifier();
12402          return this.fixed;
12403        }
12404        else if (name.equals("fixedMoney")) {
12405          this.fixed = new Money();
12406          return this.fixed;
12407        }
12408        else if (name.equals("fixedPeriod")) {
12409          this.fixed = new Period();
12410          return this.fixed;
12411        }
12412        else if (name.equals("fixedQuantity")) {
12413          this.fixed = new Quantity();
12414          return this.fixed;
12415        }
12416        else if (name.equals("fixedRange")) {
12417          this.fixed = new Range();
12418          return this.fixed;
12419        }
12420        else if (name.equals("fixedRatio")) {
12421          this.fixed = new Ratio();
12422          return this.fixed;
12423        }
12424        else if (name.equals("fixedRatioRange")) {
12425          this.fixed = new RatioRange();
12426          return this.fixed;
12427        }
12428        else if (name.equals("fixedReference")) {
12429          this.fixed = new Reference();
12430          return this.fixed;
12431        }
12432        else if (name.equals("fixedSampledData")) {
12433          this.fixed = new SampledData();
12434          return this.fixed;
12435        }
12436        else if (name.equals("fixedSignature")) {
12437          this.fixed = new Signature();
12438          return this.fixed;
12439        }
12440        else if (name.equals("fixedTiming")) {
12441          this.fixed = new Timing();
12442          return this.fixed;
12443        }
12444        else if (name.equals("fixedContactDetail")) {
12445          this.fixed = new ContactDetail();
12446          return this.fixed;
12447        }
12448        else if (name.equals("fixedDataRequirement")) {
12449          this.fixed = new DataRequirement();
12450          return this.fixed;
12451        }
12452        else if (name.equals("fixedExpression")) {
12453          this.fixed = new Expression();
12454          return this.fixed;
12455        }
12456        else if (name.equals("fixedParameterDefinition")) {
12457          this.fixed = new ParameterDefinition();
12458          return this.fixed;
12459        }
12460        else if (name.equals("fixedRelatedArtifact")) {
12461          this.fixed = new RelatedArtifact();
12462          return this.fixed;
12463        }
12464        else if (name.equals("fixedTriggerDefinition")) {
12465          this.fixed = new TriggerDefinition();
12466          return this.fixed;
12467        }
12468        else if (name.equals("fixedUsageContext")) {
12469          this.fixed = new UsageContext();
12470          return this.fixed;
12471        }
12472        else if (name.equals("fixedAvailability")) {
12473          this.fixed = new Availability();
12474          return this.fixed;
12475        }
12476        else if (name.equals("fixedExtendedContactDetail")) {
12477          this.fixed = new ExtendedContactDetail();
12478          return this.fixed;
12479        }
12480        else if (name.equals("fixedDosage")) {
12481          this.fixed = new Dosage();
12482          return this.fixed;
12483        }
12484        else if (name.equals("fixedMeta")) {
12485          this.fixed = new Meta();
12486          return this.fixed;
12487        }
12488        else if (name.equals("patternBase64Binary")) {
12489          this.pattern = new Base64BinaryType();
12490          return this.pattern;
12491        }
12492        else if (name.equals("patternBoolean")) {
12493          this.pattern = new BooleanType();
12494          return this.pattern;
12495        }
12496        else if (name.equals("patternCanonical")) {
12497          this.pattern = new CanonicalType();
12498          return this.pattern;
12499        }
12500        else if (name.equals("patternCode")) {
12501          this.pattern = new CodeType();
12502          return this.pattern;
12503        }
12504        else if (name.equals("patternDate")) {
12505          this.pattern = new DateType();
12506          return this.pattern;
12507        }
12508        else if (name.equals("patternDateTime")) {
12509          this.pattern = new DateTimeType();
12510          return this.pattern;
12511        }
12512        else if (name.equals("patternDecimal")) {
12513          this.pattern = new DecimalType();
12514          return this.pattern;
12515        }
12516        else if (name.equals("patternId")) {
12517          this.pattern = new IdType();
12518          return this.pattern;
12519        }
12520        else if (name.equals("patternInstant")) {
12521          this.pattern = new InstantType();
12522          return this.pattern;
12523        }
12524        else if (name.equals("patternInteger")) {
12525          this.pattern = new IntegerType();
12526          return this.pattern;
12527        }
12528        else if (name.equals("patternInteger64")) {
12529          this.pattern = new Integer64Type();
12530          return this.pattern;
12531        }
12532        else if (name.equals("patternMarkdown")) {
12533          this.pattern = new MarkdownType();
12534          return this.pattern;
12535        }
12536        else if (name.equals("patternOid")) {
12537          this.pattern = new OidType();
12538          return this.pattern;
12539        }
12540        else if (name.equals("patternPositiveInt")) {
12541          this.pattern = new PositiveIntType();
12542          return this.pattern;
12543        }
12544        else if (name.equals("patternString")) {
12545          this.pattern = new StringType();
12546          return this.pattern;
12547        }
12548        else if (name.equals("patternTime")) {
12549          this.pattern = new TimeType();
12550          return this.pattern;
12551        }
12552        else if (name.equals("patternUnsignedInt")) {
12553          this.pattern = new UnsignedIntType();
12554          return this.pattern;
12555        }
12556        else if (name.equals("patternUri")) {
12557          this.pattern = new UriType();
12558          return this.pattern;
12559        }
12560        else if (name.equals("patternUrl")) {
12561          this.pattern = new UrlType();
12562          return this.pattern;
12563        }
12564        else if (name.equals("patternUuid")) {
12565          this.pattern = new UuidType();
12566          return this.pattern;
12567        }
12568        else if (name.equals("patternAddress")) {
12569          this.pattern = new Address();
12570          return this.pattern;
12571        }
12572        else if (name.equals("patternAge")) {
12573          this.pattern = new Age();
12574          return this.pattern;
12575        }
12576        else if (name.equals("patternAnnotation")) {
12577          this.pattern = new Annotation();
12578          return this.pattern;
12579        }
12580        else if (name.equals("patternAttachment")) {
12581          this.pattern = new Attachment();
12582          return this.pattern;
12583        }
12584        else if (name.equals("patternCodeableConcept")) {
12585          this.pattern = new CodeableConcept();
12586          return this.pattern;
12587        }
12588        else if (name.equals("patternCodeableReference")) {
12589          this.pattern = new CodeableReference();
12590          return this.pattern;
12591        }
12592        else if (name.equals("patternCoding")) {
12593          this.pattern = new Coding();
12594          return this.pattern;
12595        }
12596        else if (name.equals("patternContactPoint")) {
12597          this.pattern = new ContactPoint();
12598          return this.pattern;
12599        }
12600        else if (name.equals("patternCount")) {
12601          this.pattern = new Count();
12602          return this.pattern;
12603        }
12604        else if (name.equals("patternDistance")) {
12605          this.pattern = new Distance();
12606          return this.pattern;
12607        }
12608        else if (name.equals("patternDuration")) {
12609          this.pattern = new Duration();
12610          return this.pattern;
12611        }
12612        else if (name.equals("patternHumanName")) {
12613          this.pattern = new HumanName();
12614          return this.pattern;
12615        }
12616        else if (name.equals("patternIdentifier")) {
12617          this.pattern = new Identifier();
12618          return this.pattern;
12619        }
12620        else if (name.equals("patternMoney")) {
12621          this.pattern = new Money();
12622          return this.pattern;
12623        }
12624        else if (name.equals("patternPeriod")) {
12625          this.pattern = new Period();
12626          return this.pattern;
12627        }
12628        else if (name.equals("patternQuantity")) {
12629          this.pattern = new Quantity();
12630          return this.pattern;
12631        }
12632        else if (name.equals("patternRange")) {
12633          this.pattern = new Range();
12634          return this.pattern;
12635        }
12636        else if (name.equals("patternRatio")) {
12637          this.pattern = new Ratio();
12638          return this.pattern;
12639        }
12640        else if (name.equals("patternRatioRange")) {
12641          this.pattern = new RatioRange();
12642          return this.pattern;
12643        }
12644        else if (name.equals("patternReference")) {
12645          this.pattern = new Reference();
12646          return this.pattern;
12647        }
12648        else if (name.equals("patternSampledData")) {
12649          this.pattern = new SampledData();
12650          return this.pattern;
12651        }
12652        else if (name.equals("patternSignature")) {
12653          this.pattern = new Signature();
12654          return this.pattern;
12655        }
12656        else if (name.equals("patternTiming")) {
12657          this.pattern = new Timing();
12658          return this.pattern;
12659        }
12660        else if (name.equals("patternContactDetail")) {
12661          this.pattern = new ContactDetail();
12662          return this.pattern;
12663        }
12664        else if (name.equals("patternDataRequirement")) {
12665          this.pattern = new DataRequirement();
12666          return this.pattern;
12667        }
12668        else if (name.equals("patternExpression")) {
12669          this.pattern = new Expression();
12670          return this.pattern;
12671        }
12672        else if (name.equals("patternParameterDefinition")) {
12673          this.pattern = new ParameterDefinition();
12674          return this.pattern;
12675        }
12676        else if (name.equals("patternRelatedArtifact")) {
12677          this.pattern = new RelatedArtifact();
12678          return this.pattern;
12679        }
12680        else if (name.equals("patternTriggerDefinition")) {
12681          this.pattern = new TriggerDefinition();
12682          return this.pattern;
12683        }
12684        else if (name.equals("patternUsageContext")) {
12685          this.pattern = new UsageContext();
12686          return this.pattern;
12687        }
12688        else if (name.equals("patternAvailability")) {
12689          this.pattern = new Availability();
12690          return this.pattern;
12691        }
12692        else if (name.equals("patternExtendedContactDetail")) {
12693          this.pattern = new ExtendedContactDetail();
12694          return this.pattern;
12695        }
12696        else if (name.equals("patternDosage")) {
12697          this.pattern = new Dosage();
12698          return this.pattern;
12699        }
12700        else if (name.equals("patternMeta")) {
12701          this.pattern = new Meta();
12702          return this.pattern;
12703        }
12704        else if (name.equals("example")) {
12705          return addExample();
12706        }
12707        else if (name.equals("minValueDate")) {
12708          this.minValue = new DateType();
12709          return this.minValue;
12710        }
12711        else if (name.equals("minValueDateTime")) {
12712          this.minValue = new DateTimeType();
12713          return this.minValue;
12714        }
12715        else if (name.equals("minValueInstant")) {
12716          this.minValue = new InstantType();
12717          return this.minValue;
12718        }
12719        else if (name.equals("minValueTime")) {
12720          this.minValue = new TimeType();
12721          return this.minValue;
12722        }
12723        else if (name.equals("minValueDecimal")) {
12724          this.minValue = new DecimalType();
12725          return this.minValue;
12726        }
12727        else if (name.equals("minValueInteger")) {
12728          this.minValue = new IntegerType();
12729          return this.minValue;
12730        }
12731        else if (name.equals("minValueInteger64")) {
12732          this.minValue = new Integer64Type();
12733          return this.minValue;
12734        }
12735        else if (name.equals("minValuePositiveInt")) {
12736          this.minValue = new PositiveIntType();
12737          return this.minValue;
12738        }
12739        else if (name.equals("minValueUnsignedInt")) {
12740          this.minValue = new UnsignedIntType();
12741          return this.minValue;
12742        }
12743        else if (name.equals("minValueQuantity")) {
12744          this.minValue = new Quantity();
12745          return this.minValue;
12746        }
12747        else if (name.equals("maxValueDate")) {
12748          this.maxValue = new DateType();
12749          return this.maxValue;
12750        }
12751        else if (name.equals("maxValueDateTime")) {
12752          this.maxValue = new DateTimeType();
12753          return this.maxValue;
12754        }
12755        else if (name.equals("maxValueInstant")) {
12756          this.maxValue = new InstantType();
12757          return this.maxValue;
12758        }
12759        else if (name.equals("maxValueTime")) {
12760          this.maxValue = new TimeType();
12761          return this.maxValue;
12762        }
12763        else if (name.equals("maxValueDecimal")) {
12764          this.maxValue = new DecimalType();
12765          return this.maxValue;
12766        }
12767        else if (name.equals("maxValueInteger")) {
12768          this.maxValue = new IntegerType();
12769          return this.maxValue;
12770        }
12771        else if (name.equals("maxValueInteger64")) {
12772          this.maxValue = new Integer64Type();
12773          return this.maxValue;
12774        }
12775        else if (name.equals("maxValuePositiveInt")) {
12776          this.maxValue = new PositiveIntType();
12777          return this.maxValue;
12778        }
12779        else if (name.equals("maxValueUnsignedInt")) {
12780          this.maxValue = new UnsignedIntType();
12781          return this.maxValue;
12782        }
12783        else if (name.equals("maxValueQuantity")) {
12784          this.maxValue = new Quantity();
12785          return this.maxValue;
12786        }
12787        else if (name.equals("maxLength")) {
12788          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.maxLength");
12789        }
12790        else if (name.equals("condition")) {
12791          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.condition");
12792        }
12793        else if (name.equals("constraint")) {
12794          return addConstraint();
12795        }
12796        else if (name.equals("mustHaveValue")) {
12797          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mustHaveValue");
12798        }
12799        else if (name.equals("valueAlternatives")) {
12800          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.valueAlternatives");
12801        }
12802        else if (name.equals("mustSupport")) {
12803          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.mustSupport");
12804        }
12805        else if (name.equals("isModifier")) {
12806          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.isModifier");
12807        }
12808        else if (name.equals("isModifierReason")) {
12809          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.isModifierReason");
12810        }
12811        else if (name.equals("isSummary")) {
12812          throw new FHIRException("Cannot call addChild on a singleton property ElementDefinition.isSummary");
12813        }
12814        else if (name.equals("binding")) {
12815          this.binding = new ElementDefinitionBindingComponent();
12816          return this.binding;
12817        }
12818        else if (name.equals("mapping")) {
12819          return addMapping();
12820        }
12821        else
12822          return super.addChild(name);
12823      }
12824
12825  public String fhirType() {
12826    return "ElementDefinition";
12827
12828  }
12829
12830      public ElementDefinition copy() {
12831        ElementDefinition dst = new ElementDefinition();
12832        copyValues(dst);
12833        return dst;
12834      }
12835
12836      public void copyValues(ElementDefinition dst) {
12837        super.copyValues(dst);
12838        dst.path = path == null ? null : path.copy();
12839        if (representation != null) {
12840          dst.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
12841          for (Enumeration<PropertyRepresentation> i : representation)
12842            dst.representation.add(i.copy());
12843        };
12844        dst.sliceName = sliceName == null ? null : sliceName.copy();
12845        dst.sliceIsConstraining = sliceIsConstraining == null ? null : sliceIsConstraining.copy();
12846        dst.label = label == null ? null : label.copy();
12847        if (code != null) {
12848          dst.code = new ArrayList<Coding>();
12849          for (Coding i : code)
12850            dst.code.add(i.copy());
12851        };
12852        dst.slicing = slicing == null ? null : slicing.copy();
12853        dst.short_ = short_ == null ? null : short_.copy();
12854        dst.definition = definition == null ? null : definition.copy();
12855        dst.comment = comment == null ? null : comment.copy();
12856        dst.requirements = requirements == null ? null : requirements.copy();
12857        if (alias != null) {
12858          dst.alias = new ArrayList<StringType>();
12859          for (StringType i : alias)
12860            dst.alias.add(i.copy());
12861        };
12862        dst.min = min == null ? null : min.copy();
12863        dst.max = max == null ? null : max.copy();
12864        dst.base = base == null ? null : base.copy();
12865        dst.contentReference = contentReference == null ? null : contentReference.copy();
12866        if (type != null) {
12867          dst.type = new ArrayList<TypeRefComponent>();
12868          for (TypeRefComponent i : type)
12869            dst.type.add(i.copy());
12870        };
12871        dst.defaultValue = defaultValue == null ? null : defaultValue.copy();
12872        dst.meaningWhenMissing = meaningWhenMissing == null ? null : meaningWhenMissing.copy();
12873        dst.orderMeaning = orderMeaning == null ? null : orderMeaning.copy();
12874        dst.fixed = fixed == null ? null : fixed.copy();
12875        dst.pattern = pattern == null ? null : pattern.copy();
12876        if (example != null) {
12877          dst.example = new ArrayList<ElementDefinitionExampleComponent>();
12878          for (ElementDefinitionExampleComponent i : example)
12879            dst.example.add(i.copy());
12880        };
12881        dst.minValue = minValue == null ? null : minValue.copy();
12882        dst.maxValue = maxValue == null ? null : maxValue.copy();
12883        dst.maxLength = maxLength == null ? null : maxLength.copy();
12884        if (condition != null) {
12885          dst.condition = new ArrayList<IdType>();
12886          for (IdType i : condition)
12887            dst.condition.add(i.copy());
12888        };
12889        if (constraint != null) {
12890          dst.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
12891          for (ElementDefinitionConstraintComponent i : constraint)
12892            dst.constraint.add(i.copy());
12893        };
12894        dst.mustHaveValue = mustHaveValue == null ? null : mustHaveValue.copy();
12895        if (valueAlternatives != null) {
12896          dst.valueAlternatives = new ArrayList<CanonicalType>();
12897          for (CanonicalType i : valueAlternatives)
12898            dst.valueAlternatives.add(i.copy());
12899        };
12900        dst.mustSupport = mustSupport == null ? null : mustSupport.copy();
12901        dst.isModifier = isModifier == null ? null : isModifier.copy();
12902        dst.isModifierReason = isModifierReason == null ? null : isModifierReason.copy();
12903        dst.isSummary = isSummary == null ? null : isSummary.copy();
12904        dst.binding = binding == null ? null : binding.copy();
12905        if (mapping != null) {
12906          dst.mapping = new ArrayList<ElementDefinitionMappingComponent>();
12907          for (ElementDefinitionMappingComponent i : mapping)
12908            dst.mapping.add(i.copy());
12909        };
12910      }
12911
12912      protected ElementDefinition typedCopy() {
12913        return copy();
12914      }
12915
12916      @Override
12917      public boolean equalsDeep(Base other_) {
12918        if (!super.equalsDeep(other_))
12919          return false;
12920        if (!(other_ instanceof ElementDefinition))
12921          return false;
12922        ElementDefinition o = (ElementDefinition) other_;
12923        return compareDeep(path, o.path, true) && compareDeep(representation, o.representation, true) && compareDeep(sliceName, o.sliceName, true)
12924           && compareDeep(sliceIsConstraining, o.sliceIsConstraining, true) && compareDeep(label, o.label, true)
12925           && compareDeep(code, o.code, true) && compareDeep(slicing, o.slicing, true) && compareDeep(short_, o.short_, true)
12926           && compareDeep(definition, o.definition, true) && compareDeep(comment, o.comment, true) && compareDeep(requirements, o.requirements, true)
12927           && compareDeep(alias, o.alias, true) && compareDeep(min, o.min, true) && compareDeep(max, o.max, true)
12928           && compareDeep(base, o.base, true) && compareDeep(contentReference, o.contentReference, true) && compareDeep(type, o.type, true)
12929           && compareDeep(defaultValue, o.defaultValue, true) && compareDeep(meaningWhenMissing, o.meaningWhenMissing, true)
12930           && compareDeep(orderMeaning, o.orderMeaning, true) && compareDeep(fixed, o.fixed, true) && compareDeep(pattern, o.pattern, true)
12931           && compareDeep(example, o.example, true) && compareDeep(minValue, o.minValue, true) && compareDeep(maxValue, o.maxValue, true)
12932           && compareDeep(maxLength, o.maxLength, true) && compareDeep(condition, o.condition, true) && compareDeep(constraint, o.constraint, true)
12933           && compareDeep(mustHaveValue, o.mustHaveValue, true) && compareDeep(valueAlternatives, o.valueAlternatives, true)
12934           && compareDeep(mustSupport, o.mustSupport, true) && compareDeep(isModifier, o.isModifier, true)
12935           && compareDeep(isModifierReason, o.isModifierReason, true) && compareDeep(isSummary, o.isSummary, true)
12936           && compareDeep(binding, o.binding, true) && compareDeep(mapping, o.mapping, true);
12937      }
12938
12939      @Override
12940      public boolean equalsShallow(Base other_) {
12941        if (!super.equalsShallow(other_))
12942          return false;
12943        if (!(other_ instanceof ElementDefinition))
12944          return false;
12945        ElementDefinition o = (ElementDefinition) other_;
12946        return compareValues(path, o.path, true) && compareValues(representation, o.representation, true) && compareValues(sliceName, o.sliceName, true)
12947           && compareValues(sliceIsConstraining, o.sliceIsConstraining, true) && compareValues(label, o.label, true)
12948           && compareValues(short_, o.short_, true) && compareValues(definition, o.definition, true) && compareValues(comment, o.comment, true)
12949           && compareValues(requirements, o.requirements, true) && compareValues(alias, o.alias, true) && compareValues(min, o.min, true)
12950           && compareValues(max, o.max, true) && compareValues(contentReference, o.contentReference, true) && compareValues(meaningWhenMissing, o.meaningWhenMissing, true)
12951           && compareValues(orderMeaning, o.orderMeaning, true) && compareValues(maxLength, o.maxLength, true)
12952           && compareValues(condition, o.condition, true) && compareValues(mustHaveValue, o.mustHaveValue, true)
12953           && compareValues(valueAlternatives, o.valueAlternatives, true) && compareValues(mustSupport, o.mustSupport, true)
12954           && compareValues(isModifier, o.isModifier, true) && compareValues(isModifierReason, o.isModifierReason, true)
12955           && compareValues(isSummary, o.isSummary, true);
12956      }
12957
12958      public boolean isEmpty() {
12959        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(path, representation, sliceName
12960          , sliceIsConstraining, label, code, slicing, short_, definition, comment, requirements
12961          , alias, min, max, base, contentReference, type, defaultValue, meaningWhenMissing
12962          , orderMeaning, fixed, pattern, example, minValue, maxValue, maxLength, condition
12963          , constraint, mustHaveValue, valueAlternatives, mustSupport, isModifier, isModifierReason
12964          , isSummary, binding, mapping);
12965      }
12966
12967// Manual code (from Configuration.txt):
12968
12969  public String toString() {
12970    if (hasId())
12971      return getId();
12972    if (hasSliceName())
12973      return getPath()+":"+getSliceName();
12974    else
12975      return getPath();
12976  }
12977    
12978  public void makeBase(String path, int min, String max) {
12979    ElementDefinitionBaseComponent self = getBase();
12980    self.setPath(path);
12981    self.setMin(min);
12982    self.setMax(max);
12983  }
12984  
12985  public void makeBase() {
12986    ElementDefinitionBaseComponent self = getBase();
12987    self.setPath(getPath());
12988    self.setMin(getMin());
12989    self.setMax(getMax());
12990  }
12991 
12992  
12993  public String typeSummary() {
12994    CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
12995    for (TypeRefComponent tr : getType()) {
12996      if (tr.hasCode())
12997        b.append(tr.getWorkingCode());
12998    }
12999    return b.toString();
13000  }
13001
13002  public List<String> typeList() {
13003    List<String> res = new ArrayList<>();
13004    for (TypeRefComponent tr : getType()) {
13005      if (tr.hasCode())
13006        res.add(tr.getWorkingCode());
13007    }
13008    return res;
13009  }
13010  
13011  public String typeSummaryVB() {
13012    CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder("|");
13013    for (TypeRefComponent tr : getType()) {
13014      if (tr.hasCode())
13015        b.append(tr.getWorkingCode());
13016    }
13017    return b.toString().replace(" ", "");
13018  }
13019  
13020  public TypeRefComponent getType(String code) {
13021    for (TypeRefComponent tr : getType()) 
13022      if (tr.getCode().equals(code))
13023        return tr;
13024    TypeRefComponent tr = new TypeRefComponent();
13025    tr.setCode(code);
13026    type.add(tr);
13027    return tr;
13028  }
13029
13030  public static final boolean NOT_MODIFIER = false;
13031  public static final boolean NOT_IN_SUMMARY = false;
13032  public static final boolean IS_MODIFIER = true;
13033  public static final boolean IS_IN_SUMMARY = true;
13034  public ElementDefinition(boolean defaults, boolean modifier, boolean inSummary) {
13035    super();
13036    if (defaults) {
13037      setIsModifier(modifier);
13038      setIsSummary(inSummary);
13039    }
13040  }  
13041
13042 public String present() {
13043    return hasId() ? getId() : getPath();
13044  }
13045
13046  public boolean hasCondition(IdType id) {
13047    for (IdType c : getCondition()) {
13048      if (c.primitiveValue().equals(id.primitiveValue()))
13049        return true;
13050    }
13051    return false;
13052  }
13053
13054  public boolean hasConstraint(String key) {
13055    for (ElementDefinitionConstraintComponent c : getConstraint()) {
13056      if (c.getKey().equals(key))
13057        return true;
13058    }
13059    return false;
13060  }
13061
13062  public boolean hasCode(Coding c) {
13063    for (Coding t : getCode()) {
13064      if (t.getSystem().equals(c.getSystem()) && t.getCode().equals(c.getCode()))
13065        return true;
13066    }
13067    return false;
13068  }  
13069
13070  public boolean isChoice() {
13071    return getPath().endsWith("[x]");
13072  }  
13073
13074  public String getName() {
13075    return hasPath() ? getPath().contains(".") ? getPath().substring(getPath().lastIndexOf(".")+1) : getPath() : null;
13076  }
13077  
13078  public String getNameBase() {
13079    return getName().replace("[x]", "");
13080  }
13081
13082  public boolean unbounded() {
13083    return getMax().equals("*") || Integer.parseInt(getMax()) > 1;
13084  }
13085
13086  public boolean isMandatory() {
13087    return getMin() > 0;
13088  }
13089
13090  public boolean isInlineType() {
13091    return getType().size() == 1 && Utilities.existsInList(getType().get(0).getCode(), "Element", "BackboneElement");
13092  }  
13093
13094
13095  public boolean prohibited() { 
13096    return "0".equals(getMax()); 
13097  } 
13098
13099  public boolean hasFixedOrPattern() { 
13100    return hasFixed() || hasPattern(); 
13101  } 
13102
13103  public DataType getFixedOrPattern() { 
13104    return hasFixed() ? getFixed() : getPattern(); 
13105  } 
13106
13107  public boolean isProhibited() { 
13108    return "0".equals(getMax()); 
13109  }   
13110
13111  public boolean isRequired() { 
13112    return getMin() == 1; 
13113  }
13114
13115  public CanonicalType addValueAlternative(CanonicalType t) { 
13116    if (this.valueAlternatives == null)
13117      this.valueAlternatives = new ArrayList<CanonicalType>();
13118    this.valueAlternatives.add(t);
13119    return t;
13120  }
13121
13122  public boolean repeats() {
13123    return !Utilities.existsInList(getMax(), "0", "1");
13124  }
13125
13126// end addition
13127
13128}
13129