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 Tue, Dec 13, 2022 17:53+1100 for FHIR vcurrent
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/tools/CodeSystem/additional-binding-purpose";
152            case MINIMUM: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
153            case REQUIRED: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
154            case EXTENSIBLE: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
155            case CANDIDATE: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
156            case CURRENT: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
157            case PREFERRED: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
158            case UI: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
159            case STARTER: return "http://hl7.org/fhir/tools/CodeSystem/additional-binding-purpose";
160            case COMPONENT: return "http://hl7.org/fhir/tools/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.MAXIMUM)
258        return "maximum";
259      if (code == AdditionalBindingPurposeVS.MINIMUM)
260        return "minimum";
261      if (code == AdditionalBindingPurposeVS.REQUIRED)
262        return "required";
263      if (code == AdditionalBindingPurposeVS.EXTENSIBLE)
264        return "extensible";
265      if (code == AdditionalBindingPurposeVS.CANDIDATE)
266        return "candidate";
267      if (code == AdditionalBindingPurposeVS.CURRENT)
268        return "current";
269      if (code == AdditionalBindingPurposeVS.PREFERRED)
270        return "preferred";
271      if (code == AdditionalBindingPurposeVS.UI)
272        return "ui";
273      if (code == AdditionalBindingPurposeVS.STARTER)
274        return "starter";
275      if (code == AdditionalBindingPurposeVS.COMPONENT)
276        return "component";
277      return "?";
278      }
279    public String toSystem(AdditionalBindingPurposeVS code) {
280      return code.getSystem();
281      }
282    }
283
284    public enum AggregationMode {
285        /**
286         * The reference is a local reference to a contained resource.
287         */
288        CONTAINED, 
289        /**
290         * The reference to a resource that has to be resolved externally to the resource that includes the reference.
291         */
292        REFERENCED, 
293        /**
294         * The resource the reference points to will be found in the same bundle as the resource that includes the reference.
295         */
296        BUNDLED, 
297        /**
298         * added to help the parsers with the generic types
299         */
300        NULL;
301        public static AggregationMode fromCode(String codeString) throws FHIRException {
302            if (codeString == null || "".equals(codeString))
303                return null;
304        if ("contained".equals(codeString))
305          return CONTAINED;
306        if ("referenced".equals(codeString))
307          return REFERENCED;
308        if ("bundled".equals(codeString))
309          return BUNDLED;
310        if (Configuration.isAcceptInvalidEnums())
311          return null;
312        else
313          throw new FHIRException("Unknown AggregationMode code '"+codeString+"'");
314        }
315        public String toCode() {
316          switch (this) {
317            case CONTAINED: return "contained";
318            case REFERENCED: return "referenced";
319            case BUNDLED: return "bundled";
320            case NULL: return null;
321            default: return "?";
322          }
323        }
324        public String getSystem() {
325          switch (this) {
326            case CONTAINED: return "http://hl7.org/fhir/resource-aggregation-mode";
327            case REFERENCED: return "http://hl7.org/fhir/resource-aggregation-mode";
328            case BUNDLED: return "http://hl7.org/fhir/resource-aggregation-mode";
329            case NULL: return null;
330            default: return "?";
331          }
332        }
333        public String getDefinition() {
334          switch (this) {
335            case CONTAINED: return "The reference is a local reference to a contained resource.";
336            case REFERENCED: return "The reference to a resource that has to be resolved externally to the resource that includes the reference.";
337            case BUNDLED: return "The resource the reference points to will be found in the same bundle as the resource that includes the reference.";
338            case NULL: return null;
339            default: return "?";
340          }
341        }
342        public String getDisplay() {
343          switch (this) {
344            case CONTAINED: return "Contained";
345            case REFERENCED: return "Referenced";
346            case BUNDLED: return "Bundled";
347            case NULL: return null;
348            default: return "?";
349          }
350        }
351    }
352
353  public static class AggregationModeEnumFactory implements EnumFactory<AggregationMode> {
354    public AggregationMode fromCode(String codeString) throws IllegalArgumentException {
355      if (codeString == null || "".equals(codeString))
356            if (codeString == null || "".equals(codeString))
357                return null;
358        if ("contained".equals(codeString))
359          return AggregationMode.CONTAINED;
360        if ("referenced".equals(codeString))
361          return AggregationMode.REFERENCED;
362        if ("bundled".equals(codeString))
363          return AggregationMode.BUNDLED;
364        throw new IllegalArgumentException("Unknown AggregationMode code '"+codeString+"'");
365        }
366        public Enumeration<AggregationMode> fromType(PrimitiveType<?> code) throws FHIRException {
367          if (code == null)
368            return null;
369          if (code.isEmpty())
370            return new Enumeration<AggregationMode>(this, AggregationMode.NULL, code);
371          String codeString = ((PrimitiveType) code).asStringValue();
372          if (codeString == null || "".equals(codeString))
373            return new Enumeration<AggregationMode>(this, AggregationMode.NULL, code);
374        if ("contained".equals(codeString))
375          return new Enumeration<AggregationMode>(this, AggregationMode.CONTAINED, code);
376        if ("referenced".equals(codeString))
377          return new Enumeration<AggregationMode>(this, AggregationMode.REFERENCED, code);
378        if ("bundled".equals(codeString))
379          return new Enumeration<AggregationMode>(this, AggregationMode.BUNDLED, code);
380        throw new FHIRException("Unknown AggregationMode code '"+codeString+"'");
381        }
382    public String toCode(AggregationMode code) {
383      if (code == AggregationMode.CONTAINED)
384        return "contained";
385      if (code == AggregationMode.REFERENCED)
386        return "referenced";
387      if (code == AggregationMode.BUNDLED)
388        return "bundled";
389      return "?";
390      }
391    public String toSystem(AggregationMode code) {
392      return code.getSystem();
393      }
394    }
395
396    public enum ConstraintSeverity {
397        /**
398         * If the constraint is violated, the resource is not conformant.
399         */
400        ERROR, 
401        /**
402         * If the constraint is violated, the resource is conformant, but it is not necessarily following best practice.
403         */
404        WARNING, 
405        /**
406         * added to help the parsers with the generic types
407         */
408        NULL;
409        public static ConstraintSeverity fromCode(String codeString) throws FHIRException {
410            if (codeString == null || "".equals(codeString))
411                return null;
412        if ("error".equals(codeString))
413          return ERROR;
414        if ("warning".equals(codeString))
415          return WARNING;
416        if (Configuration.isAcceptInvalidEnums())
417          return null;
418        else
419          throw new FHIRException("Unknown ConstraintSeverity code '"+codeString+"'");
420        }
421        public String toCode() {
422          switch (this) {
423            case ERROR: return "error";
424            case WARNING: return "warning";
425            case NULL: return null;
426            default: return "?";
427          }
428        }
429        public String getSystem() {
430          switch (this) {
431            case ERROR: return "http://hl7.org/fhir/constraint-severity";
432            case WARNING: return "http://hl7.org/fhir/constraint-severity";
433            case NULL: return null;
434            default: return "?";
435          }
436        }
437        public String getDefinition() {
438          switch (this) {
439            case ERROR: return "If the constraint is violated, the resource is not conformant.";
440            case WARNING: return "If the constraint is violated, the resource is conformant, but it is not necessarily following best practice.";
441            case NULL: return null;
442            default: return "?";
443          }
444        }
445        public String getDisplay() {
446          switch (this) {
447            case ERROR: return "Error";
448            case WARNING: return "Warning";
449            case NULL: return null;
450            default: return "?";
451          }
452        }
453    }
454
455  public static class ConstraintSeverityEnumFactory implements EnumFactory<ConstraintSeverity> {
456    public ConstraintSeverity fromCode(String codeString) throws IllegalArgumentException {
457      if (codeString == null || "".equals(codeString))
458            if (codeString == null || "".equals(codeString))
459                return null;
460        if ("error".equals(codeString))
461          return ConstraintSeverity.ERROR;
462        if ("warning".equals(codeString))
463          return ConstraintSeverity.WARNING;
464        throw new IllegalArgumentException("Unknown ConstraintSeverity code '"+codeString+"'");
465        }
466        public Enumeration<ConstraintSeverity> fromType(PrimitiveType<?> code) throws FHIRException {
467          if (code == null)
468            return null;
469          if (code.isEmpty())
470            return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.NULL, code);
471          String codeString = ((PrimitiveType) code).asStringValue();
472          if (codeString == null || "".equals(codeString))
473            return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.NULL, code);
474        if ("error".equals(codeString))
475          return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.ERROR, code);
476        if ("warning".equals(codeString))
477          return new Enumeration<ConstraintSeverity>(this, ConstraintSeverity.WARNING, code);
478        throw new FHIRException("Unknown ConstraintSeverity code '"+codeString+"'");
479        }
480    public String toCode(ConstraintSeverity code) {
481      if (code == ConstraintSeverity.ERROR)
482        return "error";
483      if (code == ConstraintSeverity.WARNING)
484        return "warning";
485      return "?";
486      }
487    public String toSystem(ConstraintSeverity code) {
488      return code.getSystem();
489      }
490    }
491
492    public enum DiscriminatorType {
493        /**
494         * The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding.
495         */
496        VALUE, 
497        /**
498         * 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.
499         */
500        EXISTS, 
501        /**
502         * 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.
503         */
504        PATTERN, 
505        /**
506         * The slices are differentiated by type of the nominated element.
507         */
508        TYPE, 
509        /**
510         * 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.
511         */
512        PROFILE, 
513        /**
514         * 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.
515         */
516        POSITION, 
517        /**
518         * added to help the parsers with the generic types
519         */
520        NULL;
521        public static DiscriminatorType fromCode(String codeString) throws FHIRException {
522            if (codeString == null || "".equals(codeString))
523                return null;
524        if ("value".equals(codeString))
525          return VALUE;
526        if ("exists".equals(codeString))
527          return EXISTS;
528        if ("pattern".equals(codeString))
529          return PATTERN;
530        if ("type".equals(codeString))
531          return TYPE;
532        if ("profile".equals(codeString))
533          return PROFILE;
534        if ("position".equals(codeString))
535          return POSITION;
536        if (Configuration.isAcceptInvalidEnums())
537          return null;
538        else
539          throw new FHIRException("Unknown DiscriminatorType code '"+codeString+"'");
540        }
541        public String toCode() {
542          switch (this) {
543            case VALUE: return "value";
544            case EXISTS: return "exists";
545            case PATTERN: return "pattern";
546            case TYPE: return "type";
547            case PROFILE: return "profile";
548            case POSITION: return "position";
549            case NULL: return null;
550            default: return "?";
551          }
552        }
553        public String getSystem() {
554          switch (this) {
555            case VALUE: return "http://hl7.org/fhir/discriminator-type";
556            case EXISTS: return "http://hl7.org/fhir/discriminator-type";
557            case PATTERN: return "http://hl7.org/fhir/discriminator-type";
558            case TYPE: return "http://hl7.org/fhir/discriminator-type";
559            case PROFILE: return "http://hl7.org/fhir/discriminator-type";
560            case POSITION: return "http://hl7.org/fhir/discriminator-type";
561            case NULL: return null;
562            default: return "?";
563          }
564        }
565        public String getDefinition() {
566          switch (this) {
567            case VALUE: return "The slices have different values in the nominated element, as determined by the applicable fixed value, pattern, or required ValueSet binding.";
568            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.";
569            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.";
570            case TYPE: return "The slices are differentiated by type of the nominated element.";
571            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.";
572            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.";
573            case NULL: return null;
574            default: return "?";
575          }
576        }
577        public String getDisplay() {
578          switch (this) {
579            case VALUE: return "Value";
580            case EXISTS: return "Exists";
581            case PATTERN: return "Pattern";
582            case TYPE: return "Type";
583            case PROFILE: return "Profile";
584            case POSITION: return "Position";
585            case NULL: return null;
586            default: return "?";
587          }
588        }
589    }
590
591  public static class DiscriminatorTypeEnumFactory implements EnumFactory<DiscriminatorType> {
592    public DiscriminatorType fromCode(String codeString) throws IllegalArgumentException {
593      if (codeString == null || "".equals(codeString))
594            if (codeString == null || "".equals(codeString))
595                return null;
596        if ("value".equals(codeString))
597          return DiscriminatorType.VALUE;
598        if ("exists".equals(codeString))
599          return DiscriminatorType.EXISTS;
600        if ("pattern".equals(codeString))
601          return DiscriminatorType.PATTERN;
602        if ("type".equals(codeString))
603          return DiscriminatorType.TYPE;
604        if ("profile".equals(codeString))
605          return DiscriminatorType.PROFILE;
606        if ("position".equals(codeString))
607          return DiscriminatorType.POSITION;
608        throw new IllegalArgumentException("Unknown DiscriminatorType code '"+codeString+"'");
609        }
610        public Enumeration<DiscriminatorType> fromType(PrimitiveType<?> code) throws FHIRException {
611          if (code == null)
612            return null;
613          if (code.isEmpty())
614            return new Enumeration<DiscriminatorType>(this, DiscriminatorType.NULL, code);
615          String codeString = ((PrimitiveType) code).asStringValue();
616          if (codeString == null || "".equals(codeString))
617            return new Enumeration<DiscriminatorType>(this, DiscriminatorType.NULL, code);
618        if ("value".equals(codeString))
619          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.VALUE, code);
620        if ("exists".equals(codeString))
621          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.EXISTS, code);
622        if ("pattern".equals(codeString))
623          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.PATTERN, code);
624        if ("type".equals(codeString))
625          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.TYPE, code);
626        if ("profile".equals(codeString))
627          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.PROFILE, code);
628        if ("position".equals(codeString))
629          return new Enumeration<DiscriminatorType>(this, DiscriminatorType.POSITION, code);
630        throw new FHIRException("Unknown DiscriminatorType code '"+codeString+"'");
631        }
632    public String toCode(DiscriminatorType code) {
633      if (code == DiscriminatorType.VALUE)
634        return "value";
635      if (code == DiscriminatorType.EXISTS)
636        return "exists";
637      if (code == DiscriminatorType.PATTERN)
638        return "pattern";
639      if (code == DiscriminatorType.TYPE)
640        return "type";
641      if (code == DiscriminatorType.PROFILE)
642        return "profile";
643      if (code == DiscriminatorType.POSITION)
644        return "position";
645      return "?";
646      }
647    public String toSystem(DiscriminatorType code) {
648      return code.getSystem();
649      }
650    }
651
652    public enum PropertyRepresentation {
653        /**
654         * In XML, this property is represented as an attribute not an element.
655         */
656        XMLATTR, 
657        /**
658         * This element is represented using the XML text attribute (primitives only).
659         */
660        XMLTEXT, 
661        /**
662         * The type of this element is indicated using xsi:type.
663         */
664        TYPEATTR, 
665        /**
666         * Use CDA narrative instead of XHTML.
667         */
668        CDATEXT, 
669        /**
670         * The property is represented using XHTML.
671         */
672        XHTML, 
673        /**
674         * added to help the parsers with the generic types
675         */
676        NULL;
677        public static PropertyRepresentation fromCode(String codeString) throws FHIRException {
678            if (codeString == null || "".equals(codeString))
679                return null;
680        if ("xmlAttr".equals(codeString))
681          return XMLATTR;
682        if ("xmlText".equals(codeString))
683          return XMLTEXT;
684        if ("typeAttr".equals(codeString))
685          return TYPEATTR;
686        if ("cdaText".equals(codeString))
687          return CDATEXT;
688        if ("xhtml".equals(codeString))
689          return XHTML;
690        if (Configuration.isAcceptInvalidEnums())
691          return null;
692        else
693          throw new FHIRException("Unknown PropertyRepresentation code '"+codeString+"'");
694        }
695        public String toCode() {
696          switch (this) {
697            case XMLATTR: return "xmlAttr";
698            case XMLTEXT: return "xmlText";
699            case TYPEATTR: return "typeAttr";
700            case CDATEXT: return "cdaText";
701            case XHTML: return "xhtml";
702            case NULL: return null;
703            default: return "?";
704          }
705        }
706        public String getSystem() {
707          switch (this) {
708            case XMLATTR: return "http://hl7.org/fhir/property-representation";
709            case XMLTEXT: return "http://hl7.org/fhir/property-representation";
710            case TYPEATTR: return "http://hl7.org/fhir/property-representation";
711            case CDATEXT: return "http://hl7.org/fhir/property-representation";
712            case XHTML: return "http://hl7.org/fhir/property-representation";
713            case NULL: return null;
714            default: return "?";
715          }
716        }
717        public String getDefinition() {
718          switch (this) {
719            case XMLATTR: return "In XML, this property is represented as an attribute not an element.";
720            case XMLTEXT: return "This element is represented using the XML text attribute (primitives only).";
721            case TYPEATTR: return "The type of this element is indicated using xsi:type.";
722            case CDATEXT: return "Use CDA narrative instead of XHTML.";
723            case XHTML: return "The property is represented using XHTML.";
724            case NULL: return null;
725            default: return "?";
726          }
727        }
728        public String getDisplay() {
729          switch (this) {
730            case XMLATTR: return "XML Attribute";
731            case XMLTEXT: return "XML Text";
732            case TYPEATTR: return "Type Attribute";
733            case CDATEXT: return "CDA Text Format";
734            case XHTML: return "XHTML";
735            case NULL: return null;
736            default: return "?";
737          }
738        }
739    }
740
741  public static class PropertyRepresentationEnumFactory implements EnumFactory<PropertyRepresentation> {
742    public PropertyRepresentation fromCode(String codeString) throws IllegalArgumentException {
743      if (codeString == null || "".equals(codeString))
744            if (codeString == null || "".equals(codeString))
745                return null;
746        if ("xmlAttr".equals(codeString))
747          return PropertyRepresentation.XMLATTR;
748        if ("xmlText".equals(codeString))
749          return PropertyRepresentation.XMLTEXT;
750        if ("typeAttr".equals(codeString))
751          return PropertyRepresentation.TYPEATTR;
752        if ("cdaText".equals(codeString))
753          return PropertyRepresentation.CDATEXT;
754        if ("xhtml".equals(codeString))
755          return PropertyRepresentation.XHTML;
756        throw new IllegalArgumentException("Unknown PropertyRepresentation code '"+codeString+"'");
757        }
758        public Enumeration<PropertyRepresentation> fromType(PrimitiveType<?> code) throws FHIRException {
759          if (code == null)
760            return null;
761          if (code.isEmpty())
762            return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.NULL, code);
763          String codeString = ((PrimitiveType) code).asStringValue();
764          if (codeString == null || "".equals(codeString))
765            return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.NULL, code);
766        if ("xmlAttr".equals(codeString))
767          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XMLATTR, code);
768        if ("xmlText".equals(codeString))
769          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XMLTEXT, code);
770        if ("typeAttr".equals(codeString))
771          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.TYPEATTR, code);
772        if ("cdaText".equals(codeString))
773          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.CDATEXT, code);
774        if ("xhtml".equals(codeString))
775          return new Enumeration<PropertyRepresentation>(this, PropertyRepresentation.XHTML, code);
776        throw new FHIRException("Unknown PropertyRepresentation code '"+codeString+"'");
777        }
778    public String toCode(PropertyRepresentation code) {
779      if (code == PropertyRepresentation.XMLATTR)
780        return "xmlAttr";
781      if (code == PropertyRepresentation.XMLTEXT)
782        return "xmlText";
783      if (code == PropertyRepresentation.TYPEATTR)
784        return "typeAttr";
785      if (code == PropertyRepresentation.CDATEXT)
786        return "cdaText";
787      if (code == PropertyRepresentation.XHTML)
788        return "xhtml";
789      return "?";
790      }
791    public String toSystem(PropertyRepresentation code) {
792      return code.getSystem();
793      }
794    }
795
796    public enum ReferenceVersionRules {
797        /**
798         * The reference may be either version independent or version specific.
799         */
800        EITHER, 
801        /**
802         * The reference must be version independent.
803         */
804        INDEPENDENT, 
805        /**
806         * The reference must be version specific.
807         */
808        SPECIFIC, 
809        /**
810         * added to help the parsers with the generic types
811         */
812        NULL;
813        public static ReferenceVersionRules fromCode(String codeString) throws FHIRException {
814            if (codeString == null || "".equals(codeString))
815                return null;
816        if ("either".equals(codeString))
817          return EITHER;
818        if ("independent".equals(codeString))
819          return INDEPENDENT;
820        if ("specific".equals(codeString))
821          return SPECIFIC;
822        if (Configuration.isAcceptInvalidEnums())
823          return null;
824        else
825          throw new FHIRException("Unknown ReferenceVersionRules code '"+codeString+"'");
826        }
827        public String toCode() {
828          switch (this) {
829            case EITHER: return "either";
830            case INDEPENDENT: return "independent";
831            case SPECIFIC: return "specific";
832            case NULL: return null;
833            default: return "?";
834          }
835        }
836        public String getSystem() {
837          switch (this) {
838            case EITHER: return "http://hl7.org/fhir/reference-version-rules";
839            case INDEPENDENT: return "http://hl7.org/fhir/reference-version-rules";
840            case SPECIFIC: return "http://hl7.org/fhir/reference-version-rules";
841            case NULL: return null;
842            default: return "?";
843          }
844        }
845        public String getDefinition() {
846          switch (this) {
847            case EITHER: return "The reference may be either version independent or version specific.";
848            case INDEPENDENT: return "The reference must be version independent.";
849            case SPECIFIC: return "The reference must be version specific.";
850            case NULL: return null;
851            default: return "?";
852          }
853        }
854        public String getDisplay() {
855          switch (this) {
856            case EITHER: return "Either Specific or independent";
857            case INDEPENDENT: return "Version independent";
858            case SPECIFIC: return "Version Specific";
859            case NULL: return null;
860            default: return "?";
861          }
862        }
863    }
864
865  public static class ReferenceVersionRulesEnumFactory implements EnumFactory<ReferenceVersionRules> {
866    public ReferenceVersionRules fromCode(String codeString) throws IllegalArgumentException {
867      if (codeString == null || "".equals(codeString))
868            if (codeString == null || "".equals(codeString))
869                return null;
870        if ("either".equals(codeString))
871          return ReferenceVersionRules.EITHER;
872        if ("independent".equals(codeString))
873          return ReferenceVersionRules.INDEPENDENT;
874        if ("specific".equals(codeString))
875          return ReferenceVersionRules.SPECIFIC;
876        throw new IllegalArgumentException("Unknown ReferenceVersionRules code '"+codeString+"'");
877        }
878        public Enumeration<ReferenceVersionRules> fromType(PrimitiveType<?> code) throws FHIRException {
879          if (code == null)
880            return null;
881          if (code.isEmpty())
882            return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.NULL, code);
883          String codeString = ((PrimitiveType) code).asStringValue();
884          if (codeString == null || "".equals(codeString))
885            return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.NULL, code);
886        if ("either".equals(codeString))
887          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.EITHER, code);
888        if ("independent".equals(codeString))
889          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.INDEPENDENT, code);
890        if ("specific".equals(codeString))
891          return new Enumeration<ReferenceVersionRules>(this, ReferenceVersionRules.SPECIFIC, code);
892        throw new FHIRException("Unknown ReferenceVersionRules code '"+codeString+"'");
893        }
894    public String toCode(ReferenceVersionRules code) {
895      if (code == ReferenceVersionRules.EITHER)
896        return "either";
897      if (code == ReferenceVersionRules.INDEPENDENT)
898        return "independent";
899      if (code == ReferenceVersionRules.SPECIFIC)
900        return "specific";
901      return "?";
902      }
903    public String toSystem(ReferenceVersionRules code) {
904      return code.getSystem();
905      }
906    }
907
908    public enum SlicingRules {
909        /**
910         * No additional content is allowed other than that described by the slices in this profile.
911         */
912        CLOSED, 
913        /**
914         * Additional content is allowed anywhere in the list.
915         */
916        OPEN, 
917        /**
918         * 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.
919         */
920        OPENATEND, 
921        /**
922         * added to help the parsers with the generic types
923         */
924        NULL;
925        public static SlicingRules fromCode(String codeString) throws FHIRException {
926            if (codeString == null || "".equals(codeString))
927                return null;
928        if ("closed".equals(codeString))
929          return CLOSED;
930        if ("open".equals(codeString))
931          return OPEN;
932        if ("openAtEnd".equals(codeString))
933          return OPENATEND;
934        if (Configuration.isAcceptInvalidEnums())
935          return null;
936        else
937          throw new FHIRException("Unknown SlicingRules code '"+codeString+"'");
938        }
939        public String toCode() {
940          switch (this) {
941            case CLOSED: return "closed";
942            case OPEN: return "open";
943            case OPENATEND: return "openAtEnd";
944            case NULL: return null;
945            default: return "?";
946          }
947        }
948        public String getSystem() {
949          switch (this) {
950            case CLOSED: return "http://hl7.org/fhir/resource-slicing-rules";
951            case OPEN: return "http://hl7.org/fhir/resource-slicing-rules";
952            case OPENATEND: return "http://hl7.org/fhir/resource-slicing-rules";
953            case NULL: return null;
954            default: return "?";
955          }
956        }
957        public String getDefinition() {
958          switch (this) {
959            case CLOSED: return "No additional content is allowed other than that described by the slices in this profile.";
960            case OPEN: return "Additional content is allowed anywhere in the list.";
961            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.";
962            case NULL: return null;
963            default: return "?";
964          }
965        }
966        public String getDisplay() {
967          switch (this) {
968            case CLOSED: return "Closed";
969            case OPEN: return "Open";
970            case OPENATEND: return "Open at End";
971            case NULL: return null;
972            default: return "?";
973          }
974        }
975    }
976
977  public static class SlicingRulesEnumFactory implements EnumFactory<SlicingRules> {
978    public SlicingRules fromCode(String codeString) throws IllegalArgumentException {
979      if (codeString == null || "".equals(codeString))
980            if (codeString == null || "".equals(codeString))
981                return null;
982        if ("closed".equals(codeString))
983          return SlicingRules.CLOSED;
984        if ("open".equals(codeString))
985          return SlicingRules.OPEN;
986        if ("openAtEnd".equals(codeString))
987          return SlicingRules.OPENATEND;
988        throw new IllegalArgumentException("Unknown SlicingRules code '"+codeString+"'");
989        }
990        public Enumeration<SlicingRules> fromType(PrimitiveType<?> code) throws FHIRException {
991          if (code == null)
992            return null;
993          if (code.isEmpty())
994            return new Enumeration<SlicingRules>(this, SlicingRules.NULL, code);
995          String codeString = ((PrimitiveType) code).asStringValue();
996          if (codeString == null || "".equals(codeString))
997            return new Enumeration<SlicingRules>(this, SlicingRules.NULL, code);
998        if ("closed".equals(codeString))
999          return new Enumeration<SlicingRules>(this, SlicingRules.CLOSED, code);
1000        if ("open".equals(codeString))
1001          return new Enumeration<SlicingRules>(this, SlicingRules.OPEN, code);
1002        if ("openAtEnd".equals(codeString))
1003          return new Enumeration<SlicingRules>(this, SlicingRules.OPENATEND, code);
1004        throw new FHIRException("Unknown SlicingRules code '"+codeString+"'");
1005        }
1006    public String toCode(SlicingRules code) {
1007      if (code == SlicingRules.CLOSED)
1008        return "closed";
1009      if (code == SlicingRules.OPEN)
1010        return "open";
1011      if (code == SlicingRules.OPENATEND)
1012        return "openAtEnd";
1013      return "?";
1014      }
1015    public String toSystem(SlicingRules code) {
1016      return code.getSystem();
1017      }
1018    }
1019
1020    @Block()
1021    public static class ElementDefinitionSlicingComponent extends Element implements IBaseDatatypeElement {
1022        /**
1023         * 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.
1024         */
1025        @Child(name = "discriminator", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1026        @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." )
1027        protected List<ElementDefinitionSlicingDiscriminatorComponent> discriminator;
1028
1029        /**
1030         * 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.
1031         */
1032        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1033        @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." )
1034        protected StringType description;
1035
1036        /**
1037         * If the matching elements have to occur in the same order as defined in the profile.
1038         */
1039        @Child(name = "ordered", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1040        @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." )
1041        protected BooleanType ordered;
1042
1043        /**
1044         * 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.
1045         */
1046        @Child(name = "rules", type = {CodeType.class}, order=4, min=1, max=1, modifier=false, summary=true)
1047        @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." )
1048        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-slicing-rules")
1049        protected Enumeration<SlicingRules> rules;
1050
1051        private static final long serialVersionUID = -311635839L;
1052
1053    /**
1054     * Constructor
1055     */
1056      public ElementDefinitionSlicingComponent() {
1057        super();
1058      }
1059
1060    /**
1061     * Constructor
1062     */
1063      public ElementDefinitionSlicingComponent(SlicingRules rules) {
1064        super();
1065        this.setRules(rules);
1066      }
1067
1068        /**
1069         * @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.)
1070         */
1071        public List<ElementDefinitionSlicingDiscriminatorComponent> getDiscriminator() { 
1072          if (this.discriminator == null)
1073            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1074          return this.discriminator;
1075        }
1076
1077        /**
1078         * @return Returns a reference to <code>this</code> for easy method chaining
1079         */
1080        public ElementDefinitionSlicingComponent setDiscriminator(List<ElementDefinitionSlicingDiscriminatorComponent> theDiscriminator) { 
1081          this.discriminator = theDiscriminator;
1082          return this;
1083        }
1084
1085        public boolean hasDiscriminator() { 
1086          if (this.discriminator == null)
1087            return false;
1088          for (ElementDefinitionSlicingDiscriminatorComponent item : this.discriminator)
1089            if (!item.isEmpty())
1090              return true;
1091          return false;
1092        }
1093
1094        public ElementDefinitionSlicingDiscriminatorComponent addDiscriminator() { //3
1095          ElementDefinitionSlicingDiscriminatorComponent t = new ElementDefinitionSlicingDiscriminatorComponent();
1096          if (this.discriminator == null)
1097            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1098          this.discriminator.add(t);
1099          return t;
1100        }
1101
1102        public ElementDefinitionSlicingComponent addDiscriminator(ElementDefinitionSlicingDiscriminatorComponent t) { //3
1103          if (t == null)
1104            return this;
1105          if (this.discriminator == null)
1106            this.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1107          this.discriminator.add(t);
1108          return this;
1109        }
1110
1111        /**
1112         * @return The first repetition of repeating field {@link #discriminator}, creating it if it does not already exist {3}
1113         */
1114        public ElementDefinitionSlicingDiscriminatorComponent getDiscriminatorFirstRep() { 
1115          if (getDiscriminator().isEmpty()) {
1116            addDiscriminator();
1117          }
1118          return getDiscriminator().get(0);
1119        }
1120
1121        /**
1122         * @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
1123         */
1124        public StringType getDescriptionElement() { 
1125          if (this.description == null)
1126            if (Configuration.errorOnAutoCreate())
1127              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.description");
1128            else if (Configuration.doAutoCreate())
1129              this.description = new StringType(); // bb
1130          return this.description;
1131        }
1132
1133        public boolean hasDescriptionElement() { 
1134          return this.description != null && !this.description.isEmpty();
1135        }
1136
1137        public boolean hasDescription() { 
1138          return this.description != null && !this.description.isEmpty();
1139        }
1140
1141        /**
1142         * @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
1143         */
1144        public ElementDefinitionSlicingComponent setDescriptionElement(StringType value) { 
1145          this.description = value;
1146          return this;
1147        }
1148
1149        /**
1150         * @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.
1151         */
1152        public String getDescription() { 
1153          return this.description == null ? null : this.description.getValue();
1154        }
1155
1156        /**
1157         * @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.
1158         */
1159        public ElementDefinitionSlicingComponent setDescription(String value) { 
1160          if (Utilities.noString(value))
1161            this.description = null;
1162          else {
1163            if (this.description == null)
1164              this.description = new StringType();
1165            this.description.setValue(value);
1166          }
1167          return this;
1168        }
1169
1170        /**
1171         * @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
1172         */
1173        public BooleanType getOrderedElement() { 
1174          if (this.ordered == null)
1175            if (Configuration.errorOnAutoCreate())
1176              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.ordered");
1177            else if (Configuration.doAutoCreate())
1178              this.ordered = new BooleanType(); // bb
1179          return this.ordered;
1180        }
1181
1182        public boolean hasOrderedElement() { 
1183          return this.ordered != null && !this.ordered.isEmpty();
1184        }
1185
1186        public boolean hasOrdered() { 
1187          return this.ordered != null && !this.ordered.isEmpty();
1188        }
1189
1190        /**
1191         * @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
1192         */
1193        public ElementDefinitionSlicingComponent setOrderedElement(BooleanType value) { 
1194          this.ordered = value;
1195          return this;
1196        }
1197
1198        /**
1199         * @return If the matching elements have to occur in the same order as defined in the profile.
1200         */
1201        public boolean getOrdered() { 
1202          return this.ordered == null || this.ordered.isEmpty() ? false : this.ordered.getValue();
1203        }
1204
1205        /**
1206         * @param value If the matching elements have to occur in the same order as defined in the profile.
1207         */
1208        public ElementDefinitionSlicingComponent setOrdered(boolean value) { 
1209            if (this.ordered == null)
1210              this.ordered = new BooleanType();
1211            this.ordered.setValue(value);
1212          return this;
1213        }
1214
1215        /**
1216         * @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
1217         */
1218        public Enumeration<SlicingRules> getRulesElement() { 
1219          if (this.rules == null)
1220            if (Configuration.errorOnAutoCreate())
1221              throw new Error("Attempt to auto-create ElementDefinitionSlicingComponent.rules");
1222            else if (Configuration.doAutoCreate())
1223              this.rules = new Enumeration<SlicingRules>(new SlicingRulesEnumFactory()); // bb
1224          return this.rules;
1225        }
1226
1227        public boolean hasRulesElement() { 
1228          return this.rules != null && !this.rules.isEmpty();
1229        }
1230
1231        public boolean hasRules() { 
1232          return this.rules != null && !this.rules.isEmpty();
1233        }
1234
1235        /**
1236         * @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
1237         */
1238        public ElementDefinitionSlicingComponent setRulesElement(Enumeration<SlicingRules> value) { 
1239          this.rules = value;
1240          return this;
1241        }
1242
1243        /**
1244         * @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.
1245         */
1246        public SlicingRules getRules() { 
1247          return this.rules == null ? null : this.rules.getValue();
1248        }
1249
1250        /**
1251         * @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.
1252         */
1253        public ElementDefinitionSlicingComponent setRules(SlicingRules value) { 
1254            if (this.rules == null)
1255              this.rules = new Enumeration<SlicingRules>(new SlicingRulesEnumFactory());
1256            this.rules.setValue(value);
1257          return this;
1258        }
1259
1260        protected void listChildren(List<Property> children) {
1261          super.listChildren(children);
1262          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));
1263          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));
1264          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));
1265          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));
1266        }
1267
1268        @Override
1269        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1270          switch (_hash) {
1271          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);
1272          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);
1273          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);
1274          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);
1275          default: return super.getNamedProperty(_hash, _name, _checkValid);
1276          }
1277
1278        }
1279
1280      @Override
1281      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1282        switch (hash) {
1283        case -1888270692: /*discriminator*/ return this.discriminator == null ? new Base[0] : this.discriminator.toArray(new Base[this.discriminator.size()]); // ElementDefinitionSlicingDiscriminatorComponent
1284        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1285        case -1207109523: /*ordered*/ return this.ordered == null ? new Base[0] : new Base[] {this.ordered}; // BooleanType
1286        case 108873975: /*rules*/ return this.rules == null ? new Base[0] : new Base[] {this.rules}; // Enumeration<SlicingRules>
1287        default: return super.getProperty(hash, name, checkValid);
1288        }
1289
1290      }
1291
1292      @Override
1293      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1294        switch (hash) {
1295        case -1888270692: // discriminator
1296          this.getDiscriminator().add((ElementDefinitionSlicingDiscriminatorComponent) value); // ElementDefinitionSlicingDiscriminatorComponent
1297          return value;
1298        case -1724546052: // description
1299          this.description = TypeConvertor.castToString(value); // StringType
1300          return value;
1301        case -1207109523: // ordered
1302          this.ordered = TypeConvertor.castToBoolean(value); // BooleanType
1303          return value;
1304        case 108873975: // rules
1305          value = new SlicingRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
1306          this.rules = (Enumeration) value; // Enumeration<SlicingRules>
1307          return value;
1308        default: return super.setProperty(hash, name, value);
1309        }
1310
1311      }
1312
1313      @Override
1314      public Base setProperty(String name, Base value) throws FHIRException {
1315        if (name.equals("discriminator")) {
1316          this.getDiscriminator().add((ElementDefinitionSlicingDiscriminatorComponent) value);
1317        } else if (name.equals("description")) {
1318          this.description = TypeConvertor.castToString(value); // StringType
1319        } else if (name.equals("ordered")) {
1320          this.ordered = TypeConvertor.castToBoolean(value); // BooleanType
1321        } else if (name.equals("rules")) {
1322          value = new SlicingRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
1323          this.rules = (Enumeration) value; // Enumeration<SlicingRules>
1324        } else
1325          return super.setProperty(name, value);
1326        return value;
1327      }
1328
1329      @Override
1330      public Base makeProperty(int hash, String name) throws FHIRException {
1331        switch (hash) {
1332        case -1888270692:  return addDiscriminator(); 
1333        case -1724546052:  return getDescriptionElement();
1334        case -1207109523:  return getOrderedElement();
1335        case 108873975:  return getRulesElement();
1336        default: return super.makeProperty(hash, name);
1337        }
1338
1339      }
1340
1341      @Override
1342      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1343        switch (hash) {
1344        case -1888270692: /*discriminator*/ return new String[] {};
1345        case -1724546052: /*description*/ return new String[] {"string"};
1346        case -1207109523: /*ordered*/ return new String[] {"boolean"};
1347        case 108873975: /*rules*/ return new String[] {"code"};
1348        default: return super.getTypesForProperty(hash, name);
1349        }
1350
1351      }
1352
1353      @Override
1354      public Base addChild(String name) throws FHIRException {
1355        if (name.equals("discriminator")) {
1356          return addDiscriminator();
1357        }
1358        else if (name.equals("description")) {
1359          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.slicing.description");
1360        }
1361        else if (name.equals("ordered")) {
1362          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.slicing.ordered");
1363        }
1364        else if (name.equals("rules")) {
1365          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.slicing.rules");
1366        }
1367        else
1368          return super.addChild(name);
1369      }
1370
1371      public ElementDefinitionSlicingComponent copy() {
1372        ElementDefinitionSlicingComponent dst = new ElementDefinitionSlicingComponent();
1373        copyValues(dst);
1374        return dst;
1375      }
1376
1377      public void copyValues(ElementDefinitionSlicingComponent dst) {
1378        super.copyValues(dst);
1379        if (discriminator != null) {
1380          dst.discriminator = new ArrayList<ElementDefinitionSlicingDiscriminatorComponent>();
1381          for (ElementDefinitionSlicingDiscriminatorComponent i : discriminator)
1382            dst.discriminator.add(i.copy());
1383        };
1384        dst.description = description == null ? null : description.copy();
1385        dst.ordered = ordered == null ? null : ordered.copy();
1386        dst.rules = rules == null ? null : rules.copy();
1387      }
1388
1389      @Override
1390      public boolean equalsDeep(Base other_) {
1391        if (!super.equalsDeep(other_))
1392          return false;
1393        if (!(other_ instanceof ElementDefinitionSlicingComponent))
1394          return false;
1395        ElementDefinitionSlicingComponent o = (ElementDefinitionSlicingComponent) other_;
1396        return compareDeep(discriminator, o.discriminator, true) && compareDeep(description, o.description, true)
1397           && compareDeep(ordered, o.ordered, true) && compareDeep(rules, o.rules, true);
1398      }
1399
1400      @Override
1401      public boolean equalsShallow(Base other_) {
1402        if (!super.equalsShallow(other_))
1403          return false;
1404        if (!(other_ instanceof ElementDefinitionSlicingComponent))
1405          return false;
1406        ElementDefinitionSlicingComponent o = (ElementDefinitionSlicingComponent) other_;
1407        return compareValues(description, o.description, true) && compareValues(ordered, o.ordered, true) && compareValues(rules, o.rules, true)
1408          ;
1409      }
1410
1411      public boolean isEmpty() {
1412        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(discriminator, description
1413          , ordered, rules);
1414      }
1415
1416  public String fhirType() {
1417    return "ElementDefinition.slicing";
1418
1419  }
1420
1421  }
1422
1423    @Block()
1424    public static class ElementDefinitionSlicingDiscriminatorComponent extends Element implements IBaseDatatypeElement {
1425        /**
1426         * How the element value is interpreted when discrimination is evaluated.
1427         */
1428        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1429        @Description(shortDefinition="value | exists | type | profile | position", formalDefinition="How the element value is interpreted when discrimination is evaluated." )
1430        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/discriminator-type")
1431        protected Enumeration<DiscriminatorType> type;
1432
1433        /**
1434         * A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.
1435         */
1436        @Child(name = "path", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1437        @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." )
1438        protected StringType path;
1439
1440        private static final long serialVersionUID = 1151159293L;
1441
1442    /**
1443     * Constructor
1444     */
1445      public ElementDefinitionSlicingDiscriminatorComponent() {
1446        super();
1447      }
1448
1449    /**
1450     * Constructor
1451     */
1452      public ElementDefinitionSlicingDiscriminatorComponent(DiscriminatorType type, String path) {
1453        super();
1454        this.setType(type);
1455        this.setPath(path);
1456      }
1457
1458        /**
1459         * @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
1460         */
1461        public Enumeration<DiscriminatorType> getTypeElement() { 
1462          if (this.type == null)
1463            if (Configuration.errorOnAutoCreate())
1464              throw new Error("Attempt to auto-create ElementDefinitionSlicingDiscriminatorComponent.type");
1465            else if (Configuration.doAutoCreate())
1466              this.type = new Enumeration<DiscriminatorType>(new DiscriminatorTypeEnumFactory()); // bb
1467          return this.type;
1468        }
1469
1470        public boolean hasTypeElement() { 
1471          return this.type != null && !this.type.isEmpty();
1472        }
1473
1474        public boolean hasType() { 
1475          return this.type != null && !this.type.isEmpty();
1476        }
1477
1478        /**
1479         * @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
1480         */
1481        public ElementDefinitionSlicingDiscriminatorComponent setTypeElement(Enumeration<DiscriminatorType> value) { 
1482          this.type = value;
1483          return this;
1484        }
1485
1486        /**
1487         * @return How the element value is interpreted when discrimination is evaluated.
1488         */
1489        public DiscriminatorType getType() { 
1490          return this.type == null ? null : this.type.getValue();
1491        }
1492
1493        /**
1494         * @param value How the element value is interpreted when discrimination is evaluated.
1495         */
1496        public ElementDefinitionSlicingDiscriminatorComponent setType(DiscriminatorType value) { 
1497            if (this.type == null)
1498              this.type = new Enumeration<DiscriminatorType>(new DiscriminatorTypeEnumFactory());
1499            this.type.setValue(value);
1500          return this;
1501        }
1502
1503        /**
1504         * @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
1505         */
1506        public StringType getPathElement() { 
1507          if (this.path == null)
1508            if (Configuration.errorOnAutoCreate())
1509              throw new Error("Attempt to auto-create ElementDefinitionSlicingDiscriminatorComponent.path");
1510            else if (Configuration.doAutoCreate())
1511              this.path = new StringType(); // bb
1512          return this.path;
1513        }
1514
1515        public boolean hasPathElement() { 
1516          return this.path != null && !this.path.isEmpty();
1517        }
1518
1519        public boolean hasPath() { 
1520          return this.path != null && !this.path.isEmpty();
1521        }
1522
1523        /**
1524         * @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
1525         */
1526        public ElementDefinitionSlicingDiscriminatorComponent setPathElement(StringType value) { 
1527          this.path = value;
1528          return this;
1529        }
1530
1531        /**
1532         * @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.
1533         */
1534        public String getPath() { 
1535          return this.path == null ? null : this.path.getValue();
1536        }
1537
1538        /**
1539         * @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.
1540         */
1541        public ElementDefinitionSlicingDiscriminatorComponent setPath(String value) { 
1542            if (this.path == null)
1543              this.path = new StringType();
1544            this.path.setValue(value);
1545          return this;
1546        }
1547
1548        protected void listChildren(List<Property> children) {
1549          super.listChildren(children);
1550          children.add(new Property("type", "code", "How the element value is interpreted when discrimination is evaluated.", 0, 1, type));
1551          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));
1552        }
1553
1554        @Override
1555        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1556          switch (_hash) {
1557          case 3575610: /*type*/  return new Property("type", "code", "How the element value is interpreted when discrimination is evaluated.", 0, 1, type);
1558          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);
1559          default: return super.getNamedProperty(_hash, _name, _checkValid);
1560          }
1561
1562        }
1563
1564      @Override
1565      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1566        switch (hash) {
1567        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<DiscriminatorType>
1568        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
1569        default: return super.getProperty(hash, name, checkValid);
1570        }
1571
1572      }
1573
1574      @Override
1575      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1576        switch (hash) {
1577        case 3575610: // type
1578          value = new DiscriminatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1579          this.type = (Enumeration) value; // Enumeration<DiscriminatorType>
1580          return value;
1581        case 3433509: // path
1582          this.path = TypeConvertor.castToString(value); // StringType
1583          return value;
1584        default: return super.setProperty(hash, name, value);
1585        }
1586
1587      }
1588
1589      @Override
1590      public Base setProperty(String name, Base value) throws FHIRException {
1591        if (name.equals("type")) {
1592          value = new DiscriminatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1593          this.type = (Enumeration) value; // Enumeration<DiscriminatorType>
1594        } else if (name.equals("path")) {
1595          this.path = TypeConvertor.castToString(value); // StringType
1596        } else
1597          return super.setProperty(name, value);
1598        return value;
1599      }
1600
1601      @Override
1602      public Base makeProperty(int hash, String name) throws FHIRException {
1603        switch (hash) {
1604        case 3575610:  return getTypeElement();
1605        case 3433509:  return getPathElement();
1606        default: return super.makeProperty(hash, name);
1607        }
1608
1609      }
1610
1611      @Override
1612      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1613        switch (hash) {
1614        case 3575610: /*type*/ return new String[] {"code"};
1615        case 3433509: /*path*/ return new String[] {"string"};
1616        default: return super.getTypesForProperty(hash, name);
1617        }
1618
1619      }
1620
1621      @Override
1622      public Base addChild(String name) throws FHIRException {
1623        if (name.equals("type")) {
1624          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.slicing.discriminator.type");
1625        }
1626        else if (name.equals("path")) {
1627          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.slicing.discriminator.path");
1628        }
1629        else
1630          return super.addChild(name);
1631      }
1632
1633      public ElementDefinitionSlicingDiscriminatorComponent copy() {
1634        ElementDefinitionSlicingDiscriminatorComponent dst = new ElementDefinitionSlicingDiscriminatorComponent();
1635        copyValues(dst);
1636        return dst;
1637      }
1638
1639      public void copyValues(ElementDefinitionSlicingDiscriminatorComponent dst) {
1640        super.copyValues(dst);
1641        dst.type = type == null ? null : type.copy();
1642        dst.path = path == null ? null : path.copy();
1643      }
1644
1645      @Override
1646      public boolean equalsDeep(Base other_) {
1647        if (!super.equalsDeep(other_))
1648          return false;
1649        if (!(other_ instanceof ElementDefinitionSlicingDiscriminatorComponent))
1650          return false;
1651        ElementDefinitionSlicingDiscriminatorComponent o = (ElementDefinitionSlicingDiscriminatorComponent) other_;
1652        return compareDeep(type, o.type, true) && compareDeep(path, o.path, true);
1653      }
1654
1655      @Override
1656      public boolean equalsShallow(Base other_) {
1657        if (!super.equalsShallow(other_))
1658          return false;
1659        if (!(other_ instanceof ElementDefinitionSlicingDiscriminatorComponent))
1660          return false;
1661        ElementDefinitionSlicingDiscriminatorComponent o = (ElementDefinitionSlicingDiscriminatorComponent) other_;
1662        return compareValues(type, o.type, true) && compareValues(path, o.path, true);
1663      }
1664
1665      public boolean isEmpty() {
1666        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, path);
1667      }
1668
1669  public String fhirType() {
1670    return "ElementDefinition.slicing.discriminator";
1671
1672  }
1673
1674  }
1675
1676    @Block()
1677    public static class ElementDefinitionBaseComponent extends Element implements IBaseDatatypeElement {
1678        /**
1679         * 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.
1680         */
1681        @Child(name = "path", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1682        @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." )
1683        protected StringType path;
1684
1685        /**
1686         * Minimum cardinality of the base element identified by the path.
1687         */
1688        @Child(name = "min", type = {UnsignedIntType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1689        @Description(shortDefinition="Min cardinality of the base element", formalDefinition="Minimum cardinality of the base element identified by the path." )
1690        protected UnsignedIntType min;
1691
1692        /**
1693         * Maximum cardinality of the base element identified by the path.
1694         */
1695        @Child(name = "max", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1696        @Description(shortDefinition="Max cardinality of the base element", formalDefinition="Maximum cardinality of the base element identified by the path." )
1697        protected StringType max;
1698
1699        private static final long serialVersionUID = -1412704221L;
1700
1701    /**
1702     * Constructor
1703     */
1704      public ElementDefinitionBaseComponent() {
1705        super();
1706      }
1707
1708    /**
1709     * Constructor
1710     */
1711      public ElementDefinitionBaseComponent(String path, int min, String max) {
1712        super();
1713        this.setPath(path);
1714        this.setMin(min);
1715        this.setMax(max);
1716      }
1717
1718        /**
1719         * @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
1720         */
1721        public StringType getPathElement() { 
1722          if (this.path == null)
1723            if (Configuration.errorOnAutoCreate())
1724              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.path");
1725            else if (Configuration.doAutoCreate())
1726              this.path = new StringType(); // bb
1727          return this.path;
1728        }
1729
1730        public boolean hasPathElement() { 
1731          return this.path != null && !this.path.isEmpty();
1732        }
1733
1734        public boolean hasPath() { 
1735          return this.path != null && !this.path.isEmpty();
1736        }
1737
1738        /**
1739         * @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
1740         */
1741        public ElementDefinitionBaseComponent setPathElement(StringType value) { 
1742          this.path = value;
1743          return this;
1744        }
1745
1746        /**
1747         * @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.
1748         */
1749        public String getPath() { 
1750          return this.path == null ? null : this.path.getValue();
1751        }
1752
1753        /**
1754         * @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.
1755         */
1756        public ElementDefinitionBaseComponent setPath(String value) { 
1757            if (this.path == null)
1758              this.path = new StringType();
1759            this.path.setValue(value);
1760          return this;
1761        }
1762
1763        /**
1764         * @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
1765         */
1766        public UnsignedIntType getMinElement() { 
1767          if (this.min == null)
1768            if (Configuration.errorOnAutoCreate())
1769              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.min");
1770            else if (Configuration.doAutoCreate())
1771              this.min = new UnsignedIntType(); // bb
1772          return this.min;
1773        }
1774
1775        public boolean hasMinElement() { 
1776          return this.min != null && !this.min.isEmpty();
1777        }
1778
1779        public boolean hasMin() { 
1780          return this.min != null && !this.min.isEmpty();
1781        }
1782
1783        /**
1784         * @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
1785         */
1786        public ElementDefinitionBaseComponent setMinElement(UnsignedIntType value) { 
1787          this.min = value;
1788          return this;
1789        }
1790
1791        /**
1792         * @return Minimum cardinality of the base element identified by the path.
1793         */
1794        public int getMin() { 
1795          return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
1796        }
1797
1798        /**
1799         * @param value Minimum cardinality of the base element identified by the path.
1800         */
1801        public ElementDefinitionBaseComponent setMin(int value) { 
1802            if (this.min == null)
1803              this.min = new UnsignedIntType();
1804            this.min.setValue(value);
1805          return this;
1806        }
1807
1808        /**
1809         * @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
1810         */
1811        public StringType getMaxElement() { 
1812          if (this.max == null)
1813            if (Configuration.errorOnAutoCreate())
1814              throw new Error("Attempt to auto-create ElementDefinitionBaseComponent.max");
1815            else if (Configuration.doAutoCreate())
1816              this.max = new StringType(); // bb
1817          return this.max;
1818        }
1819
1820        public boolean hasMaxElement() { 
1821          return this.max != null && !this.max.isEmpty();
1822        }
1823
1824        public boolean hasMax() { 
1825          return this.max != null && !this.max.isEmpty();
1826        }
1827
1828        /**
1829         * @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
1830         */
1831        public ElementDefinitionBaseComponent setMaxElement(StringType value) { 
1832          this.max = value;
1833          return this;
1834        }
1835
1836        /**
1837         * @return Maximum cardinality of the base element identified by the path.
1838         */
1839        public String getMax() { 
1840          return this.max == null ? null : this.max.getValue();
1841        }
1842
1843        /**
1844         * @param value Maximum cardinality of the base element identified by the path.
1845         */
1846        public ElementDefinitionBaseComponent setMax(String value) { 
1847            if (this.max == null)
1848              this.max = new StringType();
1849            this.max.setValue(value);
1850          return this;
1851        }
1852
1853        protected void listChildren(List<Property> children) {
1854          super.listChildren(children);
1855          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));
1856          children.add(new Property("min", "unsignedInt", "Minimum cardinality of the base element identified by the path.", 0, 1, min));
1857          children.add(new Property("max", "string", "Maximum cardinality of the base element identified by the path.", 0, 1, max));
1858        }
1859
1860        @Override
1861        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1862          switch (_hash) {
1863          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);
1864          case 108114: /*min*/  return new Property("min", "unsignedInt", "Minimum cardinality of the base element identified by the path.", 0, 1, min);
1865          case 107876: /*max*/  return new Property("max", "string", "Maximum cardinality of the base element identified by the path.", 0, 1, max);
1866          default: return super.getNamedProperty(_hash, _name, _checkValid);
1867          }
1868
1869        }
1870
1871      @Override
1872      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1873        switch (hash) {
1874        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
1875        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // UnsignedIntType
1876        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
1877        default: return super.getProperty(hash, name, checkValid);
1878        }
1879
1880      }
1881
1882      @Override
1883      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1884        switch (hash) {
1885        case 3433509: // path
1886          this.path = TypeConvertor.castToString(value); // StringType
1887          return value;
1888        case 108114: // min
1889          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1890          return value;
1891        case 107876: // max
1892          this.max = TypeConvertor.castToString(value); // StringType
1893          return value;
1894        default: return super.setProperty(hash, name, value);
1895        }
1896
1897      }
1898
1899      @Override
1900      public Base setProperty(String name, Base value) throws FHIRException {
1901        if (name.equals("path")) {
1902          this.path = TypeConvertor.castToString(value); // StringType
1903        } else if (name.equals("min")) {
1904          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1905        } else if (name.equals("max")) {
1906          this.max = TypeConvertor.castToString(value); // StringType
1907        } else
1908          return super.setProperty(name, value);
1909        return value;
1910      }
1911
1912      @Override
1913      public Base makeProperty(int hash, String name) throws FHIRException {
1914        switch (hash) {
1915        case 3433509:  return getPathElement();
1916        case 108114:  return getMinElement();
1917        case 107876:  return getMaxElement();
1918        default: return super.makeProperty(hash, name);
1919        }
1920
1921      }
1922
1923      @Override
1924      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1925        switch (hash) {
1926        case 3433509: /*path*/ return new String[] {"string"};
1927        case 108114: /*min*/ return new String[] {"unsignedInt"};
1928        case 107876: /*max*/ return new String[] {"string"};
1929        default: return super.getTypesForProperty(hash, name);
1930        }
1931
1932      }
1933
1934      @Override
1935      public Base addChild(String name) throws FHIRException {
1936        if (name.equals("path")) {
1937          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.base.path");
1938        }
1939        else if (name.equals("min")) {
1940          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.base.min");
1941        }
1942        else if (name.equals("max")) {
1943          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.base.max");
1944        }
1945        else
1946          return super.addChild(name);
1947      }
1948
1949      public ElementDefinitionBaseComponent copy() {
1950        ElementDefinitionBaseComponent dst = new ElementDefinitionBaseComponent();
1951        copyValues(dst);
1952        return dst;
1953      }
1954
1955      public void copyValues(ElementDefinitionBaseComponent dst) {
1956        super.copyValues(dst);
1957        dst.path = path == null ? null : path.copy();
1958        dst.min = min == null ? null : min.copy();
1959        dst.max = max == null ? null : max.copy();
1960      }
1961
1962      @Override
1963      public boolean equalsDeep(Base other_) {
1964        if (!super.equalsDeep(other_))
1965          return false;
1966        if (!(other_ instanceof ElementDefinitionBaseComponent))
1967          return false;
1968        ElementDefinitionBaseComponent o = (ElementDefinitionBaseComponent) other_;
1969        return compareDeep(path, o.path, true) && compareDeep(min, o.min, true) && compareDeep(max, o.max, true)
1970          ;
1971      }
1972
1973      @Override
1974      public boolean equalsShallow(Base other_) {
1975        if (!super.equalsShallow(other_))
1976          return false;
1977        if (!(other_ instanceof ElementDefinitionBaseComponent))
1978          return false;
1979        ElementDefinitionBaseComponent o = (ElementDefinitionBaseComponent) other_;
1980        return compareValues(path, o.path, true) && compareValues(min, o.min, true) && compareValues(max, o.max, true)
1981          ;
1982      }
1983
1984      public boolean isEmpty() {
1985        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(path, min, max);
1986      }
1987
1988  public String fhirType() {
1989    return "ElementDefinition.base";
1990
1991  }
1992
1993  }
1994
1995    @Block()
1996    public static class TypeRefComponent extends Element implements IBaseDatatypeElement {
1997        /**
1998         * 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.
1999         */
2000        @Child(name = "code", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2001        @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." )
2002        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/elementdefinition-types")
2003        protected UriType code;
2004
2005        /**
2006         * 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.
2007         */
2008        @Child(name = "profile", type = {CanonicalType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2009        @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." )
2010        protected List<CanonicalType> profile;
2011
2012        /**
2013         * 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.
2014         */
2015        @Child(name = "targetProfile", type = {CanonicalType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2016        @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." )
2017        protected List<CanonicalType> targetProfile;
2018
2019        /**
2020         * 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.
2021         */
2022        @Child(name = "aggregation", type = {CodeType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2023        @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." )
2024        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/resource-aggregation-mode")
2025        protected List<Enumeration<AggregationMode>> aggregation;
2026
2027        /**
2028         * Whether this reference needs to be version specific or version independent, or whether either can be used.
2029         */
2030        @Child(name = "versioning", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
2031        @Description(shortDefinition="either | independent | specific", formalDefinition="Whether this reference needs to be version specific or version independent, or whether either can be used." )
2032        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/reference-version-rules")
2033        protected Enumeration<ReferenceVersionRules> versioning;
2034
2035        private static final long serialVersionUID = 957891653L;
2036
2037    /**
2038     * Constructor
2039     */
2040      public TypeRefComponent() {
2041        super();
2042      }
2043
2044    /**
2045     * Constructor
2046     */
2047      public TypeRefComponent(String code) {
2048        super();
2049        this.setCode(code);
2050      }
2051
2052        /**
2053         * @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
2054         */
2055        public UriType getCodeElement() { 
2056          if (this.code == null)
2057            if (Configuration.errorOnAutoCreate())
2058              throw new Error("Attempt to auto-create TypeRefComponent.code");
2059            else if (Configuration.doAutoCreate())
2060              this.code = new UriType(); // bb
2061          return this.code;
2062        }
2063
2064        public boolean hasCodeElement() { 
2065          return this.code != null && !this.code.isEmpty();
2066        }
2067
2068        public boolean hasCode() { 
2069          return this.code != null && !this.code.isEmpty();
2070        }
2071
2072        /**
2073         * @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
2074         */
2075        public TypeRefComponent setCodeElement(UriType value) { 
2076          this.code = value;
2077          return this;
2078        }
2079
2080        /**
2081         * @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.
2082         */
2083        public String getCode() { 
2084          return this.code == null ? null : this.code.getValue();
2085        }
2086
2087        /**
2088         * @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.
2089         */
2090        public TypeRefComponent setCode(String value) { 
2091            if (this.code == null)
2092              this.code = new UriType();
2093            this.code.setValue(value);
2094          return this;
2095        }
2096
2097        /**
2098         * @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.)
2099         */
2100        public List<CanonicalType> getProfile() { 
2101          if (this.profile == null)
2102            this.profile = new ArrayList<CanonicalType>();
2103          return this.profile;
2104        }
2105
2106        /**
2107         * @return Returns a reference to <code>this</code> for easy method chaining
2108         */
2109        public TypeRefComponent setProfile(List<CanonicalType> theProfile) { 
2110          this.profile = theProfile;
2111          return this;
2112        }
2113
2114        public boolean hasProfile() { 
2115          if (this.profile == null)
2116            return false;
2117          for (CanonicalType item : this.profile)
2118            if (!item.isEmpty())
2119              return true;
2120          return false;
2121        }
2122
2123        /**
2124         * @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.)
2125         */
2126        public CanonicalType addProfileElement() {//2 
2127          CanonicalType t = new CanonicalType();
2128          if (this.profile == null)
2129            this.profile = new ArrayList<CanonicalType>();
2130          this.profile.add(t);
2131          return t;
2132        }
2133
2134        /**
2135         * @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.)
2136         */
2137        public TypeRefComponent addProfile(String value) { //1
2138          CanonicalType t = new CanonicalType();
2139          t.setValue(value);
2140          if (this.profile == null)
2141            this.profile = new ArrayList<CanonicalType>();
2142          this.profile.add(t);
2143          return this;
2144        }
2145
2146        /**
2147         * @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.)
2148         */
2149        public boolean hasProfile(String value) { 
2150          if (this.profile == null)
2151            return false;
2152          for (CanonicalType v : this.profile)
2153            if (v.getValue().equals(value)) // canonical
2154              return true;
2155          return false;
2156        }
2157
2158        /**
2159         * @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.)
2160         */
2161        public List<CanonicalType> getTargetProfile() { 
2162          if (this.targetProfile == null)
2163            this.targetProfile = new ArrayList<CanonicalType>();
2164          return this.targetProfile;
2165        }
2166
2167        /**
2168         * @return Returns a reference to <code>this</code> for easy method chaining
2169         */
2170        public TypeRefComponent setTargetProfile(List<CanonicalType> theTargetProfile) { 
2171          this.targetProfile = theTargetProfile;
2172          return this;
2173        }
2174
2175        public boolean hasTargetProfile() { 
2176          if (this.targetProfile == null)
2177            return false;
2178          for (CanonicalType item : this.targetProfile)
2179            if (!item.isEmpty())
2180              return true;
2181          return false;
2182        }
2183
2184        /**
2185         * @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.)
2186         */
2187        public CanonicalType addTargetProfileElement() {//2 
2188          CanonicalType t = new CanonicalType();
2189          if (this.targetProfile == null)
2190            this.targetProfile = new ArrayList<CanonicalType>();
2191          this.targetProfile.add(t);
2192          return t;
2193        }
2194
2195        /**
2196         * @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.)
2197         */
2198        public TypeRefComponent addTargetProfile(String value) { //1
2199          CanonicalType t = new CanonicalType();
2200          t.setValue(value);
2201          if (this.targetProfile == null)
2202            this.targetProfile = new ArrayList<CanonicalType>();
2203          this.targetProfile.add(t);
2204          return this;
2205        }
2206
2207        /**
2208         * @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.)
2209         */
2210        public boolean hasTargetProfile(String value) { 
2211          if (this.targetProfile == null)
2212            return false;
2213          for (CanonicalType v : this.targetProfile)
2214            if (v.getValue().equals(value)) // canonical
2215              return true;
2216          return false;
2217        }
2218
2219        /**
2220         * @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.)
2221         */
2222        public List<Enumeration<AggregationMode>> getAggregation() { 
2223          if (this.aggregation == null)
2224            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2225          return this.aggregation;
2226        }
2227
2228        /**
2229         * @return Returns a reference to <code>this</code> for easy method chaining
2230         */
2231        public TypeRefComponent setAggregation(List<Enumeration<AggregationMode>> theAggregation) { 
2232          this.aggregation = theAggregation;
2233          return this;
2234        }
2235
2236        public boolean hasAggregation() { 
2237          if (this.aggregation == null)
2238            return false;
2239          for (Enumeration<AggregationMode> item : this.aggregation)
2240            if (!item.isEmpty())
2241              return true;
2242          return false;
2243        }
2244
2245        /**
2246         * @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.)
2247         */
2248        public Enumeration<AggregationMode> addAggregationElement() {//2 
2249          Enumeration<AggregationMode> t = new Enumeration<AggregationMode>(new AggregationModeEnumFactory());
2250          if (this.aggregation == null)
2251            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2252          this.aggregation.add(t);
2253          return t;
2254        }
2255
2256        /**
2257         * @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.)
2258         */
2259        public TypeRefComponent addAggregation(AggregationMode value) { //1
2260          Enumeration<AggregationMode> t = new Enumeration<AggregationMode>(new AggregationModeEnumFactory());
2261          t.setValue(value);
2262          if (this.aggregation == null)
2263            this.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2264          this.aggregation.add(t);
2265          return this;
2266        }
2267
2268        /**
2269         * @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.)
2270         */
2271        public boolean hasAggregation(AggregationMode value) { 
2272          if (this.aggregation == null)
2273            return false;
2274          for (Enumeration<AggregationMode> v : this.aggregation)
2275            if (v.getValue().equals(value)) // code
2276              return true;
2277          return false;
2278        }
2279
2280        /**
2281         * @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
2282         */
2283        public Enumeration<ReferenceVersionRules> getVersioningElement() { 
2284          if (this.versioning == null)
2285            if (Configuration.errorOnAutoCreate())
2286              throw new Error("Attempt to auto-create TypeRefComponent.versioning");
2287            else if (Configuration.doAutoCreate())
2288              this.versioning = new Enumeration<ReferenceVersionRules>(new ReferenceVersionRulesEnumFactory()); // bb
2289          return this.versioning;
2290        }
2291
2292        public boolean hasVersioningElement() { 
2293          return this.versioning != null && !this.versioning.isEmpty();
2294        }
2295
2296        public boolean hasVersioning() { 
2297          return this.versioning != null && !this.versioning.isEmpty();
2298        }
2299
2300        /**
2301         * @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
2302         */
2303        public TypeRefComponent setVersioningElement(Enumeration<ReferenceVersionRules> value) { 
2304          this.versioning = value;
2305          return this;
2306        }
2307
2308        /**
2309         * @return Whether this reference needs to be version specific or version independent, or whether either can be used.
2310         */
2311        public ReferenceVersionRules getVersioning() { 
2312          return this.versioning == null ? null : this.versioning.getValue();
2313        }
2314
2315        /**
2316         * @param value Whether this reference needs to be version specific or version independent, or whether either can be used.
2317         */
2318        public TypeRefComponent setVersioning(ReferenceVersionRules value) { 
2319          if (value == null)
2320            this.versioning = null;
2321          else {
2322            if (this.versioning == null)
2323              this.versioning = new Enumeration<ReferenceVersionRules>(new ReferenceVersionRulesEnumFactory());
2324            this.versioning.setValue(value);
2325          }
2326          return this;
2327        }
2328
2329        protected void listChildren(List<Property> children) {
2330          super.listChildren(children);
2331          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));
2332          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));
2333          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));
2334          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));
2335          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));
2336        }
2337
2338        @Override
2339        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2340          switch (_hash) {
2341          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);
2342          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);
2343          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);
2344          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);
2345          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);
2346          default: return super.getNamedProperty(_hash, _name, _checkValid);
2347          }
2348
2349        }
2350
2351      @Override
2352      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2353        switch (hash) {
2354        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // UriType
2355        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : this.profile.toArray(new Base[this.profile.size()]); // CanonicalType
2356        case 1994521304: /*targetProfile*/ return this.targetProfile == null ? new Base[0] : this.targetProfile.toArray(new Base[this.targetProfile.size()]); // CanonicalType
2357        case 841524962: /*aggregation*/ return this.aggregation == null ? new Base[0] : this.aggregation.toArray(new Base[this.aggregation.size()]); // Enumeration<AggregationMode>
2358        case -670487542: /*versioning*/ return this.versioning == null ? new Base[0] : new Base[] {this.versioning}; // Enumeration<ReferenceVersionRules>
2359        default: return super.getProperty(hash, name, checkValid);
2360        }
2361
2362      }
2363
2364      @Override
2365      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2366        switch (hash) {
2367        case 3059181: // code
2368          this.code = TypeConvertor.castToUri(value); // UriType
2369          return value;
2370        case -309425751: // profile
2371          this.getProfile().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2372          return value;
2373        case 1994521304: // targetProfile
2374          this.getTargetProfile().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2375          return value;
2376        case 841524962: // aggregation
2377          value = new AggregationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
2378          this.getAggregation().add((Enumeration) value); // Enumeration<AggregationMode>
2379          return value;
2380        case -670487542: // versioning
2381          value = new ReferenceVersionRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
2382          this.versioning = (Enumeration) value; // Enumeration<ReferenceVersionRules>
2383          return value;
2384        default: return super.setProperty(hash, name, value);
2385        }
2386
2387      }
2388
2389      @Override
2390      public Base setProperty(String name, Base value) throws FHIRException {
2391        if (name.equals("code")) {
2392          this.code = TypeConvertor.castToUri(value); // UriType
2393        } else if (name.equals("profile")) {
2394          this.getProfile().add(TypeConvertor.castToCanonical(value));
2395        } else if (name.equals("targetProfile")) {
2396          this.getTargetProfile().add(TypeConvertor.castToCanonical(value));
2397        } else if (name.equals("aggregation")) {
2398          value = new AggregationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
2399          this.getAggregation().add((Enumeration) value);
2400        } else if (name.equals("versioning")) {
2401          value = new ReferenceVersionRulesEnumFactory().fromType(TypeConvertor.castToCode(value));
2402          this.versioning = (Enumeration) value; // Enumeration<ReferenceVersionRules>
2403        } else
2404          return super.setProperty(name, value);
2405        return value;
2406      }
2407
2408      @Override
2409      public Base makeProperty(int hash, String name) throws FHIRException {
2410        switch (hash) {
2411        case 3059181:  return getCodeElement();
2412        case -309425751:  return addProfileElement();
2413        case 1994521304:  return addTargetProfileElement();
2414        case 841524962:  return addAggregationElement();
2415        case -670487542:  return getVersioningElement();
2416        default: return super.makeProperty(hash, name);
2417        }
2418
2419      }
2420
2421      @Override
2422      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2423        switch (hash) {
2424        case 3059181: /*code*/ return new String[] {"uri"};
2425        case -309425751: /*profile*/ return new String[] {"canonical"};
2426        case 1994521304: /*targetProfile*/ return new String[] {"canonical"};
2427        case 841524962: /*aggregation*/ return new String[] {"code"};
2428        case -670487542: /*versioning*/ return new String[] {"code"};
2429        default: return super.getTypesForProperty(hash, name);
2430        }
2431
2432      }
2433
2434      @Override
2435      public Base addChild(String name) throws FHIRException {
2436        if (name.equals("code")) {
2437          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.type.code");
2438        }
2439        else if (name.equals("profile")) {
2440          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.type.profile");
2441        }
2442        else if (name.equals("targetProfile")) {
2443          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.type.targetProfile");
2444        }
2445        else if (name.equals("aggregation")) {
2446          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.type.aggregation");
2447        }
2448        else if (name.equals("versioning")) {
2449          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.type.versioning");
2450        }
2451        else
2452          return super.addChild(name);
2453      }
2454
2455      public TypeRefComponent copy() {
2456        TypeRefComponent dst = new TypeRefComponent();
2457        copyValues(dst);
2458        return dst;
2459      }
2460
2461      public void copyValues(TypeRefComponent dst) {
2462        super.copyValues(dst);
2463        dst.code = code == null ? null : code.copy();
2464        if (profile != null) {
2465          dst.profile = new ArrayList<CanonicalType>();
2466          for (CanonicalType i : profile)
2467            dst.profile.add(i.copy());
2468        };
2469        if (targetProfile != null) {
2470          dst.targetProfile = new ArrayList<CanonicalType>();
2471          for (CanonicalType i : targetProfile)
2472            dst.targetProfile.add(i.copy());
2473        };
2474        if (aggregation != null) {
2475          dst.aggregation = new ArrayList<Enumeration<AggregationMode>>();
2476          for (Enumeration<AggregationMode> i : aggregation)
2477            dst.aggregation.add(i.copy());
2478        };
2479        dst.versioning = versioning == null ? null : versioning.copy();
2480      }
2481
2482      @Override
2483      public boolean equalsDeep(Base other_) {
2484        if (!super.equalsDeep(other_))
2485          return false;
2486        if (!(other_ instanceof TypeRefComponent))
2487          return false;
2488        TypeRefComponent o = (TypeRefComponent) other_;
2489        return compareDeep(code, o.code, true) && compareDeep(profile, o.profile, true) && compareDeep(targetProfile, o.targetProfile, true)
2490           && compareDeep(aggregation, o.aggregation, true) && compareDeep(versioning, o.versioning, true)
2491          ;
2492      }
2493
2494      @Override
2495      public boolean equalsShallow(Base other_) {
2496        if (!super.equalsShallow(other_))
2497          return false;
2498        if (!(other_ instanceof TypeRefComponent))
2499          return false;
2500        TypeRefComponent o = (TypeRefComponent) other_;
2501        return compareValues(code, o.code, true) && compareValues(profile, o.profile, true) && compareValues(targetProfile, o.targetProfile, true)
2502           && compareValues(aggregation, o.aggregation, true) && compareValues(versioning, o.versioning, true)
2503          ;
2504      }
2505
2506      public boolean isEmpty() {
2507        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, profile, targetProfile
2508          , aggregation, versioning);
2509      }
2510
2511  public String fhirType() {
2512    return "ElementDefinition.type";
2513
2514  }
2515
2516// added from java-adornments.txt:
2517public boolean hasTarget() {
2518    return Utilities.existsInList(getCode(), "Reference", "canonical", "CodeableReference");
2519  }
2520  
2521    /**
2522   * This code checks for the system prefix and returns the FHIR type
2523   * 
2524   * @return
2525   */
2526  public String getWorkingCode() {
2527    if (hasExtension(ToolingExtensions.EXT_FHIR_TYPE))
2528      return getExtensionString(ToolingExtensions.EXT_FHIR_TYPE);
2529    if (!hasCodeElement()) 
2530      return null;
2531    if (getCodeElement().hasExtension(ToolingExtensions.EXT_XML_TYPE)) {
2532      String s = getCodeElement().getExtensionString(ToolingExtensions.EXT_XML_TYPE);
2533      if ("xsd:gYear OR xsd:gYearMonth OR xsd:date OR xsd:dateTime".equalsIgnoreCase(s))
2534        return "dateTime";
2535      if ("xsd:gYear OR xsd:gYearMonth OR xsd:date".equalsIgnoreCase(s))
2536        return "date";
2537      if ("xsd:dateTime".equalsIgnoreCase(s))
2538        return "instant";
2539      if ("xsd:token".equals(s))
2540        return "code";
2541      if ("xsd:boolean".equals(s))
2542        return "boolean";
2543      if ("xsd:string".equals(s))
2544        return "string";
2545      if ("xsd:time".equals(s))
2546        return "time";
2547      if ("xsd:int".equals(s))
2548        return "integer";
2549      if ("xsd:decimal OR xsd:double".equals(s))
2550        return "decimal";
2551      if ("xsd:decimal".equalsIgnoreCase(s))
2552        return "decimal";
2553      if ("xsd:base64Binary".equalsIgnoreCase(s))
2554        return "base64Binary";
2555      if ("xsd:positiveInteger".equalsIgnoreCase(s))
2556        return "positiveInt";
2557      if ("xsd:nonNegativeInteger".equalsIgnoreCase(s))
2558        return "unsignedInt";
2559      if ("xsd:anyURI".equalsIgnoreCase(s))
2560        return "uri";
2561      
2562      throw new Error("Unknown xml type '"+s+"'");
2563    }
2564    return getCode();
2565  }
2566
2567  @Override
2568  public String toString() {
2569    String res = getCode();
2570    if (hasProfile()) {
2571      res = res + "{";
2572      boolean first = true;
2573      for (CanonicalType s : getProfile()) {
2574        if (first) first = false; else res = res + "|";
2575        res = res + s.getValue();
2576      }
2577      res = res + "}";
2578    }
2579    if (hasTargetProfile()) {
2580      res = res + "->(";
2581      boolean first = true;
2582      for (CanonicalType s : getTargetProfile()) {
2583        if (first) first = false; else res = res + "|";
2584        res = res + s.getValue();
2585      }
2586      res = res + ")";
2587    }    
2588    return res;
2589  }
2590
2591  public String getName() {
2592    return getWorkingCode();
2593  }
2594
2595  public boolean isResourceReference() {
2596    return "Reference".equals(getCode()) && hasTargetProfile();
2597  }
2598// end addition
2599  }
2600
2601    @Block()
2602    public static class ElementDefinitionExampleComponent extends Element implements IBaseDatatypeElement {
2603        /**
2604         * Describes the purpose of this example amoung the set of examples.
2605         */
2606        @Child(name = "label", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2607        @Description(shortDefinition="Describes the purpose of this example", formalDefinition="Describes the purpose of this example amoung the set of examples." )
2608        protected StringType label;
2609
2610        /**
2611         * The actual value for the element, which must be one of the types allowed for this element.
2612         */
2613        @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)
2614        @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." )
2615        protected DataType value;
2616
2617        private static final long serialVersionUID = 463190922L;
2618
2619    /**
2620     * Constructor
2621     */
2622      public ElementDefinitionExampleComponent() {
2623        super();
2624      }
2625
2626    /**
2627     * Constructor
2628     */
2629      public ElementDefinitionExampleComponent(String label, DataType value) {
2630        super();
2631        this.setLabel(label);
2632        this.setValue(value);
2633      }
2634
2635        /**
2636         * @return {@link #label} (Describes the purpose of this example amoung the set of examples.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
2637         */
2638        public StringType getLabelElement() { 
2639          if (this.label == null)
2640            if (Configuration.errorOnAutoCreate())
2641              throw new Error("Attempt to auto-create ElementDefinitionExampleComponent.label");
2642            else if (Configuration.doAutoCreate())
2643              this.label = new StringType(); // bb
2644          return this.label;
2645        }
2646
2647        public boolean hasLabelElement() { 
2648          return this.label != null && !this.label.isEmpty();
2649        }
2650
2651        public boolean hasLabel() { 
2652          return this.label != null && !this.label.isEmpty();
2653        }
2654
2655        /**
2656         * @param value {@link #label} (Describes the purpose of this example amoung the set of examples.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
2657         */
2658        public ElementDefinitionExampleComponent setLabelElement(StringType value) { 
2659          this.label = value;
2660          return this;
2661        }
2662
2663        /**
2664         * @return Describes the purpose of this example amoung the set of examples.
2665         */
2666        public String getLabel() { 
2667          return this.label == null ? null : this.label.getValue();
2668        }
2669
2670        /**
2671         * @param value Describes the purpose of this example amoung the set of examples.
2672         */
2673        public ElementDefinitionExampleComponent setLabel(String value) { 
2674            if (this.label == null)
2675              this.label = new StringType();
2676            this.label.setValue(value);
2677          return this;
2678        }
2679
2680        /**
2681         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2682         */
2683        public DataType getValue() { 
2684          return this.value;
2685        }
2686
2687        /**
2688         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2689         */
2690        public Base64BinaryType getValueBase64BinaryType() throws FHIRException { 
2691          if (this.value == null)
2692            this.value = new Base64BinaryType();
2693          if (!(this.value instanceof Base64BinaryType))
2694            throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.value.getClass().getName()+" was encountered");
2695          return (Base64BinaryType) this.value;
2696        }
2697
2698        public boolean hasValueBase64BinaryType() { 
2699          return this != null && this.value instanceof Base64BinaryType;
2700        }
2701
2702        /**
2703         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2704         */
2705        public BooleanType getValueBooleanType() throws FHIRException { 
2706          if (this.value == null)
2707            this.value = new BooleanType();
2708          if (!(this.value instanceof BooleanType))
2709            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2710          return (BooleanType) this.value;
2711        }
2712
2713        public boolean hasValueBooleanType() { 
2714          return this != null && this.value instanceof BooleanType;
2715        }
2716
2717        /**
2718         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2719         */
2720        public CanonicalType getValueCanonicalType() throws FHIRException { 
2721          if (this.value == null)
2722            this.value = new CanonicalType();
2723          if (!(this.value instanceof CanonicalType))
2724            throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.value.getClass().getName()+" was encountered");
2725          return (CanonicalType) this.value;
2726        }
2727
2728        public boolean hasValueCanonicalType() { 
2729          return this != null && this.value instanceof CanonicalType;
2730        }
2731
2732        /**
2733         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2734         */
2735        public CodeType getValueCodeType() throws FHIRException { 
2736          if (this.value == null)
2737            this.value = new CodeType();
2738          if (!(this.value instanceof CodeType))
2739            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
2740          return (CodeType) this.value;
2741        }
2742
2743        public boolean hasValueCodeType() { 
2744          return this != null && this.value instanceof CodeType;
2745        }
2746
2747        /**
2748         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2749         */
2750        public DateType getValueDateType() throws FHIRException { 
2751          if (this.value == null)
2752            this.value = new DateType();
2753          if (!(this.value instanceof DateType))
2754            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.value.getClass().getName()+" was encountered");
2755          return (DateType) this.value;
2756        }
2757
2758        public boolean hasValueDateType() { 
2759          return this != null && this.value instanceof DateType;
2760        }
2761
2762        /**
2763         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2764         */
2765        public DateTimeType getValueDateTimeType() throws FHIRException { 
2766          if (this.value == null)
2767            this.value = new DateTimeType();
2768          if (!(this.value instanceof DateTimeType))
2769            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2770          return (DateTimeType) this.value;
2771        }
2772
2773        public boolean hasValueDateTimeType() { 
2774          return this != null && this.value instanceof DateTimeType;
2775        }
2776
2777        /**
2778         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2779         */
2780        public DecimalType getValueDecimalType() throws FHIRException { 
2781          if (this.value == null)
2782            this.value = new DecimalType();
2783          if (!(this.value instanceof DecimalType))
2784            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
2785          return (DecimalType) this.value;
2786        }
2787
2788        public boolean hasValueDecimalType() { 
2789          return this != null && this.value instanceof DecimalType;
2790        }
2791
2792        /**
2793         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2794         */
2795        public IdType getValueIdType() throws FHIRException { 
2796          if (this.value == null)
2797            this.value = new IdType();
2798          if (!(this.value instanceof IdType))
2799            throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.value.getClass().getName()+" was encountered");
2800          return (IdType) this.value;
2801        }
2802
2803        public boolean hasValueIdType() { 
2804          return this != null && this.value instanceof IdType;
2805        }
2806
2807        /**
2808         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2809         */
2810        public InstantType getValueInstantType() throws FHIRException { 
2811          if (this.value == null)
2812            this.value = new InstantType();
2813          if (!(this.value instanceof InstantType))
2814            throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.value.getClass().getName()+" was encountered");
2815          return (InstantType) this.value;
2816        }
2817
2818        public boolean hasValueInstantType() { 
2819          return this != null && this.value instanceof InstantType;
2820        }
2821
2822        /**
2823         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2824         */
2825        public IntegerType getValueIntegerType() throws FHIRException { 
2826          if (this.value == null)
2827            this.value = new IntegerType();
2828          if (!(this.value instanceof IntegerType))
2829            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2830          return (IntegerType) this.value;
2831        }
2832
2833        public boolean hasValueIntegerType() { 
2834          return this != null && this.value instanceof IntegerType;
2835        }
2836
2837        /**
2838         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2839         */
2840        public Integer64Type getValueInteger64Type() throws FHIRException { 
2841          if (this.value == null)
2842            this.value = new Integer64Type();
2843          if (!(this.value instanceof Integer64Type))
2844            throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.value.getClass().getName()+" was encountered");
2845          return (Integer64Type) this.value;
2846        }
2847
2848        public boolean hasValueInteger64Type() { 
2849          return this != null && this.value instanceof Integer64Type;
2850        }
2851
2852        /**
2853         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2854         */
2855        public MarkdownType getValueMarkdownType() throws FHIRException { 
2856          if (this.value == null)
2857            this.value = new MarkdownType();
2858          if (!(this.value instanceof MarkdownType))
2859            throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.value.getClass().getName()+" was encountered");
2860          return (MarkdownType) this.value;
2861        }
2862
2863        public boolean hasValueMarkdownType() { 
2864          return this != null && this.value instanceof MarkdownType;
2865        }
2866
2867        /**
2868         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2869         */
2870        public OidType getValueOidType() throws FHIRException { 
2871          if (this.value == null)
2872            this.value = new OidType();
2873          if (!(this.value instanceof OidType))
2874            throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.value.getClass().getName()+" was encountered");
2875          return (OidType) this.value;
2876        }
2877
2878        public boolean hasValueOidType() { 
2879          return this != null && this.value instanceof OidType;
2880        }
2881
2882        /**
2883         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2884         */
2885        public PositiveIntType getValuePositiveIntType() throws FHIRException { 
2886          if (this.value == null)
2887            this.value = new PositiveIntType();
2888          if (!(this.value instanceof PositiveIntType))
2889            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.value.getClass().getName()+" was encountered");
2890          return (PositiveIntType) this.value;
2891        }
2892
2893        public boolean hasValuePositiveIntType() { 
2894          return this != null && this.value instanceof PositiveIntType;
2895        }
2896
2897        /**
2898         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2899         */
2900        public StringType getValueStringType() throws FHIRException { 
2901          if (this.value == null)
2902            this.value = new StringType();
2903          if (!(this.value instanceof StringType))
2904            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2905          return (StringType) this.value;
2906        }
2907
2908        public boolean hasValueStringType() { 
2909          return this != null && this.value instanceof StringType;
2910        }
2911
2912        /**
2913         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2914         */
2915        public TimeType getValueTimeType() throws FHIRException { 
2916          if (this.value == null)
2917            this.value = new TimeType();
2918          if (!(this.value instanceof TimeType))
2919            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2920          return (TimeType) this.value;
2921        }
2922
2923        public boolean hasValueTimeType() { 
2924          return this != null && this.value instanceof TimeType;
2925        }
2926
2927        /**
2928         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2929         */
2930        public UnsignedIntType getValueUnsignedIntType() throws FHIRException { 
2931          if (this.value == null)
2932            this.value = new UnsignedIntType();
2933          if (!(this.value instanceof UnsignedIntType))
2934            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.value.getClass().getName()+" was encountered");
2935          return (UnsignedIntType) this.value;
2936        }
2937
2938        public boolean hasValueUnsignedIntType() { 
2939          return this != null && this.value instanceof UnsignedIntType;
2940        }
2941
2942        /**
2943         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2944         */
2945        public UriType getValueUriType() throws FHIRException { 
2946          if (this.value == null)
2947            this.value = new UriType();
2948          if (!(this.value instanceof UriType))
2949            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
2950          return (UriType) this.value;
2951        }
2952
2953        public boolean hasValueUriType() { 
2954          return this != null && this.value instanceof UriType;
2955        }
2956
2957        /**
2958         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2959         */
2960        public UrlType getValueUrlType() throws FHIRException { 
2961          if (this.value == null)
2962            this.value = new UrlType();
2963          if (!(this.value instanceof UrlType))
2964            throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.value.getClass().getName()+" was encountered");
2965          return (UrlType) this.value;
2966        }
2967
2968        public boolean hasValueUrlType() { 
2969          return this != null && this.value instanceof UrlType;
2970        }
2971
2972        /**
2973         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2974         */
2975        public UuidType getValueUuidType() throws FHIRException { 
2976          if (this.value == null)
2977            this.value = new UuidType();
2978          if (!(this.value instanceof UuidType))
2979            throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.value.getClass().getName()+" was encountered");
2980          return (UuidType) this.value;
2981        }
2982
2983        public boolean hasValueUuidType() { 
2984          return this != null && this.value instanceof UuidType;
2985        }
2986
2987        /**
2988         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
2989         */
2990        public Address getValueAddress() throws FHIRException { 
2991          if (this.value == null)
2992            this.value = new Address();
2993          if (!(this.value instanceof Address))
2994            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.value.getClass().getName()+" was encountered");
2995          return (Address) this.value;
2996        }
2997
2998        public boolean hasValueAddress() { 
2999          return this != null && this.value instanceof Address;
3000        }
3001
3002        /**
3003         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3004         */
3005        public Age getValueAge() throws FHIRException { 
3006          if (this.value == null)
3007            this.value = new Age();
3008          if (!(this.value instanceof Age))
3009            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.value.getClass().getName()+" was encountered");
3010          return (Age) this.value;
3011        }
3012
3013        public boolean hasValueAge() { 
3014          return this != null && this.value instanceof Age;
3015        }
3016
3017        /**
3018         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3019         */
3020        public Annotation getValueAnnotation() throws FHIRException { 
3021          if (this.value == null)
3022            this.value = new Annotation();
3023          if (!(this.value instanceof Annotation))
3024            throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.value.getClass().getName()+" was encountered");
3025          return (Annotation) this.value;
3026        }
3027
3028        public boolean hasValueAnnotation() { 
3029          return this != null && this.value instanceof Annotation;
3030        }
3031
3032        /**
3033         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3034         */
3035        public Attachment getValueAttachment() throws FHIRException { 
3036          if (this.value == null)
3037            this.value = new Attachment();
3038          if (!(this.value instanceof Attachment))
3039            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
3040          return (Attachment) this.value;
3041        }
3042
3043        public boolean hasValueAttachment() { 
3044          return this != null && this.value instanceof Attachment;
3045        }
3046
3047        /**
3048         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3049         */
3050        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
3051          if (this.value == null)
3052            this.value = new CodeableConcept();
3053          if (!(this.value instanceof CodeableConcept))
3054            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
3055          return (CodeableConcept) this.value;
3056        }
3057
3058        public boolean hasValueCodeableConcept() { 
3059          return this != null && this.value instanceof CodeableConcept;
3060        }
3061
3062        /**
3063         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3064         */
3065        public CodeableReference getValueCodeableReference() throws FHIRException { 
3066          if (this.value == null)
3067            this.value = new CodeableReference();
3068          if (!(this.value instanceof CodeableReference))
3069            throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.value.getClass().getName()+" was encountered");
3070          return (CodeableReference) this.value;
3071        }
3072
3073        public boolean hasValueCodeableReference() { 
3074          return this != null && this.value instanceof CodeableReference;
3075        }
3076
3077        /**
3078         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3079         */
3080        public Coding getValueCoding() throws FHIRException { 
3081          if (this.value == null)
3082            this.value = new Coding();
3083          if (!(this.value instanceof Coding))
3084            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
3085          return (Coding) this.value;
3086        }
3087
3088        public boolean hasValueCoding() { 
3089          return this != null && this.value instanceof Coding;
3090        }
3091
3092        /**
3093         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3094         */
3095        public ContactPoint getValueContactPoint() throws FHIRException { 
3096          if (this.value == null)
3097            this.value = new ContactPoint();
3098          if (!(this.value instanceof ContactPoint))
3099            throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.value.getClass().getName()+" was encountered");
3100          return (ContactPoint) this.value;
3101        }
3102
3103        public boolean hasValueContactPoint() { 
3104          return this != null && this.value instanceof ContactPoint;
3105        }
3106
3107        /**
3108         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3109         */
3110        public Count getValueCount() throws FHIRException { 
3111          if (this.value == null)
3112            this.value = new Count();
3113          if (!(this.value instanceof Count))
3114            throw new FHIRException("Type mismatch: the type Count was expected, but "+this.value.getClass().getName()+" was encountered");
3115          return (Count) this.value;
3116        }
3117
3118        public boolean hasValueCount() { 
3119          return this != null && this.value instanceof Count;
3120        }
3121
3122        /**
3123         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3124         */
3125        public Distance getValueDistance() throws FHIRException { 
3126          if (this.value == null)
3127            this.value = new Distance();
3128          if (!(this.value instanceof Distance))
3129            throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.value.getClass().getName()+" was encountered");
3130          return (Distance) this.value;
3131        }
3132
3133        public boolean hasValueDistance() { 
3134          return this != null && this.value instanceof Distance;
3135        }
3136
3137        /**
3138         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3139         */
3140        public Duration getValueDuration() throws FHIRException { 
3141          if (this.value == null)
3142            this.value = new Duration();
3143          if (!(this.value instanceof Duration))
3144            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.value.getClass().getName()+" was encountered");
3145          return (Duration) this.value;
3146        }
3147
3148        public boolean hasValueDuration() { 
3149          return this != null && this.value instanceof Duration;
3150        }
3151
3152        /**
3153         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3154         */
3155        public HumanName getValueHumanName() throws FHIRException { 
3156          if (this.value == null)
3157            this.value = new HumanName();
3158          if (!(this.value instanceof HumanName))
3159            throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.value.getClass().getName()+" was encountered");
3160          return (HumanName) this.value;
3161        }
3162
3163        public boolean hasValueHumanName() { 
3164          return this != null && this.value instanceof HumanName;
3165        }
3166
3167        /**
3168         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3169         */
3170        public Identifier getValueIdentifier() throws FHIRException { 
3171          if (this.value == null)
3172            this.value = new Identifier();
3173          if (!(this.value instanceof Identifier))
3174            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.value.getClass().getName()+" was encountered");
3175          return (Identifier) this.value;
3176        }
3177
3178        public boolean hasValueIdentifier() { 
3179          return this != null && this.value instanceof Identifier;
3180        }
3181
3182        /**
3183         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3184         */
3185        public Money getValueMoney() throws FHIRException { 
3186          if (this.value == null)
3187            this.value = new Money();
3188          if (!(this.value instanceof Money))
3189            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.value.getClass().getName()+" was encountered");
3190          return (Money) this.value;
3191        }
3192
3193        public boolean hasValueMoney() { 
3194          return this != null && this.value instanceof Money;
3195        }
3196
3197        /**
3198         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3199         */
3200        public Period getValuePeriod() throws FHIRException { 
3201          if (this.value == null)
3202            this.value = new Period();
3203          if (!(this.value instanceof Period))
3204            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
3205          return (Period) this.value;
3206        }
3207
3208        public boolean hasValuePeriod() { 
3209          return this != null && this.value instanceof Period;
3210        }
3211
3212        /**
3213         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3214         */
3215        public Quantity getValueQuantity() throws FHIRException { 
3216          if (this.value == null)
3217            this.value = new Quantity();
3218          if (!(this.value instanceof Quantity))
3219            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
3220          return (Quantity) this.value;
3221        }
3222
3223        public boolean hasValueQuantity() { 
3224          return this != null && this.value instanceof Quantity;
3225        }
3226
3227        /**
3228         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3229         */
3230        public Range getValueRange() throws FHIRException { 
3231          if (this.value == null)
3232            this.value = new Range();
3233          if (!(this.value instanceof Range))
3234            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
3235          return (Range) this.value;
3236        }
3237
3238        public boolean hasValueRange() { 
3239          return this != null && this.value instanceof Range;
3240        }
3241
3242        /**
3243         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3244         */
3245        public Ratio getValueRatio() throws FHIRException { 
3246          if (this.value == null)
3247            this.value = new Ratio();
3248          if (!(this.value instanceof Ratio))
3249            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
3250          return (Ratio) this.value;
3251        }
3252
3253        public boolean hasValueRatio() { 
3254          return this != null && this.value instanceof Ratio;
3255        }
3256
3257        /**
3258         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3259         */
3260        public RatioRange getValueRatioRange() throws FHIRException { 
3261          if (this.value == null)
3262            this.value = new RatioRange();
3263          if (!(this.value instanceof RatioRange))
3264            throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.value.getClass().getName()+" was encountered");
3265          return (RatioRange) this.value;
3266        }
3267
3268        public boolean hasValueRatioRange() { 
3269          return this != null && this.value instanceof RatioRange;
3270        }
3271
3272        /**
3273         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3274         */
3275        public Reference getValueReference() throws FHIRException { 
3276          if (this.value == null)
3277            this.value = new Reference();
3278          if (!(this.value instanceof Reference))
3279            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
3280          return (Reference) this.value;
3281        }
3282
3283        public boolean hasValueReference() { 
3284          return this != null && this.value instanceof Reference;
3285        }
3286
3287        /**
3288         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3289         */
3290        public SampledData getValueSampledData() throws FHIRException { 
3291          if (this.value == null)
3292            this.value = new SampledData();
3293          if (!(this.value instanceof SampledData))
3294            throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
3295          return (SampledData) this.value;
3296        }
3297
3298        public boolean hasValueSampledData() { 
3299          return this != null && this.value instanceof SampledData;
3300        }
3301
3302        /**
3303         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3304         */
3305        public Signature getValueSignature() throws FHIRException { 
3306          if (this.value == null)
3307            this.value = new Signature();
3308          if (!(this.value instanceof Signature))
3309            throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.value.getClass().getName()+" was encountered");
3310          return (Signature) this.value;
3311        }
3312
3313        public boolean hasValueSignature() { 
3314          return this != null && this.value instanceof Signature;
3315        }
3316
3317        /**
3318         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3319         */
3320        public Timing getValueTiming() throws FHIRException { 
3321          if (this.value == null)
3322            this.value = new Timing();
3323          if (!(this.value instanceof Timing))
3324            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.value.getClass().getName()+" was encountered");
3325          return (Timing) this.value;
3326        }
3327
3328        public boolean hasValueTiming() { 
3329          return this != null && this.value instanceof Timing;
3330        }
3331
3332        /**
3333         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3334         */
3335        public ContactDetail getValueContactDetail() throws FHIRException { 
3336          if (this.value == null)
3337            this.value = new ContactDetail();
3338          if (!(this.value instanceof ContactDetail))
3339            throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
3340          return (ContactDetail) this.value;
3341        }
3342
3343        public boolean hasValueContactDetail() { 
3344          return this != null && this.value instanceof ContactDetail;
3345        }
3346
3347        /**
3348         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3349         */
3350        public DataRequirement getValueDataRequirement() throws FHIRException { 
3351          if (this.value == null)
3352            this.value = new DataRequirement();
3353          if (!(this.value instanceof DataRequirement))
3354            throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.value.getClass().getName()+" was encountered");
3355          return (DataRequirement) this.value;
3356        }
3357
3358        public boolean hasValueDataRequirement() { 
3359          return this != null && this.value instanceof DataRequirement;
3360        }
3361
3362        /**
3363         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3364         */
3365        public Expression getValueExpression() throws FHIRException { 
3366          if (this.value == null)
3367            this.value = new Expression();
3368          if (!(this.value instanceof Expression))
3369            throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.value.getClass().getName()+" was encountered");
3370          return (Expression) this.value;
3371        }
3372
3373        public boolean hasValueExpression() { 
3374          return this != null && this.value instanceof Expression;
3375        }
3376
3377        /**
3378         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3379         */
3380        public ParameterDefinition getValueParameterDefinition() throws FHIRException { 
3381          if (this.value == null)
3382            this.value = new ParameterDefinition();
3383          if (!(this.value instanceof ParameterDefinition))
3384            throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
3385          return (ParameterDefinition) this.value;
3386        }
3387
3388        public boolean hasValueParameterDefinition() { 
3389          return this != null && this.value instanceof ParameterDefinition;
3390        }
3391
3392        /**
3393         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3394         */
3395        public RelatedArtifact getValueRelatedArtifact() throws FHIRException { 
3396          if (this.value == null)
3397            this.value = new RelatedArtifact();
3398          if (!(this.value instanceof RelatedArtifact))
3399            throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.value.getClass().getName()+" was encountered");
3400          return (RelatedArtifact) this.value;
3401        }
3402
3403        public boolean hasValueRelatedArtifact() { 
3404          return this != null && this.value instanceof RelatedArtifact;
3405        }
3406
3407        /**
3408         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3409         */
3410        public TriggerDefinition getValueTriggerDefinition() throws FHIRException { 
3411          if (this.value == null)
3412            this.value = new TriggerDefinition();
3413          if (!(this.value instanceof TriggerDefinition))
3414            throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
3415          return (TriggerDefinition) this.value;
3416        }
3417
3418        public boolean hasValueTriggerDefinition() { 
3419          return this != null && this.value instanceof TriggerDefinition;
3420        }
3421
3422        /**
3423         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3424         */
3425        public UsageContext getValueUsageContext() throws FHIRException { 
3426          if (this.value == null)
3427            this.value = new UsageContext();
3428          if (!(this.value instanceof UsageContext))
3429            throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.value.getClass().getName()+" was encountered");
3430          return (UsageContext) this.value;
3431        }
3432
3433        public boolean hasValueUsageContext() { 
3434          return this != null && this.value instanceof UsageContext;
3435        }
3436
3437        /**
3438         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3439         */
3440        public Availability getValueAvailability() throws FHIRException { 
3441          if (this.value == null)
3442            this.value = new Availability();
3443          if (!(this.value instanceof Availability))
3444            throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.value.getClass().getName()+" was encountered");
3445          return (Availability) this.value;
3446        }
3447
3448        public boolean hasValueAvailability() { 
3449          return this != null && this.value instanceof Availability;
3450        }
3451
3452        /**
3453         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3454         */
3455        public ExtendedContactDetail getValueExtendedContactDetail() throws FHIRException { 
3456          if (this.value == null)
3457            this.value = new ExtendedContactDetail();
3458          if (!(this.value instanceof ExtendedContactDetail))
3459            throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
3460          return (ExtendedContactDetail) this.value;
3461        }
3462
3463        public boolean hasValueExtendedContactDetail() { 
3464          return this != null && this.value instanceof ExtendedContactDetail;
3465        }
3466
3467        /**
3468         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3469         */
3470        public Dosage getValueDosage() throws FHIRException { 
3471          if (this.value == null)
3472            this.value = new Dosage();
3473          if (!(this.value instanceof Dosage))
3474            throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.value.getClass().getName()+" was encountered");
3475          return (Dosage) this.value;
3476        }
3477
3478        public boolean hasValueDosage() { 
3479          return this != null && this.value instanceof Dosage;
3480        }
3481
3482        /**
3483         * @return {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3484         */
3485        public Meta getValueMeta() throws FHIRException { 
3486          if (this.value == null)
3487            this.value = new Meta();
3488          if (!(this.value instanceof Meta))
3489            throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.value.getClass().getName()+" was encountered");
3490          return (Meta) this.value;
3491        }
3492
3493        public boolean hasValueMeta() { 
3494          return this != null && this.value instanceof Meta;
3495        }
3496
3497        public boolean hasValue() { 
3498          return this.value != null && !this.value.isEmpty();
3499        }
3500
3501        /**
3502         * @param value {@link #value} (The actual value for the element, which must be one of the types allowed for this element.)
3503         */
3504        public ElementDefinitionExampleComponent setValue(DataType value) { 
3505          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))
3506            throw new Error("Not the right type for ElementDefinition.example.value[x]: "+value.fhirType());
3507          this.value = value;
3508          return this;
3509        }
3510
3511        protected void listChildren(List<Property> children) {
3512          super.listChildren(children);
3513          children.add(new Property("label", "string", "Describes the purpose of this example amoung the set of examples.", 0, 1, label));
3514          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));
3515        }
3516
3517        @Override
3518        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3519          switch (_hash) {
3520          case 102727412: /*label*/  return new Property("label", "string", "Describes the purpose of this example amoung the set of examples.", 0, 1, label);
3521          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);
3522          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);
3523          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);
3524          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);
3525          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);
3526          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);
3527          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);
3528          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);
3529          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);
3530          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);
3531          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);
3532          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);
3533          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);
3534          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);
3535          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);
3536          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);
3537          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);
3538          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);
3539          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);
3540          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);
3541          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);
3542          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);
3543          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);
3544          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);
3545          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);
3546          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);
3547          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);
3548          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);
3549          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);
3550          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);
3551          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);
3552          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);
3553          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);
3554          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);
3555          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);
3556          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);
3557          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);
3558          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);
3559          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);
3560          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);
3561          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);
3562          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);
3563          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);
3564          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);
3565          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);
3566          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);
3567          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);
3568          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);
3569          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);
3570          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);
3571          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);
3572          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);
3573          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);
3574          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);
3575          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);
3576          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);
3577          default: return super.getNamedProperty(_hash, _name, _checkValid);
3578          }
3579
3580        }
3581
3582      @Override
3583      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3584        switch (hash) {
3585        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
3586        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
3587        default: return super.getProperty(hash, name, checkValid);
3588        }
3589
3590      }
3591
3592      @Override
3593      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3594        switch (hash) {
3595        case 102727412: // label
3596          this.label = TypeConvertor.castToString(value); // StringType
3597          return value;
3598        case 111972721: // value
3599          this.value = TypeConvertor.castToType(value); // DataType
3600          return value;
3601        default: return super.setProperty(hash, name, value);
3602        }
3603
3604      }
3605
3606      @Override
3607      public Base setProperty(String name, Base value) throws FHIRException {
3608        if (name.equals("label")) {
3609          this.label = TypeConvertor.castToString(value); // StringType
3610        } else if (name.equals("value[x]")) {
3611          this.value = TypeConvertor.castToType(value); // DataType
3612        } else
3613          return super.setProperty(name, value);
3614        return value;
3615      }
3616
3617      @Override
3618      public Base makeProperty(int hash, String name) throws FHIRException {
3619        switch (hash) {
3620        case 102727412:  return getLabelElement();
3621        case -1410166417:  return getValue();
3622        case 111972721:  return getValue();
3623        default: return super.makeProperty(hash, name);
3624        }
3625
3626      }
3627
3628      @Override
3629      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3630        switch (hash) {
3631        case 102727412: /*label*/ return new String[] {"string"};
3632        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"};
3633        default: return super.getTypesForProperty(hash, name);
3634        }
3635
3636      }
3637
3638      @Override
3639      public Base addChild(String name) throws FHIRException {
3640        if (name.equals("label")) {
3641          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.example.label");
3642        }
3643        else if (name.equals("valueBase64Binary")) {
3644          this.value = new Base64BinaryType();
3645          return this.value;
3646        }
3647        else if (name.equals("valueBoolean")) {
3648          this.value = new BooleanType();
3649          return this.value;
3650        }
3651        else if (name.equals("valueCanonical")) {
3652          this.value = new CanonicalType();
3653          return this.value;
3654        }
3655        else if (name.equals("valueCode")) {
3656          this.value = new CodeType();
3657          return this.value;
3658        }
3659        else if (name.equals("valueDate")) {
3660          this.value = new DateType();
3661          return this.value;
3662        }
3663        else if (name.equals("valueDateTime")) {
3664          this.value = new DateTimeType();
3665          return this.value;
3666        }
3667        else if (name.equals("valueDecimal")) {
3668          this.value = new DecimalType();
3669          return this.value;
3670        }
3671        else if (name.equals("valueId")) {
3672          this.value = new IdType();
3673          return this.value;
3674        }
3675        else if (name.equals("valueInstant")) {
3676          this.value = new InstantType();
3677          return this.value;
3678        }
3679        else if (name.equals("valueInteger")) {
3680          this.value = new IntegerType();
3681          return this.value;
3682        }
3683        else if (name.equals("valueInteger64")) {
3684          this.value = new Integer64Type();
3685          return this.value;
3686        }
3687        else if (name.equals("valueMarkdown")) {
3688          this.value = new MarkdownType();
3689          return this.value;
3690        }
3691        else if (name.equals("valueOid")) {
3692          this.value = new OidType();
3693          return this.value;
3694        }
3695        else if (name.equals("valuePositiveInt")) {
3696          this.value = new PositiveIntType();
3697          return this.value;
3698        }
3699        else if (name.equals("valueString")) {
3700          this.value = new StringType();
3701          return this.value;
3702        }
3703        else if (name.equals("valueTime")) {
3704          this.value = new TimeType();
3705          return this.value;
3706        }
3707        else if (name.equals("valueUnsignedInt")) {
3708          this.value = new UnsignedIntType();
3709          return this.value;
3710        }
3711        else if (name.equals("valueUri")) {
3712          this.value = new UriType();
3713          return this.value;
3714        }
3715        else if (name.equals("valueUrl")) {
3716          this.value = new UrlType();
3717          return this.value;
3718        }
3719        else if (name.equals("valueUuid")) {
3720          this.value = new UuidType();
3721          return this.value;
3722        }
3723        else if (name.equals("valueAddress")) {
3724          this.value = new Address();
3725          return this.value;
3726        }
3727        else if (name.equals("valueAge")) {
3728          this.value = new Age();
3729          return this.value;
3730        }
3731        else if (name.equals("valueAnnotation")) {
3732          this.value = new Annotation();
3733          return this.value;
3734        }
3735        else if (name.equals("valueAttachment")) {
3736          this.value = new Attachment();
3737          return this.value;
3738        }
3739        else if (name.equals("valueCodeableConcept")) {
3740          this.value = new CodeableConcept();
3741          return this.value;
3742        }
3743        else if (name.equals("valueCodeableReference")) {
3744          this.value = new CodeableReference();
3745          return this.value;
3746        }
3747        else if (name.equals("valueCoding")) {
3748          this.value = new Coding();
3749          return this.value;
3750        }
3751        else if (name.equals("valueContactPoint")) {
3752          this.value = new ContactPoint();
3753          return this.value;
3754        }
3755        else if (name.equals("valueCount")) {
3756          this.value = new Count();
3757          return this.value;
3758        }
3759        else if (name.equals("valueDistance")) {
3760          this.value = new Distance();
3761          return this.value;
3762        }
3763        else if (name.equals("valueDuration")) {
3764          this.value = new Duration();
3765          return this.value;
3766        }
3767        else if (name.equals("valueHumanName")) {
3768          this.value = new HumanName();
3769          return this.value;
3770        }
3771        else if (name.equals("valueIdentifier")) {
3772          this.value = new Identifier();
3773          return this.value;
3774        }
3775        else if (name.equals("valueMoney")) {
3776          this.value = new Money();
3777          return this.value;
3778        }
3779        else if (name.equals("valuePeriod")) {
3780          this.value = new Period();
3781          return this.value;
3782        }
3783        else if (name.equals("valueQuantity")) {
3784          this.value = new Quantity();
3785          return this.value;
3786        }
3787        else if (name.equals("valueRange")) {
3788          this.value = new Range();
3789          return this.value;
3790        }
3791        else if (name.equals("valueRatio")) {
3792          this.value = new Ratio();
3793          return this.value;
3794        }
3795        else if (name.equals("valueRatioRange")) {
3796          this.value = new RatioRange();
3797          return this.value;
3798        }
3799        else if (name.equals("valueReference")) {
3800          this.value = new Reference();
3801          return this.value;
3802        }
3803        else if (name.equals("valueSampledData")) {
3804          this.value = new SampledData();
3805          return this.value;
3806        }
3807        else if (name.equals("valueSignature")) {
3808          this.value = new Signature();
3809          return this.value;
3810        }
3811        else if (name.equals("valueTiming")) {
3812          this.value = new Timing();
3813          return this.value;
3814        }
3815        else if (name.equals("valueContactDetail")) {
3816          this.value = new ContactDetail();
3817          return this.value;
3818        }
3819        else if (name.equals("valueDataRequirement")) {
3820          this.value = new DataRequirement();
3821          return this.value;
3822        }
3823        else if (name.equals("valueExpression")) {
3824          this.value = new Expression();
3825          return this.value;
3826        }
3827        else if (name.equals("valueParameterDefinition")) {
3828          this.value = new ParameterDefinition();
3829          return this.value;
3830        }
3831        else if (name.equals("valueRelatedArtifact")) {
3832          this.value = new RelatedArtifact();
3833          return this.value;
3834        }
3835        else if (name.equals("valueTriggerDefinition")) {
3836          this.value = new TriggerDefinition();
3837          return this.value;
3838        }
3839        else if (name.equals("valueUsageContext")) {
3840          this.value = new UsageContext();
3841          return this.value;
3842        }
3843        else if (name.equals("valueAvailability")) {
3844          this.value = new Availability();
3845          return this.value;
3846        }
3847        else if (name.equals("valueExtendedContactDetail")) {
3848          this.value = new ExtendedContactDetail();
3849          return this.value;
3850        }
3851        else if (name.equals("valueDosage")) {
3852          this.value = new Dosage();
3853          return this.value;
3854        }
3855        else if (name.equals("valueMeta")) {
3856          this.value = new Meta();
3857          return this.value;
3858        }
3859        else
3860          return super.addChild(name);
3861      }
3862
3863      public ElementDefinitionExampleComponent copy() {
3864        ElementDefinitionExampleComponent dst = new ElementDefinitionExampleComponent();
3865        copyValues(dst);
3866        return dst;
3867      }
3868
3869      public void copyValues(ElementDefinitionExampleComponent dst) {
3870        super.copyValues(dst);
3871        dst.label = label == null ? null : label.copy();
3872        dst.value = value == null ? null : value.copy();
3873      }
3874
3875      @Override
3876      public boolean equalsDeep(Base other_) {
3877        if (!super.equalsDeep(other_))
3878          return false;
3879        if (!(other_ instanceof ElementDefinitionExampleComponent))
3880          return false;
3881        ElementDefinitionExampleComponent o = (ElementDefinitionExampleComponent) other_;
3882        return compareDeep(label, o.label, true) && compareDeep(value, o.value, true);
3883      }
3884
3885      @Override
3886      public boolean equalsShallow(Base other_) {
3887        if (!super.equalsShallow(other_))
3888          return false;
3889        if (!(other_ instanceof ElementDefinitionExampleComponent))
3890          return false;
3891        ElementDefinitionExampleComponent o = (ElementDefinitionExampleComponent) other_;
3892        return compareValues(label, o.label, true);
3893      }
3894
3895      public boolean isEmpty() {
3896        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(label, value);
3897      }
3898
3899  public String fhirType() {
3900    return "ElementDefinition.example";
3901
3902  }
3903
3904  }
3905
3906    @Block()
3907    public static class ElementDefinitionConstraintComponent extends Element implements IBaseDatatypeElement {
3908        /**
3909         * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality.
3910         */
3911        @Child(name = "key", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=true)
3912        @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." )
3913        protected IdType key;
3914
3915        /**
3916         * Description of why this constraint is necessary or appropriate.
3917         */
3918        @Child(name = "requirements", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=true)
3919        @Description(shortDefinition="Why this constraint is necessary or appropriate", formalDefinition="Description of why this constraint is necessary or appropriate." )
3920        protected MarkdownType requirements;
3921
3922        /**
3923         * Identifies the impact constraint violation has on the conformance of the instance.
3924         */
3925        @Child(name = "severity", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
3926        @Description(shortDefinition="error | warning", formalDefinition="Identifies the impact constraint violation has on the conformance of the instance." )
3927        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/constraint-severity")
3928        protected Enumeration<ConstraintSeverity> severity;
3929
3930        /**
3931         * If true, indicates that the warning or best practice guideline should be suppressed.
3932         */
3933        @Child(name = "suppress", type = {BooleanType.class}, order=4, min=0, max=1, modifier=false, summary=true)
3934        @Description(shortDefinition="Suppress warning or hint in profile", formalDefinition="If true, indicates that the warning or best practice guideline should be suppressed." )
3935        protected BooleanType suppress;
3936
3937        /**
3938         * Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
3939         */
3940        @Child(name = "human", type = {StringType.class}, order=5, min=1, max=1, modifier=false, summary=true)
3941        @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." )
3942        protected StringType human;
3943
3944        /**
3945         * A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
3946         */
3947        @Child(name = "expression", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
3948        @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." )
3949        protected StringType expression;
3950
3951        /**
3952         * A reference to the original source of the constraint, for traceability purposes.
3953         */
3954        @Child(name = "source", type = {CanonicalType.class}, order=7, min=0, max=1, modifier=false, summary=true)
3955        @Description(shortDefinition="Reference to original source of constraint", formalDefinition="A reference to the original source of the constraint, for traceability purposes." )
3956        protected CanonicalType source;
3957
3958        private static final long serialVersionUID = 1642607838L;
3959
3960    /**
3961     * Constructor
3962     */
3963      public ElementDefinitionConstraintComponent() {
3964        super();
3965      }
3966
3967    /**
3968     * Constructor
3969     */
3970      public ElementDefinitionConstraintComponent(String key, ConstraintSeverity severity, String human) {
3971        super();
3972        this.setKey(key);
3973        this.setSeverity(severity);
3974        this.setHuman(human);
3975      }
3976
3977        /**
3978         * @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
3979         */
3980        public IdType getKeyElement() { 
3981          if (this.key == null)
3982            if (Configuration.errorOnAutoCreate())
3983              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.key");
3984            else if (Configuration.doAutoCreate())
3985              this.key = new IdType(); // bb
3986          return this.key;
3987        }
3988
3989        public boolean hasKeyElement() { 
3990          return this.key != null && !this.key.isEmpty();
3991        }
3992
3993        public boolean hasKey() { 
3994          return this.key != null && !this.key.isEmpty();
3995        }
3996
3997        /**
3998         * @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
3999         */
4000        public ElementDefinitionConstraintComponent setKeyElement(IdType value) { 
4001          this.key = value;
4002          return this;
4003        }
4004
4005        /**
4006         * @return 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        public String getKey() { 
4009          return this.key == null ? null : this.key.getValue();
4010        }
4011
4012        /**
4013         * @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.
4014         */
4015        public ElementDefinitionConstraintComponent setKey(String value) { 
4016            if (this.key == null)
4017              this.key = new IdType();
4018            this.key.setValue(value);
4019          return this;
4020        }
4021
4022        /**
4023         * @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
4024         */
4025        public MarkdownType getRequirementsElement() { 
4026          if (this.requirements == null)
4027            if (Configuration.errorOnAutoCreate())
4028              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.requirements");
4029            else if (Configuration.doAutoCreate())
4030              this.requirements = new MarkdownType(); // bb
4031          return this.requirements;
4032        }
4033
4034        public boolean hasRequirementsElement() { 
4035          return this.requirements != null && !this.requirements.isEmpty();
4036        }
4037
4038        public boolean hasRequirements() { 
4039          return this.requirements != null && !this.requirements.isEmpty();
4040        }
4041
4042        /**
4043         * @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
4044         */
4045        public ElementDefinitionConstraintComponent setRequirementsElement(MarkdownType value) { 
4046          this.requirements = value;
4047          return this;
4048        }
4049
4050        /**
4051         * @return Description of why this constraint is necessary or appropriate.
4052         */
4053        public String getRequirements() { 
4054          return this.requirements == null ? null : this.requirements.getValue();
4055        }
4056
4057        /**
4058         * @param value Description of why this constraint is necessary or appropriate.
4059         */
4060        public ElementDefinitionConstraintComponent setRequirements(String value) { 
4061          if (value == null)
4062            this.requirements = null;
4063          else {
4064            if (this.requirements == null)
4065              this.requirements = new MarkdownType();
4066            this.requirements.setValue(value);
4067          }
4068          return this;
4069        }
4070
4071        /**
4072         * @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
4073         */
4074        public Enumeration<ConstraintSeverity> getSeverityElement() { 
4075          if (this.severity == null)
4076            if (Configuration.errorOnAutoCreate())
4077              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.severity");
4078            else if (Configuration.doAutoCreate())
4079              this.severity = new Enumeration<ConstraintSeverity>(new ConstraintSeverityEnumFactory()); // bb
4080          return this.severity;
4081        }
4082
4083        public boolean hasSeverityElement() { 
4084          return this.severity != null && !this.severity.isEmpty();
4085        }
4086
4087        public boolean hasSeverity() { 
4088          return this.severity != null && !this.severity.isEmpty();
4089        }
4090
4091        /**
4092         * @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
4093         */
4094        public ElementDefinitionConstraintComponent setSeverityElement(Enumeration<ConstraintSeverity> value) { 
4095          this.severity = value;
4096          return this;
4097        }
4098
4099        /**
4100         * @return Identifies the impact constraint violation has on the conformance of the instance.
4101         */
4102        public ConstraintSeverity getSeverity() { 
4103          return this.severity == null ? null : this.severity.getValue();
4104        }
4105
4106        /**
4107         * @param value Identifies the impact constraint violation has on the conformance of the instance.
4108         */
4109        public ElementDefinitionConstraintComponent setSeverity(ConstraintSeverity value) { 
4110            if (this.severity == null)
4111              this.severity = new Enumeration<ConstraintSeverity>(new ConstraintSeverityEnumFactory());
4112            this.severity.setValue(value);
4113          return this;
4114        }
4115
4116        /**
4117         * @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
4118         */
4119        public BooleanType getSuppressElement() { 
4120          if (this.suppress == null)
4121            if (Configuration.errorOnAutoCreate())
4122              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.suppress");
4123            else if (Configuration.doAutoCreate())
4124              this.suppress = new BooleanType(); // bb
4125          return this.suppress;
4126        }
4127
4128        public boolean hasSuppressElement() { 
4129          return this.suppress != null && !this.suppress.isEmpty();
4130        }
4131
4132        public boolean hasSuppress() { 
4133          return this.suppress != null && !this.suppress.isEmpty();
4134        }
4135
4136        /**
4137         * @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
4138         */
4139        public ElementDefinitionConstraintComponent setSuppressElement(BooleanType value) { 
4140          this.suppress = value;
4141          return this;
4142        }
4143
4144        /**
4145         * @return If true, indicates that the warning or best practice guideline should be suppressed.
4146         */
4147        public boolean getSuppress() { 
4148          return this.suppress == null || this.suppress.isEmpty() ? false : this.suppress.getValue();
4149        }
4150
4151        /**
4152         * @param value If true, indicates that the warning or best practice guideline should be suppressed.
4153         */
4154        public ElementDefinitionConstraintComponent setSuppress(boolean value) { 
4155            if (this.suppress == null)
4156              this.suppress = new BooleanType();
4157            this.suppress.setValue(value);
4158          return this;
4159        }
4160
4161        /**
4162         * @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
4163         */
4164        public StringType getHumanElement() { 
4165          if (this.human == null)
4166            if (Configuration.errorOnAutoCreate())
4167              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.human");
4168            else if (Configuration.doAutoCreate())
4169              this.human = new StringType(); // bb
4170          return this.human;
4171        }
4172
4173        public boolean hasHumanElement() { 
4174          return this.human != null && !this.human.isEmpty();
4175        }
4176
4177        public boolean hasHuman() { 
4178          return this.human != null && !this.human.isEmpty();
4179        }
4180
4181        /**
4182         * @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
4183         */
4184        public ElementDefinitionConstraintComponent setHumanElement(StringType value) { 
4185          this.human = value;
4186          return this;
4187        }
4188
4189        /**
4190         * @return Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
4191         */
4192        public String getHuman() { 
4193          return this.human == null ? null : this.human.getValue();
4194        }
4195
4196        /**
4197         * @param value Text that can be used to describe the constraint in messages identifying that the constraint has been violated.
4198         */
4199        public ElementDefinitionConstraintComponent setHuman(String value) { 
4200            if (this.human == null)
4201              this.human = new StringType();
4202            this.human.setValue(value);
4203          return this;
4204        }
4205
4206        /**
4207         * @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
4208         */
4209        public StringType getExpressionElement() { 
4210          if (this.expression == null)
4211            if (Configuration.errorOnAutoCreate())
4212              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.expression");
4213            else if (Configuration.doAutoCreate())
4214              this.expression = new StringType(); // bb
4215          return this.expression;
4216        }
4217
4218        public boolean hasExpressionElement() { 
4219          return this.expression != null && !this.expression.isEmpty();
4220        }
4221
4222        public boolean hasExpression() { 
4223          return this.expression != null && !this.expression.isEmpty();
4224        }
4225
4226        /**
4227         * @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
4228         */
4229        public ElementDefinitionConstraintComponent setExpressionElement(StringType value) { 
4230          this.expression = value;
4231          return this;
4232        }
4233
4234        /**
4235         * @return A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
4236         */
4237        public String getExpression() { 
4238          return this.expression == null ? null : this.expression.getValue();
4239        }
4240
4241        /**
4242         * @param value A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.
4243         */
4244        public ElementDefinitionConstraintComponent setExpression(String value) { 
4245          if (Utilities.noString(value))
4246            this.expression = null;
4247          else {
4248            if (this.expression == null)
4249              this.expression = new StringType();
4250            this.expression.setValue(value);
4251          }
4252          return this;
4253        }
4254
4255        /**
4256         * @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
4257         */
4258        public CanonicalType getSourceElement() { 
4259          if (this.source == null)
4260            if (Configuration.errorOnAutoCreate())
4261              throw new Error("Attempt to auto-create ElementDefinitionConstraintComponent.source");
4262            else if (Configuration.doAutoCreate())
4263              this.source = new CanonicalType(); // bb
4264          return this.source;
4265        }
4266
4267        public boolean hasSourceElement() { 
4268          return this.source != null && !this.source.isEmpty();
4269        }
4270
4271        public boolean hasSource() { 
4272          return this.source != null && !this.source.isEmpty();
4273        }
4274
4275        /**
4276         * @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
4277         */
4278        public ElementDefinitionConstraintComponent setSourceElement(CanonicalType value) { 
4279          this.source = value;
4280          return this;
4281        }
4282
4283        /**
4284         * @return A reference to the original source of the constraint, for traceability purposes.
4285         */
4286        public String getSource() { 
4287          return this.source == null ? null : this.source.getValue();
4288        }
4289
4290        /**
4291         * @param value A reference to the original source of the constraint, for traceability purposes.
4292         */
4293        public ElementDefinitionConstraintComponent setSource(String value) { 
4294          if (Utilities.noString(value))
4295            this.source = null;
4296          else {
4297            if (this.source == null)
4298              this.source = new CanonicalType();
4299            this.source.setValue(value);
4300          }
4301          return this;
4302        }
4303
4304        protected void listChildren(List<Property> children) {
4305          super.listChildren(children);
4306          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));
4307          children.add(new Property("requirements", "markdown", "Description of why this constraint is necessary or appropriate.", 0, 1, requirements));
4308          children.add(new Property("severity", "code", "Identifies the impact constraint violation has on the conformance of the instance.", 0, 1, severity));
4309          children.add(new Property("suppress", "boolean", "If true, indicates that the warning or best practice guideline should be suppressed.", 0, 1, suppress));
4310          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));
4311          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));
4312          children.add(new Property("source", "canonical(StructureDefinition)", "A reference to the original source of the constraint, for traceability purposes.", 0, 1, source));
4313        }
4314
4315        @Override
4316        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4317          switch (_hash) {
4318          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);
4319          case -1619874672: /*requirements*/  return new Property("requirements", "markdown", "Description of why this constraint is necessary or appropriate.", 0, 1, requirements);
4320          case 1478300413: /*severity*/  return new Property("severity", "code", "Identifies the impact constraint violation has on the conformance of the instance.", 0, 1, severity);
4321          case -1663129931: /*suppress*/  return new Property("suppress", "boolean", "If true, indicates that the warning or best practice guideline should be suppressed.", 0, 1, suppress);
4322          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);
4323          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);
4324          case -896505829: /*source*/  return new Property("source", "canonical(StructureDefinition)", "A reference to the original source of the constraint, for traceability purposes.", 0, 1, source);
4325          default: return super.getNamedProperty(_hash, _name, _checkValid);
4326          }
4327
4328        }
4329
4330      @Override
4331      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4332        switch (hash) {
4333        case 106079: /*key*/ return this.key == null ? new Base[0] : new Base[] {this.key}; // IdType
4334        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // MarkdownType
4335        case 1478300413: /*severity*/ return this.severity == null ? new Base[0] : new Base[] {this.severity}; // Enumeration<ConstraintSeverity>
4336        case -1663129931: /*suppress*/ return this.suppress == null ? new Base[0] : new Base[] {this.suppress}; // BooleanType
4337        case 99639597: /*human*/ return this.human == null ? new Base[0] : new Base[] {this.human}; // StringType
4338        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
4339        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // CanonicalType
4340        default: return super.getProperty(hash, name, checkValid);
4341        }
4342
4343      }
4344
4345      @Override
4346      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4347        switch (hash) {
4348        case 106079: // key
4349          this.key = TypeConvertor.castToId(value); // IdType
4350          return value;
4351        case -1619874672: // requirements
4352          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
4353          return value;
4354        case 1478300413: // severity
4355          value = new ConstraintSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
4356          this.severity = (Enumeration) value; // Enumeration<ConstraintSeverity>
4357          return value;
4358        case -1663129931: // suppress
4359          this.suppress = TypeConvertor.castToBoolean(value); // BooleanType
4360          return value;
4361        case 99639597: // human
4362          this.human = TypeConvertor.castToString(value); // StringType
4363          return value;
4364        case -1795452264: // expression
4365          this.expression = TypeConvertor.castToString(value); // StringType
4366          return value;
4367        case -896505829: // source
4368          this.source = TypeConvertor.castToCanonical(value); // CanonicalType
4369          return value;
4370        default: return super.setProperty(hash, name, value);
4371        }
4372
4373      }
4374
4375      @Override
4376      public Base setProperty(String name, Base value) throws FHIRException {
4377        if (name.equals("key")) {
4378          this.key = TypeConvertor.castToId(value); // IdType
4379        } else if (name.equals("requirements")) {
4380          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
4381        } else if (name.equals("severity")) {
4382          value = new ConstraintSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
4383          this.severity = (Enumeration) value; // Enumeration<ConstraintSeverity>
4384        } else if (name.equals("suppress")) {
4385          this.suppress = TypeConvertor.castToBoolean(value); // BooleanType
4386        } else if (name.equals("human")) {
4387          this.human = TypeConvertor.castToString(value); // StringType
4388        } else if (name.equals("expression")) {
4389          this.expression = TypeConvertor.castToString(value); // StringType
4390        } else if (name.equals("source")) {
4391          this.source = TypeConvertor.castToCanonical(value); // CanonicalType
4392        } else
4393          return super.setProperty(name, value);
4394        return value;
4395      }
4396
4397      @Override
4398      public Base makeProperty(int hash, String name) throws FHIRException {
4399        switch (hash) {
4400        case 106079:  return getKeyElement();
4401        case -1619874672:  return getRequirementsElement();
4402        case 1478300413:  return getSeverityElement();
4403        case -1663129931:  return getSuppressElement();
4404        case 99639597:  return getHumanElement();
4405        case -1795452264:  return getExpressionElement();
4406        case -896505829:  return getSourceElement();
4407        default: return super.makeProperty(hash, name);
4408        }
4409
4410      }
4411
4412      @Override
4413      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4414        switch (hash) {
4415        case 106079: /*key*/ return new String[] {"id"};
4416        case -1619874672: /*requirements*/ return new String[] {"markdown"};
4417        case 1478300413: /*severity*/ return new String[] {"code"};
4418        case -1663129931: /*suppress*/ return new String[] {"boolean"};
4419        case 99639597: /*human*/ return new String[] {"string"};
4420        case -1795452264: /*expression*/ return new String[] {"string"};
4421        case -896505829: /*source*/ return new String[] {"canonical"};
4422        default: return super.getTypesForProperty(hash, name);
4423        }
4424
4425      }
4426
4427      @Override
4428      public Base addChild(String name) throws FHIRException {
4429        if (name.equals("key")) {
4430          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.key");
4431        }
4432        else if (name.equals("requirements")) {
4433          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.requirements");
4434        }
4435        else if (name.equals("severity")) {
4436          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.severity");
4437        }
4438        else if (name.equals("suppress")) {
4439          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.suppress");
4440        }
4441        else if (name.equals("human")) {
4442          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.human");
4443        }
4444        else if (name.equals("expression")) {
4445          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.expression");
4446        }
4447        else if (name.equals("source")) {
4448          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.constraint.source");
4449        }
4450        else
4451          return super.addChild(name);
4452      }
4453
4454      public ElementDefinitionConstraintComponent copy() {
4455        ElementDefinitionConstraintComponent dst = new ElementDefinitionConstraintComponent();
4456        copyValues(dst);
4457        return dst;
4458      }
4459
4460      public void copyValues(ElementDefinitionConstraintComponent dst) {
4461        super.copyValues(dst);
4462        dst.key = key == null ? null : key.copy();
4463        dst.requirements = requirements == null ? null : requirements.copy();
4464        dst.severity = severity == null ? null : severity.copy();
4465        dst.suppress = suppress == null ? null : suppress.copy();
4466        dst.human = human == null ? null : human.copy();
4467        dst.expression = expression == null ? null : expression.copy();
4468        dst.source = source == null ? null : source.copy();
4469      }
4470
4471      @Override
4472      public boolean equalsDeep(Base other_) {
4473        if (!super.equalsDeep(other_))
4474          return false;
4475        if (!(other_ instanceof ElementDefinitionConstraintComponent))
4476          return false;
4477        ElementDefinitionConstraintComponent o = (ElementDefinitionConstraintComponent) other_;
4478        return compareDeep(key, o.key, true) && compareDeep(requirements, o.requirements, true) && compareDeep(severity, o.severity, true)
4479           && compareDeep(suppress, o.suppress, true) && compareDeep(human, o.human, true) && compareDeep(expression, o.expression, true)
4480           && compareDeep(source, o.source, true);
4481      }
4482
4483      @Override
4484      public boolean equalsShallow(Base other_) {
4485        if (!super.equalsShallow(other_))
4486          return false;
4487        if (!(other_ instanceof ElementDefinitionConstraintComponent))
4488          return false;
4489        ElementDefinitionConstraintComponent o = (ElementDefinitionConstraintComponent) other_;
4490        return compareValues(key, o.key, true) && compareValues(requirements, o.requirements, true) && compareValues(severity, o.severity, true)
4491           && compareValues(suppress, o.suppress, true) && compareValues(human, o.human, true) && compareValues(expression, o.expression, true)
4492           && compareValues(source, o.source, true);
4493      }
4494
4495      public boolean isEmpty() {
4496        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(key, requirements, severity
4497          , suppress, human, expression, source);
4498      }
4499
4500      public String fhirType() {
4501        return "ElementDefinition.constraint";
4502      }
4503
4504      public boolean hasXpathElement() {
4505        return hasExtension(ToolingExtensions.EXT_XPATH_CONSTRAINT);
4506     }
4507     
4508      public boolean hasXpath() {
4509        return hasExtension(ToolingExtensions.EXT_XPATH_CONSTRAINT);
4510     }
4511     
4512      public StringType getXpathElement() {
4513        return hasXpathElement() ? getExtensionByUrl(ToolingExtensions.EXT_XPATH_CONSTRAINT).getValueStringType() : new StringType();
4514      }
4515      
4516      public void setXpathElement(StringType value) {
4517        if (hasXpath()) {
4518          getExtensionByUrl(ToolingExtensions.EXT_XPATH_CONSTRAINT).setValue(value);
4519        } else {
4520          addExtension(ToolingExtensions.EXT_XPATH_CONSTRAINT, value);
4521        }
4522      }
4523    }
4524
4525    @Block()
4526    public static class ElementDefinitionObligationComponent extends Element implements IBaseDatatypeElement {
4527        /**
4528         * Codes, potentially combination code, that describe the obligations that apply to implementing applications.
4529         */
4530        @Child(name = "code", type = {Coding.class}, order=1, min=1, max=1, modifier=false, summary=true)
4531        @Description(shortDefinition="Combination code describing the nature of the obligation", formalDefinition="Codes, potentially combination code, that describe the obligations that apply to implementing applications." )
4532        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/obligation")
4533        protected Coding code;
4534
4535        /**
4536         * Actor(s) to which the obligation applies.
4537         */
4538        @Child(name = "actor", type = {CanonicalType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4539        @Description(shortDefinition="Actor(s) this obligation applies to (all actors if none)", formalDefinition="Actor(s) to which the obligation applies." )
4540        protected List<CanonicalType> actor;
4541
4542        /**
4543         * Human readable documentation of the purpose or application of the obligation.
4544         */
4545        @Child(name = "documentation", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=true)
4546        @Description(shortDefinition="Documentation of the purpose or application of the obligation", formalDefinition="Human readable documentation of the purpose or application of the obligation." )
4547        protected MarkdownType documentation;
4548
4549        /**
4550         * Qualifies the usage of the obligation. Typically obligations 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.
4551         */
4552        @Child(name = "usage", type = {UsageContext.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4553        @Description(shortDefinition="Qualifies the usage - jurisdiction, gender, workflow status etc", formalDefinition="Qualifies the usage of the obligation. Typically obligations 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." )
4554        protected List<UsageContext> usage;
4555
4556        /**
4557         * A FHIRPath expression that restricts to the obligation to one of a set of repeats.
4558         */
4559        @Child(name = "filter", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
4560        @Description(shortDefinition="Limits obligation to some repeats by FHIRPath", formalDefinition="A FHIRPath expression that restricts to the obligation to one of a set of repeats." )
4561        protected StringType filter;
4562
4563        /**
4564         * Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.
4565         */
4566        @Child(name = "filterDocumentation", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
4567        @Description(shortDefinition="Ddescribes the intent of the filter (short)", formalDefinition="Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath." )
4568        protected StringType filterDocumentation;
4569
4570        /**
4571         * A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.
4572         */
4573        @Child(name = "process", type = {UriType.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4574        @Description(shortDefinition="The obligation only applies when perfomring the indicated process", formalDefinition="A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference." )
4575        protected List<UriType> process;
4576
4577        private static final long serialVersionUID = -1311481885L;
4578
4579    /**
4580     * Constructor
4581     */
4582      public ElementDefinitionObligationComponent() {
4583        super();
4584      }
4585
4586    /**
4587     * Constructor
4588     */
4589      public ElementDefinitionObligationComponent(Coding code) {
4590        super();
4591        this.setCode(code);
4592      }
4593
4594        /**
4595         * @return {@link #code} (Codes, potentially combination code, that describe the obligations that apply to implementing applications.)
4596         */
4597        public Coding getCode() { 
4598          if (this.code == null)
4599            if (Configuration.errorOnAutoCreate())
4600              throw new Error("Attempt to auto-create ElementDefinitionObligationComponent.code");
4601            else if (Configuration.doAutoCreate())
4602              this.code = new Coding(); // cc
4603          return this.code;
4604        }
4605
4606        public boolean hasCode() { 
4607          return this.code != null && !this.code.isEmpty();
4608        }
4609
4610        /**
4611         * @param value {@link #code} (Codes, potentially combination code, that describe the obligations that apply to implementing applications.)
4612         */
4613        public ElementDefinitionObligationComponent setCode(Coding value) { 
4614          this.code = value;
4615          return this;
4616        }
4617
4618        /**
4619         * @return {@link #actor} (Actor(s) to which the obligation applies.)
4620         */
4621        public List<CanonicalType> getActor() { 
4622          if (this.actor == null)
4623            this.actor = new ArrayList<CanonicalType>();
4624          return this.actor;
4625        }
4626
4627        /**
4628         * @return Returns a reference to <code>this</code> for easy method chaining
4629         */
4630        public ElementDefinitionObligationComponent setActor(List<CanonicalType> theActor) { 
4631          this.actor = theActor;
4632          return this;
4633        }
4634
4635        public boolean hasActor() { 
4636          if (this.actor == null)
4637            return false;
4638          for (CanonicalType item : this.actor)
4639            if (!item.isEmpty())
4640              return true;
4641          return false;
4642        }
4643
4644        /**
4645         * @return {@link #actor} (Actor(s) to which the obligation applies.)
4646         */
4647        public CanonicalType addActorElement() {//2 
4648          CanonicalType t = new CanonicalType();
4649          if (this.actor == null)
4650            this.actor = new ArrayList<CanonicalType>();
4651          this.actor.add(t);
4652          return t;
4653        }
4654
4655        /**
4656         * @param value {@link #actor} (Actor(s) to which the obligation applies.)
4657         */
4658        public ElementDefinitionObligationComponent addActor(String value) { //1
4659          CanonicalType t = new CanonicalType();
4660          t.setValue(value);
4661          if (this.actor == null)
4662            this.actor = new ArrayList<CanonicalType>();
4663          this.actor.add(t);
4664          return this;
4665        }
4666
4667        /**
4668         * @param value {@link #actor} (Actor(s) to which the obligation applies.)
4669         */
4670        public boolean hasActor(String value) { 
4671          if (this.actor == null)
4672            return false;
4673          for (CanonicalType v : this.actor)
4674            if (v.getValue().equals(value)) // canonical
4675              return true;
4676          return false;
4677        }
4678
4679        /**
4680         * @return {@link #documentation} (Human readable documentation of the purpose or application of the obligation.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
4681         */
4682        public MarkdownType getDocumentationElement() { 
4683          if (this.documentation == null)
4684            if (Configuration.errorOnAutoCreate())
4685              throw new Error("Attempt to auto-create ElementDefinitionObligationComponent.documentation");
4686            else if (Configuration.doAutoCreate())
4687              this.documentation = new MarkdownType(); // bb
4688          return this.documentation;
4689        }
4690
4691        public boolean hasDocumentationElement() { 
4692          return this.documentation != null && !this.documentation.isEmpty();
4693        }
4694
4695        public boolean hasDocumentation() { 
4696          return this.documentation != null && !this.documentation.isEmpty();
4697        }
4698
4699        /**
4700         * @param value {@link #documentation} (Human readable documentation of the purpose or application of the obligation.). This is the underlying object with id, value and extensions. The accessor "getDocumentation" gives direct access to the value
4701         */
4702        public ElementDefinitionObligationComponent setDocumentationElement(MarkdownType value) { 
4703          this.documentation = value;
4704          return this;
4705        }
4706
4707        /**
4708         * @return Human readable documentation of the purpose or application of the obligation.
4709         */
4710        public String getDocumentation() { 
4711          return this.documentation == null ? null : this.documentation.getValue();
4712        }
4713
4714        /**
4715         * @param value Human readable documentation of the purpose or application of the obligation.
4716         */
4717        public ElementDefinitionObligationComponent setDocumentation(String value) { 
4718          if (value == null)
4719            this.documentation = null;
4720          else {
4721            if (this.documentation == null)
4722              this.documentation = new MarkdownType();
4723            this.documentation.setValue(value);
4724          }
4725          return this;
4726        }
4727
4728        /**
4729         * @return {@link #usage} (Qualifies the usage of the obligation. Typically obligations 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.)
4730         */
4731        public List<UsageContext> getUsage() { 
4732          if (this.usage == null)
4733            this.usage = new ArrayList<UsageContext>();
4734          return this.usage;
4735        }
4736
4737        /**
4738         * @return Returns a reference to <code>this</code> for easy method chaining
4739         */
4740        public ElementDefinitionObligationComponent setUsage(List<UsageContext> theUsage) { 
4741          this.usage = theUsage;
4742          return this;
4743        }
4744
4745        public boolean hasUsage() { 
4746          if (this.usage == null)
4747            return false;
4748          for (UsageContext item : this.usage)
4749            if (!item.isEmpty())
4750              return true;
4751          return false;
4752        }
4753
4754        public UsageContext addUsage() { //3
4755          UsageContext t = new UsageContext();
4756          if (this.usage == null)
4757            this.usage = new ArrayList<UsageContext>();
4758          this.usage.add(t);
4759          return t;
4760        }
4761
4762        public ElementDefinitionObligationComponent addUsage(UsageContext t) { //3
4763          if (t == null)
4764            return this;
4765          if (this.usage == null)
4766            this.usage = new ArrayList<UsageContext>();
4767          this.usage.add(t);
4768          return this;
4769        }
4770
4771        /**
4772         * @return The first repetition of repeating field {@link #usage}, creating it if it does not already exist {3}
4773         */
4774        public UsageContext getUsageFirstRep() { 
4775          if (getUsage().isEmpty()) {
4776            addUsage();
4777          }
4778          return getUsage().get(0);
4779        }
4780
4781        /**
4782         * @return {@link #filter} (A FHIRPath expression that restricts to the obligation to one of a set of repeats.). This is the underlying object with id, value and extensions. The accessor "getFilter" gives direct access to the value
4783         */
4784        public StringType getFilterElement() { 
4785          if (this.filter == null)
4786            if (Configuration.errorOnAutoCreate())
4787              throw new Error("Attempt to auto-create ElementDefinitionObligationComponent.filter");
4788            else if (Configuration.doAutoCreate())
4789              this.filter = new StringType(); // bb
4790          return this.filter;
4791        }
4792
4793        public boolean hasFilterElement() { 
4794          return this.filter != null && !this.filter.isEmpty();
4795        }
4796
4797        public boolean hasFilter() { 
4798          return this.filter != null && !this.filter.isEmpty();
4799        }
4800
4801        /**
4802         * @param value {@link #filter} (A FHIRPath expression that restricts to the obligation to one of a set of repeats.). This is the underlying object with id, value and extensions. The accessor "getFilter" gives direct access to the value
4803         */
4804        public ElementDefinitionObligationComponent setFilterElement(StringType value) { 
4805          this.filter = value;
4806          return this;
4807        }
4808
4809        /**
4810         * @return A FHIRPath expression that restricts to the obligation to one of a set of repeats.
4811         */
4812        public String getFilter() { 
4813          return this.filter == null ? null : this.filter.getValue();
4814        }
4815
4816        /**
4817         * @param value A FHIRPath expression that restricts to the obligation to one of a set of repeats.
4818         */
4819        public ElementDefinitionObligationComponent setFilter(String value) { 
4820          if (Utilities.noString(value))
4821            this.filter = null;
4822          else {
4823            if (this.filter == null)
4824              this.filter = new StringType();
4825            this.filter.setValue(value);
4826          }
4827          return this;
4828        }
4829
4830        /**
4831         * @return {@link #filterDocumentation} (Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.). This is the underlying object with id, value and extensions. The accessor "getFilterDocumentation" gives direct access to the value
4832         */
4833        public StringType getFilterDocumentationElement() { 
4834          if (this.filterDocumentation == null)
4835            if (Configuration.errorOnAutoCreate())
4836              throw new Error("Attempt to auto-create ElementDefinitionObligationComponent.filterDocumentation");
4837            else if (Configuration.doAutoCreate())
4838              this.filterDocumentation = new StringType(); // bb
4839          return this.filterDocumentation;
4840        }
4841
4842        public boolean hasFilterDocumentationElement() { 
4843          return this.filterDocumentation != null && !this.filterDocumentation.isEmpty();
4844        }
4845
4846        public boolean hasFilterDocumentation() { 
4847          return this.filterDocumentation != null && !this.filterDocumentation.isEmpty();
4848        }
4849
4850        /**
4851         * @param value {@link #filterDocumentation} (Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.). This is the underlying object with id, value and extensions. The accessor "getFilterDocumentation" gives direct access to the value
4852         */
4853        public ElementDefinitionObligationComponent setFilterDocumentationElement(StringType value) { 
4854          this.filterDocumentation = value;
4855          return this;
4856        }
4857
4858        /**
4859         * @return Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.
4860         */
4861        public String getFilterDocumentation() { 
4862          return this.filterDocumentation == null ? null : this.filterDocumentation.getValue();
4863        }
4864
4865        /**
4866         * @param value Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.
4867         */
4868        public ElementDefinitionObligationComponent setFilterDocumentation(String value) { 
4869          if (Utilities.noString(value))
4870            this.filterDocumentation = null;
4871          else {
4872            if (this.filterDocumentation == null)
4873              this.filterDocumentation = new StringType();
4874            this.filterDocumentation.setValue(value);
4875          }
4876          return this;
4877        }
4878
4879        /**
4880         * @return {@link #process} (A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.)
4881         */
4882        public List<UriType> getProcess() { 
4883          if (this.process == null)
4884            this.process = new ArrayList<UriType>();
4885          return this.process;
4886        }
4887
4888        /**
4889         * @return Returns a reference to <code>this</code> for easy method chaining
4890         */
4891        public ElementDefinitionObligationComponent setProcess(List<UriType> theProcess) { 
4892          this.process = theProcess;
4893          return this;
4894        }
4895
4896        public boolean hasProcess() { 
4897          if (this.process == null)
4898            return false;
4899          for (UriType item : this.process)
4900            if (!item.isEmpty())
4901              return true;
4902          return false;
4903        }
4904
4905        /**
4906         * @return {@link #process} (A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.)
4907         */
4908        public UriType addProcessElement() {//2 
4909          UriType t = new UriType();
4910          if (this.process == null)
4911            this.process = new ArrayList<UriType>();
4912          this.process.add(t);
4913          return t;
4914        }
4915
4916        /**
4917         * @param value {@link #process} (A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.)
4918         */
4919        public ElementDefinitionObligationComponent addProcess(String value) { //1
4920          UriType t = new UriType();
4921          t.setValue(value);
4922          if (this.process == null)
4923            this.process = new ArrayList<UriType>();
4924          this.process.add(t);
4925          return this;
4926        }
4927
4928        /**
4929         * @param value {@link #process} (A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.)
4930         */
4931        public boolean hasProcess(String value) { 
4932          if (this.process == null)
4933            return false;
4934          for (UriType v : this.process)
4935            if (v.getValue().equals(value)) // uri
4936              return true;
4937          return false;
4938        }
4939
4940        protected void listChildren(List<Property> children) {
4941          super.listChildren(children);
4942          children.add(new Property("code", "Coding", "Codes, potentially combination code, that describe the obligations that apply to implementing applications.", 0, 1, code));
4943          children.add(new Property("actor", "canonical(ActorDefinition)", "Actor(s) to which the obligation applies.", 0, java.lang.Integer.MAX_VALUE, actor));
4944          children.add(new Property("documentation", "markdown", "Human readable documentation of the purpose or application of the obligation.", 0, 1, documentation));
4945          children.add(new Property("usage", "UsageContext", "Qualifies the usage of the obligation. Typically obligations 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));
4946          children.add(new Property("filter", "string", "A FHIRPath expression that restricts to the obligation to one of a set of repeats.", 0, 1, filter));
4947          children.add(new Property("filterDocumentation", "string", "Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.", 0, 1, filterDocumentation));
4948          children.add(new Property("process", "uri", "A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.", 0, java.lang.Integer.MAX_VALUE, process));
4949        }
4950
4951        @Override
4952        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4953          switch (_hash) {
4954          case 3059181: /*code*/  return new Property("code", "Coding", "Codes, potentially combination code, that describe the obligations that apply to implementing applications.", 0, 1, code);
4955          case 92645877: /*actor*/  return new Property("actor", "canonical(ActorDefinition)", "Actor(s) to which the obligation applies.", 0, java.lang.Integer.MAX_VALUE, actor);
4956          case 1587405498: /*documentation*/  return new Property("documentation", "markdown", "Human readable documentation of the purpose or application of the obligation.", 0, 1, documentation);
4957          case 111574433: /*usage*/  return new Property("usage", "UsageContext", "Qualifies the usage of the obligation. Typically obligations 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);
4958          case -1274492040: /*filter*/  return new Property("filter", "string", "A FHIRPath expression that restricts to the obligation to one of a set of repeats.", 0, 1, filter);
4959          case 1712106018: /*filterDocumentation*/  return new Property("filterDocumentation", "string", "Documents the FHIRPath expression for the benefit of users who are not familiar with FHIRPath.", 0, 1, filterDocumentation);
4960          case -309518737: /*process*/  return new Property("process", "uri", "A process that the obligation applies to. This might a canonical URL for an OperationDefinition, or some other reference.", 0, java.lang.Integer.MAX_VALUE, process);
4961          default: return super.getNamedProperty(_hash, _name, _checkValid);
4962          }
4963
4964        }
4965
4966      @Override
4967      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4968        switch (hash) {
4969        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Coding
4970        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : this.actor.toArray(new Base[this.actor.size()]); // CanonicalType
4971        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // MarkdownType
4972        case 111574433: /*usage*/ return this.usage == null ? new Base[0] : this.usage.toArray(new Base[this.usage.size()]); // UsageContext
4973        case -1274492040: /*filter*/ return this.filter == null ? new Base[0] : new Base[] {this.filter}; // StringType
4974        case 1712106018: /*filterDocumentation*/ return this.filterDocumentation == null ? new Base[0] : new Base[] {this.filterDocumentation}; // StringType
4975        case -309518737: /*process*/ return this.process == null ? new Base[0] : this.process.toArray(new Base[this.process.size()]); // UriType
4976        default: return super.getProperty(hash, name, checkValid);
4977        }
4978
4979      }
4980
4981      @Override
4982      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4983        switch (hash) {
4984        case 3059181: // code
4985          this.code = TypeConvertor.castToCoding(value); // Coding
4986          return value;
4987        case 92645877: // actor
4988          this.getActor().add(TypeConvertor.castToCanonical(value)); // CanonicalType
4989          return value;
4990        case 1587405498: // documentation
4991          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
4992          return value;
4993        case 111574433: // usage
4994          this.getUsage().add(TypeConvertor.castToUsageContext(value)); // UsageContext
4995          return value;
4996        case -1274492040: // filter
4997          this.filter = TypeConvertor.castToString(value); // StringType
4998          return value;
4999        case 1712106018: // filterDocumentation
5000          this.filterDocumentation = TypeConvertor.castToString(value); // StringType
5001          return value;
5002        case -309518737: // process
5003          this.getProcess().add(TypeConvertor.castToUri(value)); // UriType
5004          return value;
5005        default: return super.setProperty(hash, name, value);
5006        }
5007
5008      }
5009
5010      @Override
5011      public Base setProperty(String name, Base value) throws FHIRException {
5012        if (name.equals("code")) {
5013          this.code = TypeConvertor.castToCoding(value); // Coding
5014        } else if (name.equals("actor")) {
5015          this.getActor().add(TypeConvertor.castToCanonical(value));
5016        } else if (name.equals("documentation")) {
5017          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
5018        } else if (name.equals("usage")) {
5019          this.getUsage().add(TypeConvertor.castToUsageContext(value));
5020        } else if (name.equals("filter")) {
5021          this.filter = TypeConvertor.castToString(value); // StringType
5022        } else if (name.equals("filterDocumentation")) {
5023          this.filterDocumentation = TypeConvertor.castToString(value); // StringType
5024        } else if (name.equals("process")) {
5025          this.getProcess().add(TypeConvertor.castToUri(value));
5026        } else
5027          return super.setProperty(name, value);
5028        return value;
5029      }
5030
5031      @Override
5032      public Base makeProperty(int hash, String name) throws FHIRException {
5033        switch (hash) {
5034        case 3059181:  return getCode();
5035        case 92645877:  return addActorElement();
5036        case 1587405498:  return getDocumentationElement();
5037        case 111574433:  return addUsage(); 
5038        case -1274492040:  return getFilterElement();
5039        case 1712106018:  return getFilterDocumentationElement();
5040        case -309518737:  return addProcessElement();
5041        default: return super.makeProperty(hash, name);
5042        }
5043
5044      }
5045
5046      @Override
5047      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5048        switch (hash) {
5049        case 3059181: /*code*/ return new String[] {"Coding"};
5050        case 92645877: /*actor*/ return new String[] {"canonical"};
5051        case 1587405498: /*documentation*/ return new String[] {"markdown"};
5052        case 111574433: /*usage*/ return new String[] {"UsageContext"};
5053        case -1274492040: /*filter*/ return new String[] {"string"};
5054        case 1712106018: /*filterDocumentation*/ return new String[] {"string"};
5055        case -309518737: /*process*/ return new String[] {"uri"};
5056        default: return super.getTypesForProperty(hash, name);
5057        }
5058
5059      }
5060
5061      @Override
5062      public Base addChild(String name) throws FHIRException {
5063        if (name.equals("code")) {
5064          this.code = new Coding();
5065          return this.code;
5066        }
5067        else if (name.equals("actor")) {
5068          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.obligation.actor");
5069        }
5070        else if (name.equals("documentation")) {
5071          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.obligation.documentation");
5072        }
5073        else if (name.equals("usage")) {
5074          return addUsage();
5075        }
5076        else if (name.equals("filter")) {
5077          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.obligation.filter");
5078        }
5079        else if (name.equals("filterDocumentation")) {
5080          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.obligation.filterDocumentation");
5081        }
5082        else if (name.equals("process")) {
5083          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.obligation.process");
5084        }
5085        else
5086          return super.addChild(name);
5087      }
5088
5089      public ElementDefinitionObligationComponent copy() {
5090        ElementDefinitionObligationComponent dst = new ElementDefinitionObligationComponent();
5091        copyValues(dst);
5092        return dst;
5093      }
5094
5095      public void copyValues(ElementDefinitionObligationComponent dst) {
5096        super.copyValues(dst);
5097        dst.code = code == null ? null : code.copy();
5098        if (actor != null) {
5099          dst.actor = new ArrayList<CanonicalType>();
5100          for (CanonicalType i : actor)
5101            dst.actor.add(i.copy());
5102        };
5103        dst.documentation = documentation == null ? null : documentation.copy();
5104        if (usage != null) {
5105          dst.usage = new ArrayList<UsageContext>();
5106          for (UsageContext i : usage)
5107            dst.usage.add(i.copy());
5108        };
5109        dst.filter = filter == null ? null : filter.copy();
5110        dst.filterDocumentation = filterDocumentation == null ? null : filterDocumentation.copy();
5111        if (process != null) {
5112          dst.process = new ArrayList<UriType>();
5113          for (UriType i : process)
5114            dst.process.add(i.copy());
5115        };
5116      }
5117
5118      @Override
5119      public boolean equalsDeep(Base other_) {
5120        if (!super.equalsDeep(other_))
5121          return false;
5122        if (!(other_ instanceof ElementDefinitionObligationComponent))
5123          return false;
5124        ElementDefinitionObligationComponent o = (ElementDefinitionObligationComponent) other_;
5125        return compareDeep(code, o.code, true) && compareDeep(actor, o.actor, true) && compareDeep(documentation, o.documentation, true)
5126           && compareDeep(usage, o.usage, true) && compareDeep(filter, o.filter, true) && compareDeep(filterDocumentation, o.filterDocumentation, true)
5127           && compareDeep(process, o.process, true);
5128      }
5129
5130      @Override
5131      public boolean equalsShallow(Base other_) {
5132        if (!super.equalsShallow(other_))
5133          return false;
5134        if (!(other_ instanceof ElementDefinitionObligationComponent))
5135          return false;
5136        ElementDefinitionObligationComponent o = (ElementDefinitionObligationComponent) other_;
5137        return compareValues(actor, o.actor, true) && compareValues(documentation, o.documentation, true) && compareValues(filter, o.filter, true)
5138           && compareValues(filterDocumentation, o.filterDocumentation, true) && compareValues(process, o.process, true)
5139          ;
5140      }
5141
5142      public boolean isEmpty() {
5143        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, actor, documentation
5144          , usage, filter, filterDocumentation, process);
5145      }
5146
5147  public String fhirType() {
5148    return "ElementDefinition.obligation";
5149
5150  }
5151
5152  }
5153
5154    @Block()
5155    public static class ElementDefinitionBindingComponent extends Element implements IBaseDatatypeElement {
5156        /**
5157         * 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.
5158         */
5159        @Child(name = "strength", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
5160        @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." )
5161        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/binding-strength")
5162        protected Enumeration<BindingStrength> strength;
5163
5164        /**
5165         * Describes the intended use of this particular set of codes.
5166         */
5167        @Child(name = "description", type = {MarkdownType.class}, order=2, min=0, max=1, modifier=false, summary=true)
5168        @Description(shortDefinition="Intended use of codes in the bound value set", formalDefinition="Describes the intended use of this particular set of codes." )
5169        protected MarkdownType description;
5170
5171        /**
5172         * Refers to the value set that identifies the set of codes the binding refers to.
5173         */
5174        @Child(name = "valueSet", type = {CanonicalType.class}, order=3, min=0, max=1, modifier=false, summary=true)
5175        @Description(shortDefinition="Source of value set", formalDefinition="Refers to the value set that identifies the set of codes the binding refers to." )
5176        protected CanonicalType valueSet;
5177
5178        /**
5179         * Additional bindings that help applications implementing this element. Additional bindings do not replace the main binding but provide more information and/or context.
5180         */
5181        @Child(name = "additional", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5182        @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." )
5183        protected List<ElementDefinitionBindingAdditionalComponent> additional;
5184
5185        private static final long serialVersionUID = 16276611L;
5186
5187    /**
5188     * Constructor
5189     */
5190      public ElementDefinitionBindingComponent() {
5191        super();
5192      }
5193
5194    /**
5195     * Constructor
5196     */
5197      public ElementDefinitionBindingComponent(BindingStrength strength) {
5198        super();
5199        this.setStrength(strength);
5200      }
5201
5202        /**
5203         * @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
5204         */
5205        public Enumeration<BindingStrength> getStrengthElement() { 
5206          if (this.strength == null)
5207            if (Configuration.errorOnAutoCreate())
5208              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.strength");
5209            else if (Configuration.doAutoCreate())
5210              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory()); // bb
5211          return this.strength;
5212        }
5213
5214        public boolean hasStrengthElement() { 
5215          return this.strength != null && !this.strength.isEmpty();
5216        }
5217
5218        public boolean hasStrength() { 
5219          return this.strength != null && !this.strength.isEmpty();
5220        }
5221
5222        /**
5223         * @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
5224         */
5225        public ElementDefinitionBindingComponent setStrengthElement(Enumeration<BindingStrength> value) { 
5226          this.strength = value;
5227          return this;
5228        }
5229
5230        /**
5231         * @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.
5232         */
5233        public BindingStrength getStrength() { 
5234          return this.strength == null ? null : this.strength.getValue();
5235        }
5236
5237        /**
5238         * @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.
5239         */
5240        public ElementDefinitionBindingComponent setStrength(BindingStrength value) { 
5241            if (this.strength == null)
5242              this.strength = new Enumeration<BindingStrength>(new BindingStrengthEnumFactory());
5243            this.strength.setValue(value);
5244          return this;
5245        }
5246
5247        /**
5248         * @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
5249         */
5250        public MarkdownType getDescriptionElement() { 
5251          if (this.description == null)
5252            if (Configuration.errorOnAutoCreate())
5253              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.description");
5254            else if (Configuration.doAutoCreate())
5255              this.description = new MarkdownType(); // bb
5256          return this.description;
5257        }
5258
5259        public boolean hasDescriptionElement() { 
5260          return this.description != null && !this.description.isEmpty();
5261        }
5262
5263        public boolean hasDescription() { 
5264          return this.description != null && !this.description.isEmpty();
5265        }
5266
5267        /**
5268         * @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
5269         */
5270        public ElementDefinitionBindingComponent setDescriptionElement(MarkdownType value) { 
5271          this.description = value;
5272          return this;
5273        }
5274
5275        /**
5276         * @return Describes the intended use of this particular set of codes.
5277         */
5278        public String getDescription() { 
5279          return this.description == null ? null : this.description.getValue();
5280        }
5281
5282        /**
5283         * @param value Describes the intended use of this particular set of codes.
5284         */
5285        public ElementDefinitionBindingComponent setDescription(String value) { 
5286          if (value == null)
5287            this.description = null;
5288          else {
5289            if (this.description == null)
5290              this.description = new MarkdownType();
5291            this.description.setValue(value);
5292          }
5293          return this;
5294        }
5295
5296        /**
5297         * @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
5298         */
5299        public CanonicalType getValueSetElement() { 
5300          if (this.valueSet == null)
5301            if (Configuration.errorOnAutoCreate())
5302              throw new Error("Attempt to auto-create ElementDefinitionBindingComponent.valueSet");
5303            else if (Configuration.doAutoCreate())
5304              this.valueSet = new CanonicalType(); // bb
5305          return this.valueSet;
5306        }
5307
5308        public boolean hasValueSetElement() { 
5309          return this.valueSet != null && !this.valueSet.isEmpty();
5310        }
5311
5312        public boolean hasValueSet() { 
5313          return this.valueSet != null && !this.valueSet.isEmpty();
5314        }
5315
5316        /**
5317         * @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
5318         */
5319        public ElementDefinitionBindingComponent setValueSetElement(CanonicalType value) { 
5320          this.valueSet = value;
5321          return this;
5322        }
5323
5324        /**
5325         * @return Refers to the value set that identifies the set of codes the binding refers to.
5326         */
5327        public String getValueSet() { 
5328          return this.valueSet == null ? null : this.valueSet.getValue();
5329        }
5330
5331        /**
5332         * @param value Refers to the value set that identifies the set of codes the binding refers to.
5333         */
5334        public ElementDefinitionBindingComponent setValueSet(String value) { 
5335          if (Utilities.noString(value))
5336            this.valueSet = null;
5337          else {
5338            if (this.valueSet == null)
5339              this.valueSet = new CanonicalType();
5340            this.valueSet.setValue(value);
5341          }
5342          return this;
5343        }
5344
5345        /**
5346         * @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.)
5347         */
5348        public List<ElementDefinitionBindingAdditionalComponent> getAdditional() { 
5349          if (this.additional == null)
5350            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
5351          return this.additional;
5352        }
5353
5354        /**
5355         * @return Returns a reference to <code>this</code> for easy method chaining
5356         */
5357        public ElementDefinitionBindingComponent setAdditional(List<ElementDefinitionBindingAdditionalComponent> theAdditional) { 
5358          this.additional = theAdditional;
5359          return this;
5360        }
5361
5362        public boolean hasAdditional() { 
5363          if (this.additional == null)
5364            return false;
5365          for (ElementDefinitionBindingAdditionalComponent item : this.additional)
5366            if (!item.isEmpty())
5367              return true;
5368          return false;
5369        }
5370
5371        public ElementDefinitionBindingAdditionalComponent addAdditional() { //3
5372          ElementDefinitionBindingAdditionalComponent t = new ElementDefinitionBindingAdditionalComponent();
5373          if (this.additional == null)
5374            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
5375          this.additional.add(t);
5376          return t;
5377        }
5378
5379        public ElementDefinitionBindingComponent addAdditional(ElementDefinitionBindingAdditionalComponent t) { //3
5380          if (t == null)
5381            return this;
5382          if (this.additional == null)
5383            this.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
5384          this.additional.add(t);
5385          return this;
5386        }
5387
5388        /**
5389         * @return The first repetition of repeating field {@link #additional}, creating it if it does not already exist {3}
5390         */
5391        public ElementDefinitionBindingAdditionalComponent getAdditionalFirstRep() { 
5392          if (getAdditional().isEmpty()) {
5393            addAdditional();
5394          }
5395          return getAdditional().get(0);
5396        }
5397
5398        protected void listChildren(List<Property> children) {
5399          super.listChildren(children);
5400          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));
5401          children.add(new Property("description", "markdown", "Describes the intended use of this particular set of codes.", 0, 1, description));
5402          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));
5403          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));
5404        }
5405
5406        @Override
5407        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5408          switch (_hash) {
5409          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);
5410          case -1724546052: /*description*/  return new Property("description", "markdown", "Describes the intended use of this particular set of codes.", 0, 1, description);
5411          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);
5412          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);
5413          default: return super.getNamedProperty(_hash, _name, _checkValid);
5414          }
5415
5416        }
5417
5418      @Override
5419      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5420        switch (hash) {
5421        case 1791316033: /*strength*/ return this.strength == null ? new Base[0] : new Base[] {this.strength}; // Enumeration<BindingStrength>
5422        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
5423        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
5424        case -1931413465: /*additional*/ return this.additional == null ? new Base[0] : this.additional.toArray(new Base[this.additional.size()]); // ElementDefinitionBindingAdditionalComponent
5425        default: return super.getProperty(hash, name, checkValid);
5426        }
5427
5428      }
5429
5430      @Override
5431      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5432        switch (hash) {
5433        case 1791316033: // strength
5434          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
5435          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
5436          return value;
5437        case -1724546052: // description
5438          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5439          return value;
5440        case -1410174671: // valueSet
5441          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5442          return value;
5443        case -1931413465: // additional
5444          this.getAdditional().add((ElementDefinitionBindingAdditionalComponent) value); // ElementDefinitionBindingAdditionalComponent
5445          return value;
5446        default: return super.setProperty(hash, name, value);
5447        }
5448
5449      }
5450
5451      @Override
5452      public Base setProperty(String name, Base value) throws FHIRException {
5453        if (name.equals("strength")) {
5454          value = new BindingStrengthEnumFactory().fromType(TypeConvertor.castToCode(value));
5455          this.strength = (Enumeration) value; // Enumeration<BindingStrength>
5456        } else if (name.equals("description")) {
5457          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5458        } else if (name.equals("valueSet")) {
5459          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5460        } else if (name.equals("additional")) {
5461          this.getAdditional().add((ElementDefinitionBindingAdditionalComponent) value);
5462        } else
5463          return super.setProperty(name, value);
5464        return value;
5465      }
5466
5467      @Override
5468      public Base makeProperty(int hash, String name) throws FHIRException {
5469        switch (hash) {
5470        case 1791316033:  return getStrengthElement();
5471        case -1724546052:  return getDescriptionElement();
5472        case -1410174671:  return getValueSetElement();
5473        case -1931413465:  return addAdditional(); 
5474        default: return super.makeProperty(hash, name);
5475        }
5476
5477      }
5478
5479      @Override
5480      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5481        switch (hash) {
5482        case 1791316033: /*strength*/ return new String[] {"code"};
5483        case -1724546052: /*description*/ return new String[] {"markdown"};
5484        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
5485        case -1931413465: /*additional*/ return new String[] {};
5486        default: return super.getTypesForProperty(hash, name);
5487        }
5488
5489      }
5490
5491      @Override
5492      public Base addChild(String name) throws FHIRException {
5493        if (name.equals("strength")) {
5494          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.strength");
5495        }
5496        else if (name.equals("description")) {
5497          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.description");
5498        }
5499        else if (name.equals("valueSet")) {
5500          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.valueSet");
5501        }
5502        else if (name.equals("additional")) {
5503          return addAdditional();
5504        }
5505        else
5506          return super.addChild(name);
5507      }
5508
5509      public ElementDefinitionBindingComponent copy() {
5510        ElementDefinitionBindingComponent dst = new ElementDefinitionBindingComponent();
5511        copyValues(dst);
5512        return dst;
5513      }
5514
5515      public void copyValues(ElementDefinitionBindingComponent dst) {
5516        super.copyValues(dst);
5517        dst.strength = strength == null ? null : strength.copy();
5518        dst.description = description == null ? null : description.copy();
5519        dst.valueSet = valueSet == null ? null : valueSet.copy();
5520        if (additional != null) {
5521          dst.additional = new ArrayList<ElementDefinitionBindingAdditionalComponent>();
5522          for (ElementDefinitionBindingAdditionalComponent i : additional)
5523            dst.additional.add(i.copy());
5524        };
5525      }
5526
5527      @Override
5528      public boolean equalsDeep(Base other_) {
5529        if (!super.equalsDeep(other_))
5530          return false;
5531        if (!(other_ instanceof ElementDefinitionBindingComponent))
5532          return false;
5533        ElementDefinitionBindingComponent o = (ElementDefinitionBindingComponent) other_;
5534        return compareDeep(strength, o.strength, true) && compareDeep(description, o.description, true)
5535           && compareDeep(valueSet, o.valueSet, true) && compareDeep(additional, o.additional, true);
5536      }
5537
5538      @Override
5539      public boolean equalsShallow(Base other_) {
5540        if (!super.equalsShallow(other_))
5541          return false;
5542        if (!(other_ instanceof ElementDefinitionBindingComponent))
5543          return false;
5544        ElementDefinitionBindingComponent o = (ElementDefinitionBindingComponent) other_;
5545        return compareValues(strength, o.strength, true) && compareValues(description, o.description, true)
5546           && compareValues(valueSet, o.valueSet, true);
5547      }
5548
5549      public boolean isEmpty() {
5550        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(strength, description, valueSet
5551          , additional);
5552      }
5553
5554  public String fhirType() {
5555    return "ElementDefinition.binding";
5556
5557  }
5558
5559  }
5560
5561    @Block()
5562    public static class ElementDefinitionBindingAdditionalComponent extends Element implements IBaseDatatypeElement {
5563        /**
5564         * The use of this additional binding.
5565         */
5566        @Child(name = "purpose", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
5567        @Description(shortDefinition="maximum | minimum | required | extensible | candidate | current | preferred | ui | starter | component", formalDefinition="The use of this additional binding." )
5568        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/additional-binding-purpose")
5569        protected Enumeration<AdditionalBindingPurposeVS> purpose;
5570
5571        /**
5572         * The valueSet that is being bound for the purpose.
5573         */
5574        @Child(name = "valueSet", type = {CanonicalType.class}, order=2, min=1, max=1, modifier=false, summary=true)
5575        @Description(shortDefinition="The value set for the additional binding", formalDefinition="The valueSet that is being bound for the purpose." )
5576        protected CanonicalType valueSet;
5577
5578        /**
5579         * Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5580         */
5581        @Child(name = "documentation", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=true)
5582        @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." )
5583        protected MarkdownType documentation;
5584
5585        /**
5586         * Concise documentation - for summary tables.
5587         */
5588        @Child(name = "shortDoco", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
5589        @Description(shortDefinition="Concise documentation - for summary tables", formalDefinition="Concise documentation - for summary tables." )
5590        protected StringType shortDoco;
5591
5592        /**
5593         * 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.
5594         */
5595        @Child(name = "usage", type = {UsageContext.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5596        @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." )
5597        protected List<UsageContext> usage;
5598
5599        /**
5600         * Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.
5601         */
5602        @Child(name = "any", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
5603        @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." )
5604        protected BooleanType any;
5605
5606        private static final long serialVersionUID = -1312796441L;
5607
5608    /**
5609     * Constructor
5610     */
5611      public ElementDefinitionBindingAdditionalComponent() {
5612        super();
5613      }
5614
5615    /**
5616     * Constructor
5617     */
5618      public ElementDefinitionBindingAdditionalComponent(AdditionalBindingPurposeVS purpose, String valueSet) {
5619        super();
5620        this.setPurpose(purpose);
5621        this.setValueSet(valueSet);
5622      }
5623
5624        /**
5625         * @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
5626         */
5627        public Enumeration<AdditionalBindingPurposeVS> getPurposeElement() { 
5628          if (this.purpose == null)
5629            if (Configuration.errorOnAutoCreate())
5630              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.purpose");
5631            else if (Configuration.doAutoCreate())
5632              this.purpose = new Enumeration<AdditionalBindingPurposeVS>(new AdditionalBindingPurposeVSEnumFactory()); // bb
5633          return this.purpose;
5634        }
5635
5636        public boolean hasPurposeElement() { 
5637          return this.purpose != null && !this.purpose.isEmpty();
5638        }
5639
5640        public boolean hasPurpose() { 
5641          return this.purpose != null && !this.purpose.isEmpty();
5642        }
5643
5644        /**
5645         * @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
5646         */
5647        public ElementDefinitionBindingAdditionalComponent setPurposeElement(Enumeration<AdditionalBindingPurposeVS> value) { 
5648          this.purpose = value;
5649          return this;
5650        }
5651
5652        /**
5653         * @return The use of this additional binding.
5654         */
5655        public AdditionalBindingPurposeVS getPurpose() { 
5656          return this.purpose == null ? null : this.purpose.getValue();
5657        }
5658
5659        /**
5660         * @param value The use of this additional binding.
5661         */
5662        public ElementDefinitionBindingAdditionalComponent setPurpose(AdditionalBindingPurposeVS value) { 
5663            if (this.purpose == null)
5664              this.purpose = new Enumeration<AdditionalBindingPurposeVS>(new AdditionalBindingPurposeVSEnumFactory());
5665            this.purpose.setValue(value);
5666          return this;
5667        }
5668
5669        /**
5670         * @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
5671         */
5672        public CanonicalType getValueSetElement() { 
5673          if (this.valueSet == null)
5674            if (Configuration.errorOnAutoCreate())
5675              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.valueSet");
5676            else if (Configuration.doAutoCreate())
5677              this.valueSet = new CanonicalType(); // bb
5678          return this.valueSet;
5679        }
5680
5681        public boolean hasValueSetElement() { 
5682          return this.valueSet != null && !this.valueSet.isEmpty();
5683        }
5684
5685        public boolean hasValueSet() { 
5686          return this.valueSet != null && !this.valueSet.isEmpty();
5687        }
5688
5689        /**
5690         * @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
5691         */
5692        public ElementDefinitionBindingAdditionalComponent setValueSetElement(CanonicalType value) { 
5693          this.valueSet = value;
5694          return this;
5695        }
5696
5697        /**
5698         * @return The valueSet that is being bound for the purpose.
5699         */
5700        public String getValueSet() { 
5701          return this.valueSet == null ? null : this.valueSet.getValue();
5702        }
5703
5704        /**
5705         * @param value The valueSet that is being bound for the purpose.
5706         */
5707        public ElementDefinitionBindingAdditionalComponent setValueSet(String value) { 
5708            if (this.valueSet == null)
5709              this.valueSet = new CanonicalType();
5710            this.valueSet.setValue(value);
5711          return this;
5712        }
5713
5714        /**
5715         * @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
5716         */
5717        public MarkdownType getDocumentationElement() { 
5718          if (this.documentation == null)
5719            if (Configuration.errorOnAutoCreate())
5720              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.documentation");
5721            else if (Configuration.doAutoCreate())
5722              this.documentation = new MarkdownType(); // bb
5723          return this.documentation;
5724        }
5725
5726        public boolean hasDocumentationElement() { 
5727          return this.documentation != null && !this.documentation.isEmpty();
5728        }
5729
5730        public boolean hasDocumentation() { 
5731          return this.documentation != null && !this.documentation.isEmpty();
5732        }
5733
5734        /**
5735         * @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
5736         */
5737        public ElementDefinitionBindingAdditionalComponent setDocumentationElement(MarkdownType value) { 
5738          this.documentation = value;
5739          return this;
5740        }
5741
5742        /**
5743         * @return Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5744         */
5745        public String getDocumentation() { 
5746          return this.documentation == null ? null : this.documentation.getValue();
5747        }
5748
5749        /**
5750         * @param value Documentation of the purpose of use of the bindingproviding additional information about how it is intended to be used.
5751         */
5752        public ElementDefinitionBindingAdditionalComponent setDocumentation(String value) { 
5753          if (value == null)
5754            this.documentation = null;
5755          else {
5756            if (this.documentation == null)
5757              this.documentation = new MarkdownType();
5758            this.documentation.setValue(value);
5759          }
5760          return this;
5761        }
5762
5763        /**
5764         * @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
5765         */
5766        public StringType getShortDocoElement() { 
5767          if (this.shortDoco == null)
5768            if (Configuration.errorOnAutoCreate())
5769              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.shortDoco");
5770            else if (Configuration.doAutoCreate())
5771              this.shortDoco = new StringType(); // bb
5772          return this.shortDoco;
5773        }
5774
5775        public boolean hasShortDocoElement() { 
5776          return this.shortDoco != null && !this.shortDoco.isEmpty();
5777        }
5778
5779        public boolean hasShortDoco() { 
5780          return this.shortDoco != null && !this.shortDoco.isEmpty();
5781        }
5782
5783        /**
5784         * @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
5785         */
5786        public ElementDefinitionBindingAdditionalComponent setShortDocoElement(StringType value) { 
5787          this.shortDoco = value;
5788          return this;
5789        }
5790
5791        /**
5792         * @return Concise documentation - for summary tables.
5793         */
5794        public String getShortDoco() { 
5795          return this.shortDoco == null ? null : this.shortDoco.getValue();
5796        }
5797
5798        /**
5799         * @param value Concise documentation - for summary tables.
5800         */
5801        public ElementDefinitionBindingAdditionalComponent setShortDoco(String value) { 
5802          if (Utilities.noString(value))
5803            this.shortDoco = null;
5804          else {
5805            if (this.shortDoco == null)
5806              this.shortDoco = new StringType();
5807            this.shortDoco.setValue(value);
5808          }
5809          return this;
5810        }
5811
5812        /**
5813         * @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.)
5814         */
5815        public List<UsageContext> getUsage() { 
5816          if (this.usage == null)
5817            this.usage = new ArrayList<UsageContext>();
5818          return this.usage;
5819        }
5820
5821        /**
5822         * @return Returns a reference to <code>this</code> for easy method chaining
5823         */
5824        public ElementDefinitionBindingAdditionalComponent setUsage(List<UsageContext> theUsage) { 
5825          this.usage = theUsage;
5826          return this;
5827        }
5828
5829        public boolean hasUsage() { 
5830          if (this.usage == null)
5831            return false;
5832          for (UsageContext item : this.usage)
5833            if (!item.isEmpty())
5834              return true;
5835          return false;
5836        }
5837
5838        public UsageContext addUsage() { //3
5839          UsageContext t = new UsageContext();
5840          if (this.usage == null)
5841            this.usage = new ArrayList<UsageContext>();
5842          this.usage.add(t);
5843          return t;
5844        }
5845
5846        public ElementDefinitionBindingAdditionalComponent addUsage(UsageContext t) { //3
5847          if (t == null)
5848            return this;
5849          if (this.usage == null)
5850            this.usage = new ArrayList<UsageContext>();
5851          this.usage.add(t);
5852          return this;
5853        }
5854
5855        /**
5856         * @return The first repetition of repeating field {@link #usage}, creating it if it does not already exist {3}
5857         */
5858        public UsageContext getUsageFirstRep() { 
5859          if (getUsage().isEmpty()) {
5860            addUsage();
5861          }
5862          return getUsage().get(0);
5863        }
5864
5865        /**
5866         * @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
5867         */
5868        public BooleanType getAnyElement() { 
5869          if (this.any == null)
5870            if (Configuration.errorOnAutoCreate())
5871              throw new Error("Attempt to auto-create ElementDefinitionBindingAdditionalComponent.any");
5872            else if (Configuration.doAutoCreate())
5873              this.any = new BooleanType(); // bb
5874          return this.any;
5875        }
5876
5877        public boolean hasAnyElement() { 
5878          return this.any != null && !this.any.isEmpty();
5879        }
5880
5881        public boolean hasAny() { 
5882          return this.any != null && !this.any.isEmpty();
5883        }
5884
5885        /**
5886         * @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
5887         */
5888        public ElementDefinitionBindingAdditionalComponent setAnyElement(BooleanType value) { 
5889          this.any = value;
5890          return this;
5891        }
5892
5893        /**
5894         * @return Whether the binding applies to all repeats, or just to any one of them. This is only relevant for elements that can repeat.
5895         */
5896        public boolean getAny() { 
5897          return this.any == null || this.any.isEmpty() ? false : this.any.getValue();
5898        }
5899
5900        /**
5901         * @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.
5902         */
5903        public ElementDefinitionBindingAdditionalComponent setAny(boolean value) { 
5904            if (this.any == null)
5905              this.any = new BooleanType();
5906            this.any.setValue(value);
5907          return this;
5908        }
5909
5910        protected void listChildren(List<Property> children) {
5911          super.listChildren(children);
5912          children.add(new Property("purpose", "code", "The use of this additional binding.", 0, 1, purpose));
5913          children.add(new Property("valueSet", "canonical(ValueSet)", "The valueSet that is being bound for the purpose.", 0, 1, valueSet));
5914          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));
5915          children.add(new Property("shortDoco", "string", "Concise documentation - for summary tables.", 0, 1, shortDoco));
5916          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));
5917          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));
5918        }
5919
5920        @Override
5921        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5922          switch (_hash) {
5923          case -220463842: /*purpose*/  return new Property("purpose", "code", "The use of this additional binding.", 0, 1, purpose);
5924          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "The valueSet that is being bound for the purpose.", 0, 1, valueSet);
5925          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);
5926          case -2028503853: /*shortDoco*/  return new Property("shortDoco", "string", "Concise documentation - for summary tables.", 0, 1, shortDoco);
5927          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);
5928          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);
5929          default: return super.getNamedProperty(_hash, _name, _checkValid);
5930          }
5931
5932        }
5933
5934      @Override
5935      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5936        switch (hash) {
5937        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // Enumeration<AdditionalBindingPurposeVS>
5938        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : new Base[] {this.valueSet}; // CanonicalType
5939        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : new Base[] {this.documentation}; // MarkdownType
5940        case -2028503853: /*shortDoco*/ return this.shortDoco == null ? new Base[0] : new Base[] {this.shortDoco}; // StringType
5941        case 111574433: /*usage*/ return this.usage == null ? new Base[0] : this.usage.toArray(new Base[this.usage.size()]); // UsageContext
5942        case 96748: /*any*/ return this.any == null ? new Base[0] : new Base[] {this.any}; // BooleanType
5943        default: return super.getProperty(hash, name, checkValid);
5944        }
5945
5946      }
5947
5948      @Override
5949      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5950        switch (hash) {
5951        case -220463842: // purpose
5952          value = new AdditionalBindingPurposeVSEnumFactory().fromType(TypeConvertor.castToCode(value));
5953          this.purpose = (Enumeration) value; // Enumeration<AdditionalBindingPurposeVS>
5954          return value;
5955        case -1410174671: // valueSet
5956          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5957          return value;
5958        case 1587405498: // documentation
5959          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
5960          return value;
5961        case -2028503853: // shortDoco
5962          this.shortDoco = TypeConvertor.castToString(value); // StringType
5963          return value;
5964        case 111574433: // usage
5965          this.getUsage().add(TypeConvertor.castToUsageContext(value)); // UsageContext
5966          return value;
5967        case 96748: // any
5968          this.any = TypeConvertor.castToBoolean(value); // BooleanType
5969          return value;
5970        default: return super.setProperty(hash, name, value);
5971        }
5972
5973      }
5974
5975      @Override
5976      public Base setProperty(String name, Base value) throws FHIRException {
5977        if (name.equals("purpose")) {
5978          value = new AdditionalBindingPurposeVSEnumFactory().fromType(TypeConvertor.castToCode(value));
5979          this.purpose = (Enumeration) value; // Enumeration<AdditionalBindingPurposeVS>
5980        } else if (name.equals("valueSet")) {
5981          this.valueSet = TypeConvertor.castToCanonical(value); // CanonicalType
5982        } else if (name.equals("documentation")) {
5983          this.documentation = TypeConvertor.castToMarkdown(value); // MarkdownType
5984        } else if (name.equals("shortDoco")) {
5985          this.shortDoco = TypeConvertor.castToString(value); // StringType
5986        } else if (name.equals("usage")) {
5987          this.getUsage().add(TypeConvertor.castToUsageContext(value));
5988        } else if (name.equals("any")) {
5989          this.any = TypeConvertor.castToBoolean(value); // BooleanType
5990        } else
5991          return super.setProperty(name, value);
5992        return value;
5993      }
5994
5995      @Override
5996      public Base makeProperty(int hash, String name) throws FHIRException {
5997        switch (hash) {
5998        case -220463842:  return getPurposeElement();
5999        case -1410174671:  return getValueSetElement();
6000        case 1587405498:  return getDocumentationElement();
6001        case -2028503853:  return getShortDocoElement();
6002        case 111574433:  return addUsage(); 
6003        case 96748:  return getAnyElement();
6004        default: return super.makeProperty(hash, name);
6005        }
6006
6007      }
6008
6009      @Override
6010      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6011        switch (hash) {
6012        case -220463842: /*purpose*/ return new String[] {"code"};
6013        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
6014        case 1587405498: /*documentation*/ return new String[] {"markdown"};
6015        case -2028503853: /*shortDoco*/ return new String[] {"string"};
6016        case 111574433: /*usage*/ return new String[] {"UsageContext"};
6017        case 96748: /*any*/ return new String[] {"boolean"};
6018        default: return super.getTypesForProperty(hash, name);
6019        }
6020
6021      }
6022
6023      @Override
6024      public Base addChild(String name) throws FHIRException {
6025        if (name.equals("purpose")) {
6026          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.additional.purpose");
6027        }
6028        else if (name.equals("valueSet")) {
6029          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.additional.valueSet");
6030        }
6031        else if (name.equals("documentation")) {
6032          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.additional.documentation");
6033        }
6034        else if (name.equals("shortDoco")) {
6035          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.additional.shortDoco");
6036        }
6037        else if (name.equals("usage")) {
6038          return addUsage();
6039        }
6040        else if (name.equals("any")) {
6041          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.binding.additional.any");
6042        }
6043        else
6044          return super.addChild(name);
6045      }
6046
6047      public ElementDefinitionBindingAdditionalComponent copy() {
6048        ElementDefinitionBindingAdditionalComponent dst = new ElementDefinitionBindingAdditionalComponent();
6049        copyValues(dst);
6050        return dst;
6051      }
6052
6053      public void copyValues(ElementDefinitionBindingAdditionalComponent dst) {
6054        super.copyValues(dst);
6055        dst.purpose = purpose == null ? null : purpose.copy();
6056        dst.valueSet = valueSet == null ? null : valueSet.copy();
6057        dst.documentation = documentation == null ? null : documentation.copy();
6058        dst.shortDoco = shortDoco == null ? null : shortDoco.copy();
6059        if (usage != null) {
6060          dst.usage = new ArrayList<UsageContext>();
6061          for (UsageContext i : usage)
6062            dst.usage.add(i.copy());
6063        };
6064        dst.any = any == null ? null : any.copy();
6065      }
6066
6067      @Override
6068      public boolean equalsDeep(Base other_) {
6069        if (!super.equalsDeep(other_))
6070          return false;
6071        if (!(other_ instanceof ElementDefinitionBindingAdditionalComponent))
6072          return false;
6073        ElementDefinitionBindingAdditionalComponent o = (ElementDefinitionBindingAdditionalComponent) other_;
6074        return compareDeep(purpose, o.purpose, true) && compareDeep(valueSet, o.valueSet, true) && compareDeep(documentation, o.documentation, true)
6075           && compareDeep(shortDoco, o.shortDoco, true) && compareDeep(usage, o.usage, true) && compareDeep(any, o.any, true)
6076          ;
6077      }
6078
6079      @Override
6080      public boolean equalsShallow(Base other_) {
6081        if (!super.equalsShallow(other_))
6082          return false;
6083        if (!(other_ instanceof ElementDefinitionBindingAdditionalComponent))
6084          return false;
6085        ElementDefinitionBindingAdditionalComponent o = (ElementDefinitionBindingAdditionalComponent) other_;
6086        return compareValues(purpose, o.purpose, true) && compareValues(valueSet, o.valueSet, true) && compareValues(documentation, o.documentation, true)
6087           && compareValues(shortDoco, o.shortDoco, true) && compareValues(any, o.any, true);
6088      }
6089
6090      public boolean isEmpty() {
6091        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, valueSet, documentation
6092          , shortDoco, usage, any);
6093      }
6094
6095  public String fhirType() {
6096    return "ElementDefinition.binding.additional";
6097
6098  }
6099
6100  }
6101
6102    @Block()
6103    public static class ElementDefinitionMappingComponent extends Element implements IBaseDatatypeElement {
6104        /**
6105         * An internal reference to the definition of a mapping.
6106         */
6107        @Child(name = "identity", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=true)
6108        @Description(shortDefinition="Reference to mapping declaration", formalDefinition="An internal reference to the definition of a mapping." )
6109        protected IdType identity;
6110
6111        /**
6112         * Identifies the computable language in which mapping.map is expressed.
6113         */
6114        @Child(name = "language", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
6115        @Description(shortDefinition="Computable language of mapping", formalDefinition="Identifies the computable language in which mapping.map is expressed." )
6116        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/mimetypes")
6117        protected CodeType language;
6118
6119        /**
6120         * Expresses what part of the target specification corresponds to this element.
6121         */
6122        @Child(name = "map", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
6123        @Description(shortDefinition="Details of the mapping", formalDefinition="Expresses what part of the target specification corresponds to this element." )
6124        protected StringType map;
6125
6126        /**
6127         * Comments that provide information about the mapping or its use.
6128         */
6129        @Child(name = "comment", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=true)
6130        @Description(shortDefinition="Comments about the mapping or its use", formalDefinition="Comments that provide information about the mapping or its use." )
6131        protected MarkdownType comment;
6132
6133        private static final long serialVersionUID = -582458727L;
6134
6135    /**
6136     * Constructor
6137     */
6138      public ElementDefinitionMappingComponent() {
6139        super();
6140      }
6141
6142    /**
6143     * Constructor
6144     */
6145      public ElementDefinitionMappingComponent(String identity, String map) {
6146        super();
6147        this.setIdentity(identity);
6148        this.setMap(map);
6149      }
6150
6151        /**
6152         * @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
6153         */
6154        public IdType getIdentityElement() { 
6155          if (this.identity == null)
6156            if (Configuration.errorOnAutoCreate())
6157              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.identity");
6158            else if (Configuration.doAutoCreate())
6159              this.identity = new IdType(); // bb
6160          return this.identity;
6161        }
6162
6163        public boolean hasIdentityElement() { 
6164          return this.identity != null && !this.identity.isEmpty();
6165        }
6166
6167        public boolean hasIdentity() { 
6168          return this.identity != null && !this.identity.isEmpty();
6169        }
6170
6171        /**
6172         * @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
6173         */
6174        public ElementDefinitionMappingComponent setIdentityElement(IdType value) { 
6175          this.identity = value;
6176          return this;
6177        }
6178
6179        /**
6180         * @return An internal reference to the definition of a mapping.
6181         */
6182        public String getIdentity() { 
6183          return this.identity == null ? null : this.identity.getValue();
6184        }
6185
6186        /**
6187         * @param value An internal reference to the definition of a mapping.
6188         */
6189        public ElementDefinitionMappingComponent setIdentity(String value) { 
6190            if (this.identity == null)
6191              this.identity = new IdType();
6192            this.identity.setValue(value);
6193          return this;
6194        }
6195
6196        /**
6197         * @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
6198         */
6199        public CodeType getLanguageElement() { 
6200          if (this.language == null)
6201            if (Configuration.errorOnAutoCreate())
6202              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.language");
6203            else if (Configuration.doAutoCreate())
6204              this.language = new CodeType(); // bb
6205          return this.language;
6206        }
6207
6208        public boolean hasLanguageElement() { 
6209          return this.language != null && !this.language.isEmpty();
6210        }
6211
6212        public boolean hasLanguage() { 
6213          return this.language != null && !this.language.isEmpty();
6214        }
6215
6216        /**
6217         * @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
6218         */
6219        public ElementDefinitionMappingComponent setLanguageElement(CodeType value) { 
6220          this.language = value;
6221          return this;
6222        }
6223
6224        /**
6225         * @return Identifies the computable language in which mapping.map is expressed.
6226         */
6227        public String getLanguage() { 
6228          return this.language == null ? null : this.language.getValue();
6229        }
6230
6231        /**
6232         * @param value Identifies the computable language in which mapping.map is expressed.
6233         */
6234        public ElementDefinitionMappingComponent setLanguage(String value) { 
6235          if (Utilities.noString(value))
6236            this.language = null;
6237          else {
6238            if (this.language == null)
6239              this.language = new CodeType();
6240            this.language.setValue(value);
6241          }
6242          return this;
6243        }
6244
6245        /**
6246         * @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
6247         */
6248        public StringType getMapElement() { 
6249          if (this.map == null)
6250            if (Configuration.errorOnAutoCreate())
6251              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.map");
6252            else if (Configuration.doAutoCreate())
6253              this.map = new StringType(); // bb
6254          return this.map;
6255        }
6256
6257        public boolean hasMapElement() { 
6258          return this.map != null && !this.map.isEmpty();
6259        }
6260
6261        public boolean hasMap() { 
6262          return this.map != null && !this.map.isEmpty();
6263        }
6264
6265        /**
6266         * @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
6267         */
6268        public ElementDefinitionMappingComponent setMapElement(StringType value) { 
6269          this.map = value;
6270          return this;
6271        }
6272
6273        /**
6274         * @return Expresses what part of the target specification corresponds to this element.
6275         */
6276        public String getMap() { 
6277          return this.map == null ? null : this.map.getValue();
6278        }
6279
6280        /**
6281         * @param value Expresses what part of the target specification corresponds to this element.
6282         */
6283        public ElementDefinitionMappingComponent setMap(String value) { 
6284            if (this.map == null)
6285              this.map = new StringType();
6286            this.map.setValue(value);
6287          return this;
6288        }
6289
6290        /**
6291         * @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
6292         */
6293        public MarkdownType getCommentElement() { 
6294          if (this.comment == null)
6295            if (Configuration.errorOnAutoCreate())
6296              throw new Error("Attempt to auto-create ElementDefinitionMappingComponent.comment");
6297            else if (Configuration.doAutoCreate())
6298              this.comment = new MarkdownType(); // bb
6299          return this.comment;
6300        }
6301
6302        public boolean hasCommentElement() { 
6303          return this.comment != null && !this.comment.isEmpty();
6304        }
6305
6306        public boolean hasComment() { 
6307          return this.comment != null && !this.comment.isEmpty();
6308        }
6309
6310        /**
6311         * @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
6312         */
6313        public ElementDefinitionMappingComponent setCommentElement(MarkdownType value) { 
6314          this.comment = value;
6315          return this;
6316        }
6317
6318        /**
6319         * @return Comments that provide information about the mapping or its use.
6320         */
6321        public String getComment() { 
6322          return this.comment == null ? null : this.comment.getValue();
6323        }
6324
6325        /**
6326         * @param value Comments that provide information about the mapping or its use.
6327         */
6328        public ElementDefinitionMappingComponent setComment(String value) { 
6329          if (value == null)
6330            this.comment = null;
6331          else {
6332            if (this.comment == null)
6333              this.comment = new MarkdownType();
6334            this.comment.setValue(value);
6335          }
6336          return this;
6337        }
6338
6339        protected void listChildren(List<Property> children) {
6340          super.listChildren(children);
6341          children.add(new Property("identity", "id", "An internal reference to the definition of a mapping.", 0, 1, identity));
6342          children.add(new Property("language", "code", "Identifies the computable language in which mapping.map is expressed.", 0, 1, language));
6343          children.add(new Property("map", "string", "Expresses what part of the target specification corresponds to this element.", 0, 1, map));
6344          children.add(new Property("comment", "markdown", "Comments that provide information about the mapping or its use.", 0, 1, comment));
6345        }
6346
6347        @Override
6348        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6349          switch (_hash) {
6350          case -135761730: /*identity*/  return new Property("identity", "id", "An internal reference to the definition of a mapping.", 0, 1, identity);
6351          case -1613589672: /*language*/  return new Property("language", "code", "Identifies the computable language in which mapping.map is expressed.", 0, 1, language);
6352          case 107868: /*map*/  return new Property("map", "string", "Expresses what part of the target specification corresponds to this element.", 0, 1, map);
6353          case 950398559: /*comment*/  return new Property("comment", "markdown", "Comments that provide information about the mapping or its use.", 0, 1, comment);
6354          default: return super.getNamedProperty(_hash, _name, _checkValid);
6355          }
6356
6357        }
6358
6359      @Override
6360      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6361        switch (hash) {
6362        case -135761730: /*identity*/ return this.identity == null ? new Base[0] : new Base[] {this.identity}; // IdType
6363        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
6364        case 107868: /*map*/ return this.map == null ? new Base[0] : new Base[] {this.map}; // StringType
6365        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
6366        default: return super.getProperty(hash, name, checkValid);
6367        }
6368
6369      }
6370
6371      @Override
6372      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6373        switch (hash) {
6374        case -135761730: // identity
6375          this.identity = TypeConvertor.castToId(value); // IdType
6376          return value;
6377        case -1613589672: // language
6378          this.language = TypeConvertor.castToCode(value); // CodeType
6379          return value;
6380        case 107868: // map
6381          this.map = TypeConvertor.castToString(value); // StringType
6382          return value;
6383        case 950398559: // comment
6384          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
6385          return value;
6386        default: return super.setProperty(hash, name, value);
6387        }
6388
6389      }
6390
6391      @Override
6392      public Base setProperty(String name, Base value) throws FHIRException {
6393        if (name.equals("identity")) {
6394          this.identity = TypeConvertor.castToId(value); // IdType
6395        } else if (name.equals("language")) {
6396          this.language = TypeConvertor.castToCode(value); // CodeType
6397        } else if (name.equals("map")) {
6398          this.map = TypeConvertor.castToString(value); // StringType
6399        } else if (name.equals("comment")) {
6400          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
6401        } else
6402          return super.setProperty(name, value);
6403        return value;
6404      }
6405
6406      @Override
6407      public Base makeProperty(int hash, String name) throws FHIRException {
6408        switch (hash) {
6409        case -135761730:  return getIdentityElement();
6410        case -1613589672:  return getLanguageElement();
6411        case 107868:  return getMapElement();
6412        case 950398559:  return getCommentElement();
6413        default: return super.makeProperty(hash, name);
6414        }
6415
6416      }
6417
6418      @Override
6419      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6420        switch (hash) {
6421        case -135761730: /*identity*/ return new String[] {"id"};
6422        case -1613589672: /*language*/ return new String[] {"code"};
6423        case 107868: /*map*/ return new String[] {"string"};
6424        case 950398559: /*comment*/ return new String[] {"markdown"};
6425        default: return super.getTypesForProperty(hash, name);
6426        }
6427
6428      }
6429
6430      @Override
6431      public Base addChild(String name) throws FHIRException {
6432        if (name.equals("identity")) {
6433          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mapping.identity");
6434        }
6435        else if (name.equals("language")) {
6436          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mapping.language");
6437        }
6438        else if (name.equals("map")) {
6439          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mapping.map");
6440        }
6441        else if (name.equals("comment")) {
6442          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mapping.comment");
6443        }
6444        else
6445          return super.addChild(name);
6446      }
6447
6448      public ElementDefinitionMappingComponent copy() {
6449        ElementDefinitionMappingComponent dst = new ElementDefinitionMappingComponent();
6450        copyValues(dst);
6451        return dst;
6452      }
6453
6454      public void copyValues(ElementDefinitionMappingComponent dst) {
6455        super.copyValues(dst);
6456        dst.identity = identity == null ? null : identity.copy();
6457        dst.language = language == null ? null : language.copy();
6458        dst.map = map == null ? null : map.copy();
6459        dst.comment = comment == null ? null : comment.copy();
6460      }
6461
6462      @Override
6463      public boolean equalsDeep(Base other_) {
6464        if (!super.equalsDeep(other_))
6465          return false;
6466        if (!(other_ instanceof ElementDefinitionMappingComponent))
6467          return false;
6468        ElementDefinitionMappingComponent o = (ElementDefinitionMappingComponent) other_;
6469        return compareDeep(identity, o.identity, true) && compareDeep(language, o.language, true) && compareDeep(map, o.map, true)
6470           && compareDeep(comment, o.comment, true);
6471      }
6472
6473      @Override
6474      public boolean equalsShallow(Base other_) {
6475        if (!super.equalsShallow(other_))
6476          return false;
6477        if (!(other_ instanceof ElementDefinitionMappingComponent))
6478          return false;
6479        ElementDefinitionMappingComponent o = (ElementDefinitionMappingComponent) other_;
6480        return compareValues(identity, o.identity, true) && compareValues(language, o.language, true) && compareValues(map, o.map, true)
6481           && compareValues(comment, o.comment, true);
6482      }
6483
6484      public boolean isEmpty() {
6485        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identity, language, map
6486          , comment);
6487      }
6488
6489  public String fhirType() {
6490    return "ElementDefinition.mapping";
6491
6492  }
6493
6494  }
6495
6496    /**
6497     * The path identifies the element and is expressed as a "."-separated list of ancestor elements, beginning with the name of the resource or extension.
6498     */
6499    @Child(name = "path", type = {StringType.class}, order=0, min=1, max=1, modifier=false, summary=true)
6500    @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." )
6501    protected StringType path;
6502
6503    /**
6504     * 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.
6505     */
6506    @Child(name = "representation", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6507    @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." )
6508    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/property-representation")
6509    protected List<Enumeration<PropertyRepresentation>> representation;
6510
6511    /**
6512     * 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.
6513     */
6514    @Child(name = "sliceName", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
6515    @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." )
6516    protected StringType sliceName;
6517
6518    /**
6519     * 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.
6520     */
6521    @Child(name = "sliceIsConstraining", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
6522    @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." )
6523    protected BooleanType sliceIsConstraining;
6524
6525    /**
6526     * 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.
6527     */
6528    @Child(name = "label", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
6529    @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." )
6530    protected StringType label;
6531
6532    /**
6533     * A code that has the same meaning as the element in a particular terminology.
6534     */
6535    @Child(name = "code", type = {Coding.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6536    @Description(shortDefinition="Corresponding codes in terminologies", formalDefinition="A code that has the same meaning as the element in a particular terminology." )
6537    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://loinc.org/vs")
6538    protected List<Coding> code;
6539
6540    /**
6541     * 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).
6542     */
6543    @Child(name = "slicing", type = {}, order=6, min=0, max=1, modifier=false, summary=true)
6544    @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)." )
6545    protected ElementDefinitionSlicingComponent slicing;
6546
6547    /**
6548     * A concise description of what this element means (e.g. for use in autogenerated summaries).
6549     */
6550    @Child(name = "short", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
6551    @Description(shortDefinition="Concise definition for space-constrained presentation", formalDefinition="A concise description of what this element means (e.g. for use in autogenerated summaries)." )
6552    protected StringType short_;
6553
6554    /**
6555     * 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).
6556     */
6557    @Child(name = "definition", type = {MarkdownType.class}, order=8, min=0, max=1, modifier=false, summary=true)
6558    @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)." )
6559    protected MarkdownType definition;
6560
6561    /**
6562     * 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).
6563     */
6564    @Child(name = "comment", type = {MarkdownType.class}, order=9, min=0, max=1, modifier=false, summary=true)
6565    @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)." )
6566    protected MarkdownType comment;
6567
6568    /**
6569     * 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.
6570     */
6571    @Child(name = "requirements", type = {MarkdownType.class}, order=10, min=0, max=1, modifier=false, summary=true)
6572    @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." )
6573    protected MarkdownType requirements;
6574
6575    /**
6576     * Identifies additional names by which this element might also be known.
6577     */
6578    @Child(name = "alias", type = {StringType.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6579    @Description(shortDefinition="Other names", formalDefinition="Identifies additional names by which this element might also be known." )
6580    protected List<StringType> alias;
6581
6582    /**
6583     * The minimum number of times this element SHALL appear in the instance.
6584     */
6585    @Child(name = "min", type = {UnsignedIntType.class}, order=12, min=0, max=1, modifier=false, summary=true)
6586    @Description(shortDefinition="Minimum Cardinality", formalDefinition="The minimum number of times this element SHALL appear in the instance." )
6587    protected UnsignedIntType min;
6588
6589    /**
6590     * The maximum number of times this element is permitted to appear in the instance.
6591     */
6592    @Child(name = "max", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=true)
6593    @Description(shortDefinition="Maximum Cardinality (a number or *)", formalDefinition="The maximum number of times this element is permitted to appear in the instance." )
6594    protected StringType max;
6595
6596    /**
6597     * 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 - i.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.
6598     */
6599    @Child(name = "base", type = {}, order=14, min=0, max=1, modifier=false, summary=true)
6600    @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 - i.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." )
6601    protected ElementDefinitionBaseComponent base;
6602
6603    /**
6604     * 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.
6605     */
6606    @Child(name = "contentReference", type = {UriType.class}, order=15, min=0, max=1, modifier=false, summary=true)
6607    @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." )
6608    protected UriType contentReference;
6609
6610    /**
6611     * The data type or resource that the value of this element is permitted to be.
6612     */
6613    @Child(name = "type", type = {}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6614    @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." )
6615    protected List<TypeRefComponent> type;
6616
6617    /**
6618     * 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').
6619     */
6620    @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)
6621    @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')." )
6622    protected DataType defaultValue;
6623
6624    /**
6625     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing').
6626     */
6627    @Child(name = "meaningWhenMissing", type = {MarkdownType.class}, order=18, min=0, max=1, modifier=false, summary=true)
6628    @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')." )
6629    protected MarkdownType meaningWhenMissing;
6630
6631    /**
6632     * 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.
6633     */
6634    @Child(name = "orderMeaning", type = {StringType.class}, order=19, min=0, max=1, modifier=false, summary=true)
6635    @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." )
6636    protected StringType orderMeaning;
6637
6638    /**
6639     * 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.
6640     */
6641    @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)
6642    @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." )
6643    protected DataType fixed;
6644
6645    /**
6646     * 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.  
6647
6648When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
6649
6650When 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.
6651
6652When 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.,
6653
66541. If primitive: it must match exactly the pattern value
66552. If a complex object: it must match (recursively) the pattern value
66563. If an array: it must match (recursively) the pattern value
6657
6658If 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.
6659     */
6660    @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)
6661    @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." )
6662    protected DataType pattern;
6663
6664    /**
6665     * A sample value for this element demonstrating the type of information that would typically be found in the element.
6666     */
6667    @Child(name = "example", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6668    @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." )
6669    protected List<ElementDefinitionExampleComponent> example;
6670
6671    /**
6672     * 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.
6673     */
6674    @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)
6675    @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." )
6676    protected DataType minValue;
6677
6678    /**
6679     * 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.
6680     */
6681    @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)
6682    @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." )
6683    protected DataType maxValue;
6684
6685    /**
6686     * 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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).
6687     */
6688    @Child(name = "maxLength", type = {IntegerType.class}, order=25, min=0, max=1, modifier=false, summary=true)
6689    @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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html))." )
6690    protected IntegerType maxLength;
6691
6692    /**
6693     * A reference to an invariant that may make additional statements about the cardinality or value in the instance.
6694     */
6695    @Child(name = "condition", type = {IdType.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6696    @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." )
6697    protected List<IdType> condition;
6698
6699    /**
6700     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.
6701     */
6702    @Child(name = "constraint", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6703    @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." )
6704    protected List<ElementDefinitionConstraintComponent> constraint;
6705
6706    /**
6707     * Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
6708     */
6709    @Child(name = "mustHaveValue", type = {BooleanType.class}, order=28, min=0, max=1, modifier=false, summary=true)
6710    @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." )
6711    protected BooleanType mustHaveValue;
6712
6713    /**
6714     * Specifies a list of extensions that can appear in place of a primitive value.
6715     */
6716    @Child(name = "valueAlternatives", type = {CanonicalType.class}, order=29, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6717    @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." )
6718    protected List<CanonicalType> valueAlternatives;
6719
6720    /**
6721     * 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.
6722     */
6723    @Child(name = "mustSupport", type = {BooleanType.class}, order=30, min=0, max=1, modifier=false, summary=true)
6724    @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." )
6725    protected BooleanType mustSupport;
6726
6727    /**
6728     * Documents obligations that apply to applications implementing this element. The obligations relate to application behaviour, not the content of the element itself in the resource instances that contain this element.
6729     */
6730    @Child(name = "obligation", type = {}, order=31, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6731    @Description(shortDefinition="Documents obligations for applications making use of this element", formalDefinition="Documents obligations that apply to applications implementing this element. The obligations relate to application behaviour, not the content of the element itself in the resource instances that contain this element." )
6732    protected List<ElementDefinitionObligationComponent> obligation;
6733
6734    /**
6735     * 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.
6736     */
6737    @Child(name = "isModifier", type = {BooleanType.class}, order=32, min=0, max=1, modifier=false, summary=true)
6738    @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." )
6739    protected BooleanType isModifier;
6740
6741    /**
6742     * Explains how that element affects the interpretation of the resource or element that contains it.
6743     */
6744    @Child(name = "isModifierReason", type = {StringType.class}, order=33, min=0, max=1, modifier=false, summary=true)
6745    @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." )
6746    protected StringType isModifierReason;
6747
6748    /**
6749     * Whether the element should be included if a client requests a search with the parameter _summary=true.
6750     */
6751    @Child(name = "isSummary", type = {BooleanType.class}, order=34, min=0, max=1, modifier=false, summary=true)
6752    @Description(shortDefinition="Include when _summary = true?", formalDefinition="Whether the element should be included if a client requests a search with the parameter _summary=true." )
6753    protected BooleanType isSummary;
6754
6755    /**
6756     * Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).
6757     */
6758    @Child(name = "binding", type = {}, order=35, min=0, max=1, modifier=false, summary=true)
6759    @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)." )
6760    protected ElementDefinitionBindingComponent binding;
6761
6762    /**
6763     * Identifies a concept from an external specification that roughly corresponds to this element.
6764     */
6765    @Child(name = "mapping", type = {}, order=36, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
6766    @Description(shortDefinition="Map element to another set of definitions", formalDefinition="Identifies a concept from an external specification that roughly corresponds to this element." )
6767    protected List<ElementDefinitionMappingComponent> mapping;
6768
6769    private static final long serialVersionUID = -732756088L;
6770
6771  /**
6772   * Constructor
6773   */
6774    public ElementDefinition() {
6775      super();
6776    }
6777
6778  /**
6779   * Constructor
6780   */
6781    public ElementDefinition(String path) {
6782      super();
6783      this.setPath(path);
6784    }
6785
6786    /**
6787     * @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
6788     */
6789    public StringType getPathElement() { 
6790      if (this.path == null)
6791        if (Configuration.errorOnAutoCreate())
6792          throw new Error("Attempt to auto-create ElementDefinition.path");
6793        else if (Configuration.doAutoCreate())
6794          this.path = new StringType(); // bb
6795      return this.path;
6796    }
6797
6798    public boolean hasPathElement() { 
6799      return this.path != null && !this.path.isEmpty();
6800    }
6801
6802    public boolean hasPath() { 
6803      return this.path != null && !this.path.isEmpty();
6804    }
6805
6806    /**
6807     * @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
6808     */
6809    public ElementDefinition setPathElement(StringType value) { 
6810      this.path = value;
6811      return this;
6812    }
6813
6814    /**
6815     * @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.
6816     */
6817    public String getPath() { 
6818      return this.path == null ? null : this.path.getValue();
6819    }
6820
6821    /**
6822     * @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.
6823     */
6824    public ElementDefinition setPath(String value) { 
6825        if (this.path == null)
6826          this.path = new StringType();
6827        this.path.setValue(value);
6828      return this;
6829    }
6830
6831    /**
6832     * @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.)
6833     */
6834    public List<Enumeration<PropertyRepresentation>> getRepresentation() { 
6835      if (this.representation == null)
6836        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6837      return this.representation;
6838    }
6839
6840    /**
6841     * @return Returns a reference to <code>this</code> for easy method chaining
6842     */
6843    public ElementDefinition setRepresentation(List<Enumeration<PropertyRepresentation>> theRepresentation) { 
6844      this.representation = theRepresentation;
6845      return this;
6846    }
6847
6848    public boolean hasRepresentation() { 
6849      if (this.representation == null)
6850        return false;
6851      for (Enumeration<PropertyRepresentation> item : this.representation)
6852        if (!item.isEmpty())
6853          return true;
6854      return false;
6855    }
6856
6857    /**
6858     * @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.)
6859     */
6860    public Enumeration<PropertyRepresentation> addRepresentationElement() {//2 
6861      Enumeration<PropertyRepresentation> t = new Enumeration<PropertyRepresentation>(new PropertyRepresentationEnumFactory());
6862      if (this.representation == null)
6863        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6864      this.representation.add(t);
6865      return t;
6866    }
6867
6868    /**
6869     * @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.)
6870     */
6871    public ElementDefinition addRepresentation(PropertyRepresentation value) { //1
6872      Enumeration<PropertyRepresentation> t = new Enumeration<PropertyRepresentation>(new PropertyRepresentationEnumFactory());
6873      t.setValue(value);
6874      if (this.representation == null)
6875        this.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
6876      this.representation.add(t);
6877      return this;
6878    }
6879
6880    /**
6881     * @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.)
6882     */
6883    public boolean hasRepresentation(PropertyRepresentation value) { 
6884      if (this.representation == null)
6885        return false;
6886      for (Enumeration<PropertyRepresentation> v : this.representation)
6887        if (v.getValue().equals(value)) // code
6888          return true;
6889      return false;
6890    }
6891
6892    /**
6893     * @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
6894     */
6895    public StringType getSliceNameElement() { 
6896      if (this.sliceName == null)
6897        if (Configuration.errorOnAutoCreate())
6898          throw new Error("Attempt to auto-create ElementDefinition.sliceName");
6899        else if (Configuration.doAutoCreate())
6900          this.sliceName = new StringType(); // bb
6901      return this.sliceName;
6902    }
6903
6904    public boolean hasSliceNameElement() { 
6905      return this.sliceName != null && !this.sliceName.isEmpty();
6906    }
6907
6908    public boolean hasSliceName() { 
6909      return this.sliceName != null && !this.sliceName.isEmpty();
6910    }
6911
6912    /**
6913     * @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
6914     */
6915    public ElementDefinition setSliceNameElement(StringType value) { 
6916      this.sliceName = value;
6917      return this;
6918    }
6919
6920    /**
6921     * @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.
6922     */
6923    public String getSliceName() { 
6924      return this.sliceName == null ? null : this.sliceName.getValue();
6925    }
6926
6927    /**
6928     * @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.
6929     */
6930    public ElementDefinition setSliceName(String value) { 
6931      if (Utilities.noString(value))
6932        this.sliceName = null;
6933      else {
6934        if (this.sliceName == null)
6935          this.sliceName = new StringType();
6936        this.sliceName.setValue(value);
6937      }
6938      return this;
6939    }
6940
6941    /**
6942     * @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
6943     */
6944    public BooleanType getSliceIsConstrainingElement() { 
6945      if (this.sliceIsConstraining == null)
6946        if (Configuration.errorOnAutoCreate())
6947          throw new Error("Attempt to auto-create ElementDefinition.sliceIsConstraining");
6948        else if (Configuration.doAutoCreate())
6949          this.sliceIsConstraining = new BooleanType(); // bb
6950      return this.sliceIsConstraining;
6951    }
6952
6953    public boolean hasSliceIsConstrainingElement() { 
6954      return this.sliceIsConstraining != null && !this.sliceIsConstraining.isEmpty();
6955    }
6956
6957    public boolean hasSliceIsConstraining() { 
6958      return this.sliceIsConstraining != null && !this.sliceIsConstraining.isEmpty();
6959    }
6960
6961    /**
6962     * @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
6963     */
6964    public ElementDefinition setSliceIsConstrainingElement(BooleanType value) { 
6965      this.sliceIsConstraining = value;
6966      return this;
6967    }
6968
6969    /**
6970     * @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.
6971     */
6972    public boolean getSliceIsConstraining() { 
6973      return this.sliceIsConstraining == null || this.sliceIsConstraining.isEmpty() ? false : this.sliceIsConstraining.getValue();
6974    }
6975
6976    /**
6977     * @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.
6978     */
6979    public ElementDefinition setSliceIsConstraining(boolean value) { 
6980        if (this.sliceIsConstraining == null)
6981          this.sliceIsConstraining = new BooleanType();
6982        this.sliceIsConstraining.setValue(value);
6983      return this;
6984    }
6985
6986    /**
6987     * @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
6988     */
6989    public StringType getLabelElement() { 
6990      if (this.label == null)
6991        if (Configuration.errorOnAutoCreate())
6992          throw new Error("Attempt to auto-create ElementDefinition.label");
6993        else if (Configuration.doAutoCreate())
6994          this.label = new StringType(); // bb
6995      return this.label;
6996    }
6997
6998    public boolean hasLabelElement() { 
6999      return this.label != null && !this.label.isEmpty();
7000    }
7001
7002    public boolean hasLabel() { 
7003      return this.label != null && !this.label.isEmpty();
7004    }
7005
7006    /**
7007     * @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
7008     */
7009    public ElementDefinition setLabelElement(StringType value) { 
7010      this.label = value;
7011      return this;
7012    }
7013
7014    /**
7015     * @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.
7016     */
7017    public String getLabel() { 
7018      return this.label == null ? null : this.label.getValue();
7019    }
7020
7021    /**
7022     * @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.
7023     */
7024    public ElementDefinition setLabel(String value) { 
7025      if (Utilities.noString(value))
7026        this.label = null;
7027      else {
7028        if (this.label == null)
7029          this.label = new StringType();
7030        this.label.setValue(value);
7031      }
7032      return this;
7033    }
7034
7035    /**
7036     * @return {@link #code} (A code that has the same meaning as the element in a particular terminology.)
7037     */
7038    public List<Coding> getCode() { 
7039      if (this.code == null)
7040        this.code = new ArrayList<Coding>();
7041      return this.code;
7042    }
7043
7044    /**
7045     * @return Returns a reference to <code>this</code> for easy method chaining
7046     */
7047    public ElementDefinition setCode(List<Coding> theCode) { 
7048      this.code = theCode;
7049      return this;
7050    }
7051
7052    public boolean hasCode() { 
7053      if (this.code == null)
7054        return false;
7055      for (Coding item : this.code)
7056        if (!item.isEmpty())
7057          return true;
7058      return false;
7059    }
7060
7061    public Coding addCode() { //3
7062      Coding t = new Coding();
7063      if (this.code == null)
7064        this.code = new ArrayList<Coding>();
7065      this.code.add(t);
7066      return t;
7067    }
7068
7069    public ElementDefinition addCode(Coding t) { //3
7070      if (t == null)
7071        return this;
7072      if (this.code == null)
7073        this.code = new ArrayList<Coding>();
7074      this.code.add(t);
7075      return this;
7076    }
7077
7078    /**
7079     * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
7080     */
7081    public Coding getCodeFirstRep() { 
7082      if (getCode().isEmpty()) {
7083        addCode();
7084      }
7085      return getCode().get(0);
7086    }
7087
7088    /**
7089     * @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).)
7090     */
7091    public ElementDefinitionSlicingComponent getSlicing() { 
7092      if (this.slicing == null)
7093        if (Configuration.errorOnAutoCreate())
7094          throw new Error("Attempt to auto-create ElementDefinition.slicing");
7095        else if (Configuration.doAutoCreate())
7096          this.slicing = new ElementDefinitionSlicingComponent(); // cc
7097      return this.slicing;
7098    }
7099
7100    public boolean hasSlicing() { 
7101      return this.slicing != null && !this.slicing.isEmpty();
7102    }
7103
7104    /**
7105     * @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).)
7106     */
7107    public ElementDefinition setSlicing(ElementDefinitionSlicingComponent value) { 
7108      this.slicing = value;
7109      return this;
7110    }
7111
7112    /**
7113     * @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
7114     */
7115    public StringType getShortElement() { 
7116      if (this.short_ == null)
7117        if (Configuration.errorOnAutoCreate())
7118          throw new Error("Attempt to auto-create ElementDefinition.short_");
7119        else if (Configuration.doAutoCreate())
7120          this.short_ = new StringType(); // bb
7121      return this.short_;
7122    }
7123
7124    public boolean hasShortElement() { 
7125      return this.short_ != null && !this.short_.isEmpty();
7126    }
7127
7128    public boolean hasShort() { 
7129      return this.short_ != null && !this.short_.isEmpty();
7130    }
7131
7132    /**
7133     * @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
7134     */
7135    public ElementDefinition setShortElement(StringType value) { 
7136      this.short_ = value;
7137      return this;
7138    }
7139
7140    /**
7141     * @return A concise description of what this element means (e.g. for use in autogenerated summaries).
7142     */
7143    public String getShort() { 
7144      return this.short_ == null ? null : this.short_.getValue();
7145    }
7146
7147    /**
7148     * @param value A concise description of what this element means (e.g. for use in autogenerated summaries).
7149     */
7150    public ElementDefinition setShort(String value) { 
7151      if (Utilities.noString(value))
7152        this.short_ = null;
7153      else {
7154        if (this.short_ == null)
7155          this.short_ = new StringType();
7156        this.short_.setValue(value);
7157      }
7158      return this;
7159    }
7160
7161    /**
7162     * @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
7163     */
7164    public MarkdownType getDefinitionElement() { 
7165      if (this.definition == null)
7166        if (Configuration.errorOnAutoCreate())
7167          throw new Error("Attempt to auto-create ElementDefinition.definition");
7168        else if (Configuration.doAutoCreate())
7169          this.definition = new MarkdownType(); // bb
7170      return this.definition;
7171    }
7172
7173    public boolean hasDefinitionElement() { 
7174      return this.definition != null && !this.definition.isEmpty();
7175    }
7176
7177    public boolean hasDefinition() { 
7178      return this.definition != null && !this.definition.isEmpty();
7179    }
7180
7181    /**
7182     * @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
7183     */
7184    public ElementDefinition setDefinitionElement(MarkdownType value) { 
7185      this.definition = value;
7186      return this;
7187    }
7188
7189    /**
7190     * @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).
7191     */
7192    public String getDefinition() { 
7193      return this.definition == null ? null : this.definition.getValue();
7194    }
7195
7196    /**
7197     * @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).
7198     */
7199    public ElementDefinition setDefinition(String value) { 
7200      if (value == null)
7201        this.definition = null;
7202      else {
7203        if (this.definition == null)
7204          this.definition = new MarkdownType();
7205        this.definition.setValue(value);
7206      }
7207      return this;
7208    }
7209
7210    /**
7211     * @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
7212     */
7213    public MarkdownType getCommentElement() { 
7214      if (this.comment == null)
7215        if (Configuration.errorOnAutoCreate())
7216          throw new Error("Attempt to auto-create ElementDefinition.comment");
7217        else if (Configuration.doAutoCreate())
7218          this.comment = new MarkdownType(); // bb
7219      return this.comment;
7220    }
7221
7222    public boolean hasCommentElement() { 
7223      return this.comment != null && !this.comment.isEmpty();
7224    }
7225
7226    public boolean hasComment() { 
7227      return this.comment != null && !this.comment.isEmpty();
7228    }
7229
7230    /**
7231     * @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
7232     */
7233    public ElementDefinition setCommentElement(MarkdownType value) { 
7234      this.comment = value;
7235      return this;
7236    }
7237
7238    /**
7239     * @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).
7240     */
7241    public String getComment() { 
7242      return this.comment == null ? null : this.comment.getValue();
7243    }
7244
7245    /**
7246     * @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).
7247     */
7248    public ElementDefinition setComment(String value) { 
7249      if (value == null)
7250        this.comment = null;
7251      else {
7252        if (this.comment == null)
7253          this.comment = new MarkdownType();
7254        this.comment.setValue(value);
7255      }
7256      return this;
7257    }
7258
7259    /**
7260     * @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
7261     */
7262    public MarkdownType getRequirementsElement() { 
7263      if (this.requirements == null)
7264        if (Configuration.errorOnAutoCreate())
7265          throw new Error("Attempt to auto-create ElementDefinition.requirements");
7266        else if (Configuration.doAutoCreate())
7267          this.requirements = new MarkdownType(); // bb
7268      return this.requirements;
7269    }
7270
7271    public boolean hasRequirementsElement() { 
7272      return this.requirements != null && !this.requirements.isEmpty();
7273    }
7274
7275    public boolean hasRequirements() { 
7276      return this.requirements != null && !this.requirements.isEmpty();
7277    }
7278
7279    /**
7280     * @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
7281     */
7282    public ElementDefinition setRequirementsElement(MarkdownType value) { 
7283      this.requirements = value;
7284      return this;
7285    }
7286
7287    /**
7288     * @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.
7289     */
7290    public String getRequirements() { 
7291      return this.requirements == null ? null : this.requirements.getValue();
7292    }
7293
7294    /**
7295     * @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.
7296     */
7297    public ElementDefinition setRequirements(String value) { 
7298      if (value == null)
7299        this.requirements = null;
7300      else {
7301        if (this.requirements == null)
7302          this.requirements = new MarkdownType();
7303        this.requirements.setValue(value);
7304      }
7305      return this;
7306    }
7307
7308    /**
7309     * @return {@link #alias} (Identifies additional names by which this element might also be known.)
7310     */
7311    public List<StringType> getAlias() { 
7312      if (this.alias == null)
7313        this.alias = new ArrayList<StringType>();
7314      return this.alias;
7315    }
7316
7317    /**
7318     * @return Returns a reference to <code>this</code> for easy method chaining
7319     */
7320    public ElementDefinition setAlias(List<StringType> theAlias) { 
7321      this.alias = theAlias;
7322      return this;
7323    }
7324
7325    public boolean hasAlias() { 
7326      if (this.alias == null)
7327        return false;
7328      for (StringType item : this.alias)
7329        if (!item.isEmpty())
7330          return true;
7331      return false;
7332    }
7333
7334    /**
7335     * @return {@link #alias} (Identifies additional names by which this element might also be known.)
7336     */
7337    public StringType addAliasElement() {//2 
7338      StringType t = new StringType();
7339      if (this.alias == null)
7340        this.alias = new ArrayList<StringType>();
7341      this.alias.add(t);
7342      return t;
7343    }
7344
7345    /**
7346     * @param value {@link #alias} (Identifies additional names by which this element might also be known.)
7347     */
7348    public ElementDefinition addAlias(String value) { //1
7349      StringType t = new StringType();
7350      t.setValue(value);
7351      if (this.alias == null)
7352        this.alias = new ArrayList<StringType>();
7353      this.alias.add(t);
7354      return this;
7355    }
7356
7357    /**
7358     * @param value {@link #alias} (Identifies additional names by which this element might also be known.)
7359     */
7360    public boolean hasAlias(String value) { 
7361      if (this.alias == null)
7362        return false;
7363      for (StringType v : this.alias)
7364        if (v.getValue().equals(value)) // string
7365          return true;
7366      return false;
7367    }
7368
7369    /**
7370     * @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
7371     */
7372    public UnsignedIntType getMinElement() { 
7373      if (this.min == null)
7374        if (Configuration.errorOnAutoCreate())
7375          throw new Error("Attempt to auto-create ElementDefinition.min");
7376        else if (Configuration.doAutoCreate())
7377          this.min = new UnsignedIntType(); // bb
7378      return this.min;
7379    }
7380
7381    public boolean hasMinElement() { 
7382      return this.min != null && !this.min.isEmpty();
7383    }
7384
7385    public boolean hasMin() { 
7386      return this.min != null && !this.min.isEmpty();
7387    }
7388
7389    /**
7390     * @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
7391     */
7392    public ElementDefinition setMinElement(UnsignedIntType value) { 
7393      this.min = value;
7394      return this;
7395    }
7396
7397    /**
7398     * @return The minimum number of times this element SHALL appear in the instance.
7399     */
7400    public int getMin() { 
7401      return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
7402    }
7403
7404    /**
7405     * @param value The minimum number of times this element SHALL appear in the instance.
7406     */
7407    public ElementDefinition setMin(int value) { 
7408        if (this.min == null)
7409          this.min = new UnsignedIntType();
7410        this.min.setValue(value);
7411      return this;
7412    }
7413
7414    /**
7415     * @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
7416     */
7417    public StringType getMaxElement() { 
7418      if (this.max == null)
7419        if (Configuration.errorOnAutoCreate())
7420          throw new Error("Attempt to auto-create ElementDefinition.max");
7421        else if (Configuration.doAutoCreate())
7422          this.max = new StringType(); // bb
7423      return this.max;
7424    }
7425
7426    public boolean hasMaxElement() { 
7427      return this.max != null && !this.max.isEmpty();
7428    }
7429
7430    public boolean hasMax() { 
7431      return this.max != null && !this.max.isEmpty();
7432    }
7433
7434    /**
7435     * @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
7436     */
7437    public ElementDefinition setMaxElement(StringType value) { 
7438      this.max = value;
7439      return this;
7440    }
7441
7442    /**
7443     * @return The maximum number of times this element is permitted to appear in the instance.
7444     */
7445    public String getMax() { 
7446      return this.max == null ? null : this.max.getValue();
7447    }
7448
7449    /**
7450     * @param value The maximum number of times this element is permitted to appear in the instance.
7451     */
7452    public ElementDefinition setMax(String value) { 
7453      if (Utilities.noString(value))
7454        this.max = null;
7455      else {
7456        if (this.max == null)
7457          this.max = new StringType();
7458        this.max.setValue(value);
7459      }
7460      return this;
7461    }
7462
7463    /**
7464     * @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 - i.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.)
7465     */
7466    public ElementDefinitionBaseComponent getBase() { 
7467      if (this.base == null)
7468        if (Configuration.errorOnAutoCreate())
7469          throw new Error("Attempt to auto-create ElementDefinition.base");
7470        else if (Configuration.doAutoCreate())
7471          this.base = new ElementDefinitionBaseComponent(); // cc
7472      return this.base;
7473    }
7474
7475    public boolean hasBase() { 
7476      return this.base != null && !this.base.isEmpty();
7477    }
7478
7479    /**
7480     * @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 - i.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.)
7481     */
7482    public ElementDefinition setBase(ElementDefinitionBaseComponent value) { 
7483      this.base = value;
7484      return this;
7485    }
7486
7487    /**
7488     * @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
7489     */
7490    public UriType getContentReferenceElement() { 
7491      if (this.contentReference == null)
7492        if (Configuration.errorOnAutoCreate())
7493          throw new Error("Attempt to auto-create ElementDefinition.contentReference");
7494        else if (Configuration.doAutoCreate())
7495          this.contentReference = new UriType(); // bb
7496      return this.contentReference;
7497    }
7498
7499    public boolean hasContentReferenceElement() { 
7500      return this.contentReference != null && !this.contentReference.isEmpty();
7501    }
7502
7503    public boolean hasContentReference() { 
7504      return this.contentReference != null && !this.contentReference.isEmpty();
7505    }
7506
7507    /**
7508     * @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
7509     */
7510    public ElementDefinition setContentReferenceElement(UriType value) { 
7511      this.contentReference = value;
7512      return this;
7513    }
7514
7515    /**
7516     * @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.
7517     */
7518    public String getContentReference() { 
7519      return this.contentReference == null ? null : this.contentReference.getValue();
7520    }
7521
7522    /**
7523     * @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.
7524     */
7525    public ElementDefinition setContentReference(String value) { 
7526      if (Utilities.noString(value))
7527        this.contentReference = null;
7528      else {
7529        if (this.contentReference == null)
7530          this.contentReference = new UriType();
7531        this.contentReference.setValue(value);
7532      }
7533      return this;
7534    }
7535
7536    /**
7537     * @return {@link #type} (The data type or resource that the value of this element is permitted to be.)
7538     */
7539    public List<TypeRefComponent> getType() { 
7540      if (this.type == null)
7541        this.type = new ArrayList<TypeRefComponent>();
7542      return this.type;
7543    }
7544
7545    /**
7546     * @return Returns a reference to <code>this</code> for easy method chaining
7547     */
7548    public ElementDefinition setType(List<TypeRefComponent> theType) { 
7549      this.type = theType;
7550      return this;
7551    }
7552
7553    public boolean hasType() { 
7554      if (this.type == null)
7555        return false;
7556      for (TypeRefComponent item : this.type)
7557        if (!item.isEmpty())
7558          return true;
7559      return false;
7560    }
7561
7562    public TypeRefComponent addType() { //3
7563      TypeRefComponent t = new TypeRefComponent();
7564      if (this.type == null)
7565        this.type = new ArrayList<TypeRefComponent>();
7566      this.type.add(t);
7567      return t;
7568    }
7569
7570    public ElementDefinition addType(TypeRefComponent t) { //3
7571      if (t == null)
7572        return this;
7573      if (this.type == null)
7574        this.type = new ArrayList<TypeRefComponent>();
7575      this.type.add(t);
7576      return this;
7577    }
7578
7579    /**
7580     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
7581     */
7582    public TypeRefComponent getTypeFirstRep() { 
7583      if (getType().isEmpty()) {
7584        addType();
7585      }
7586      return getType().get(0);
7587    }
7588
7589    /**
7590     * @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').)
7591     */
7592    public DataType getDefaultValue() { 
7593      return this.defaultValue;
7594    }
7595
7596    /**
7597     * @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').)
7598     */
7599    public Base64BinaryType getDefaultValueBase64BinaryType() throws FHIRException { 
7600      if (this.defaultValue == null)
7601        this.defaultValue = new Base64BinaryType();
7602      if (!(this.defaultValue instanceof Base64BinaryType))
7603        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7604      return (Base64BinaryType) this.defaultValue;
7605    }
7606
7607    public boolean hasDefaultValueBase64BinaryType() { 
7608      return this != null && this.defaultValue instanceof Base64BinaryType;
7609    }
7610
7611    /**
7612     * @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').)
7613     */
7614    public BooleanType getDefaultValueBooleanType() throws FHIRException { 
7615      if (this.defaultValue == null)
7616        this.defaultValue = new BooleanType();
7617      if (!(this.defaultValue instanceof BooleanType))
7618        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7619      return (BooleanType) this.defaultValue;
7620    }
7621
7622    public boolean hasDefaultValueBooleanType() { 
7623      return this != null && this.defaultValue instanceof BooleanType;
7624    }
7625
7626    /**
7627     * @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').)
7628     */
7629    public CanonicalType getDefaultValueCanonicalType() throws FHIRException { 
7630      if (this.defaultValue == null)
7631        this.defaultValue = new CanonicalType();
7632      if (!(this.defaultValue instanceof CanonicalType))
7633        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7634      return (CanonicalType) this.defaultValue;
7635    }
7636
7637    public boolean hasDefaultValueCanonicalType() { 
7638      return this != null && this.defaultValue instanceof CanonicalType;
7639    }
7640
7641    /**
7642     * @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').)
7643     */
7644    public CodeType getDefaultValueCodeType() throws FHIRException { 
7645      if (this.defaultValue == null)
7646        this.defaultValue = new CodeType();
7647      if (!(this.defaultValue instanceof CodeType))
7648        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7649      return (CodeType) this.defaultValue;
7650    }
7651
7652    public boolean hasDefaultValueCodeType() { 
7653      return this != null && this.defaultValue instanceof CodeType;
7654    }
7655
7656    /**
7657     * @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').)
7658     */
7659    public DateType getDefaultValueDateType() throws FHIRException { 
7660      if (this.defaultValue == null)
7661        this.defaultValue = new DateType();
7662      if (!(this.defaultValue instanceof DateType))
7663        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7664      return (DateType) this.defaultValue;
7665    }
7666
7667    public boolean hasDefaultValueDateType() { 
7668      return this != null && this.defaultValue instanceof DateType;
7669    }
7670
7671    /**
7672     * @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').)
7673     */
7674    public DateTimeType getDefaultValueDateTimeType() throws FHIRException { 
7675      if (this.defaultValue == null)
7676        this.defaultValue = new DateTimeType();
7677      if (!(this.defaultValue instanceof DateTimeType))
7678        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7679      return (DateTimeType) this.defaultValue;
7680    }
7681
7682    public boolean hasDefaultValueDateTimeType() { 
7683      return this != null && this.defaultValue instanceof DateTimeType;
7684    }
7685
7686    /**
7687     * @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').)
7688     */
7689    public DecimalType getDefaultValueDecimalType() throws FHIRException { 
7690      if (this.defaultValue == null)
7691        this.defaultValue = new DecimalType();
7692      if (!(this.defaultValue instanceof DecimalType))
7693        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7694      return (DecimalType) this.defaultValue;
7695    }
7696
7697    public boolean hasDefaultValueDecimalType() { 
7698      return this != null && this.defaultValue instanceof DecimalType;
7699    }
7700
7701    /**
7702     * @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').)
7703     */
7704    public IdType getDefaultValueIdType() throws FHIRException { 
7705      if (this.defaultValue == null)
7706        this.defaultValue = new IdType();
7707      if (!(this.defaultValue instanceof IdType))
7708        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7709      return (IdType) this.defaultValue;
7710    }
7711
7712    public boolean hasDefaultValueIdType() { 
7713      return this != null && this.defaultValue instanceof IdType;
7714    }
7715
7716    /**
7717     * @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').)
7718     */
7719    public InstantType getDefaultValueInstantType() throws FHIRException { 
7720      if (this.defaultValue == null)
7721        this.defaultValue = new InstantType();
7722      if (!(this.defaultValue instanceof InstantType))
7723        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7724      return (InstantType) this.defaultValue;
7725    }
7726
7727    public boolean hasDefaultValueInstantType() { 
7728      return this != null && this.defaultValue instanceof InstantType;
7729    }
7730
7731    /**
7732     * @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').)
7733     */
7734    public IntegerType getDefaultValueIntegerType() throws FHIRException { 
7735      if (this.defaultValue == null)
7736        this.defaultValue = new IntegerType();
7737      if (!(this.defaultValue instanceof IntegerType))
7738        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7739      return (IntegerType) this.defaultValue;
7740    }
7741
7742    public boolean hasDefaultValueIntegerType() { 
7743      return this != null && this.defaultValue instanceof IntegerType;
7744    }
7745
7746    /**
7747     * @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').)
7748     */
7749    public Integer64Type getDefaultValueInteger64Type() throws FHIRException { 
7750      if (this.defaultValue == null)
7751        this.defaultValue = new Integer64Type();
7752      if (!(this.defaultValue instanceof Integer64Type))
7753        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7754      return (Integer64Type) this.defaultValue;
7755    }
7756
7757    public boolean hasDefaultValueInteger64Type() { 
7758      return this != null && this.defaultValue instanceof Integer64Type;
7759    }
7760
7761    /**
7762     * @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').)
7763     */
7764    public MarkdownType getDefaultValueMarkdownType() throws FHIRException { 
7765      if (this.defaultValue == null)
7766        this.defaultValue = new MarkdownType();
7767      if (!(this.defaultValue instanceof MarkdownType))
7768        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7769      return (MarkdownType) this.defaultValue;
7770    }
7771
7772    public boolean hasDefaultValueMarkdownType() { 
7773      return this != null && this.defaultValue instanceof MarkdownType;
7774    }
7775
7776    /**
7777     * @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').)
7778     */
7779    public OidType getDefaultValueOidType() throws FHIRException { 
7780      if (this.defaultValue == null)
7781        this.defaultValue = new OidType();
7782      if (!(this.defaultValue instanceof OidType))
7783        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7784      return (OidType) this.defaultValue;
7785    }
7786
7787    public boolean hasDefaultValueOidType() { 
7788      return this != null && this.defaultValue instanceof OidType;
7789    }
7790
7791    /**
7792     * @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').)
7793     */
7794    public PositiveIntType getDefaultValuePositiveIntType() throws FHIRException { 
7795      if (this.defaultValue == null)
7796        this.defaultValue = new PositiveIntType();
7797      if (!(this.defaultValue instanceof PositiveIntType))
7798        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7799      return (PositiveIntType) this.defaultValue;
7800    }
7801
7802    public boolean hasDefaultValuePositiveIntType() { 
7803      return this != null && this.defaultValue instanceof PositiveIntType;
7804    }
7805
7806    /**
7807     * @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').)
7808     */
7809    public StringType getDefaultValueStringType() throws FHIRException { 
7810      if (this.defaultValue == null)
7811        this.defaultValue = new StringType();
7812      if (!(this.defaultValue instanceof StringType))
7813        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7814      return (StringType) this.defaultValue;
7815    }
7816
7817    public boolean hasDefaultValueStringType() { 
7818      return this != null && this.defaultValue instanceof StringType;
7819    }
7820
7821    /**
7822     * @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').)
7823     */
7824    public TimeType getDefaultValueTimeType() throws FHIRException { 
7825      if (this.defaultValue == null)
7826        this.defaultValue = new TimeType();
7827      if (!(this.defaultValue instanceof TimeType))
7828        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7829      return (TimeType) this.defaultValue;
7830    }
7831
7832    public boolean hasDefaultValueTimeType() { 
7833      return this != null && this.defaultValue instanceof TimeType;
7834    }
7835
7836    /**
7837     * @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').)
7838     */
7839    public UnsignedIntType getDefaultValueUnsignedIntType() throws FHIRException { 
7840      if (this.defaultValue == null)
7841        this.defaultValue = new UnsignedIntType();
7842      if (!(this.defaultValue instanceof UnsignedIntType))
7843        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7844      return (UnsignedIntType) this.defaultValue;
7845    }
7846
7847    public boolean hasDefaultValueUnsignedIntType() { 
7848      return this != null && this.defaultValue instanceof UnsignedIntType;
7849    }
7850
7851    /**
7852     * @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').)
7853     */
7854    public UriType getDefaultValueUriType() throws FHIRException { 
7855      if (this.defaultValue == null)
7856        this.defaultValue = new UriType();
7857      if (!(this.defaultValue instanceof UriType))
7858        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7859      return (UriType) this.defaultValue;
7860    }
7861
7862    public boolean hasDefaultValueUriType() { 
7863      return this != null && this.defaultValue instanceof UriType;
7864    }
7865
7866    /**
7867     * @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').)
7868     */
7869    public UrlType getDefaultValueUrlType() throws FHIRException { 
7870      if (this.defaultValue == null)
7871        this.defaultValue = new UrlType();
7872      if (!(this.defaultValue instanceof UrlType))
7873        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7874      return (UrlType) this.defaultValue;
7875    }
7876
7877    public boolean hasDefaultValueUrlType() { 
7878      return this != null && this.defaultValue instanceof UrlType;
7879    }
7880
7881    /**
7882     * @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').)
7883     */
7884    public UuidType getDefaultValueUuidType() throws FHIRException { 
7885      if (this.defaultValue == null)
7886        this.defaultValue = new UuidType();
7887      if (!(this.defaultValue instanceof UuidType))
7888        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7889      return (UuidType) this.defaultValue;
7890    }
7891
7892    public boolean hasDefaultValueUuidType() { 
7893      return this != null && this.defaultValue instanceof UuidType;
7894    }
7895
7896    /**
7897     * @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').)
7898     */
7899    public Address getDefaultValueAddress() throws FHIRException { 
7900      if (this.defaultValue == null)
7901        this.defaultValue = new Address();
7902      if (!(this.defaultValue instanceof Address))
7903        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7904      return (Address) this.defaultValue;
7905    }
7906
7907    public boolean hasDefaultValueAddress() { 
7908      return this != null && this.defaultValue instanceof Address;
7909    }
7910
7911    /**
7912     * @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').)
7913     */
7914    public Age getDefaultValueAge() throws FHIRException { 
7915      if (this.defaultValue == null)
7916        this.defaultValue = new Age();
7917      if (!(this.defaultValue instanceof Age))
7918        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7919      return (Age) this.defaultValue;
7920    }
7921
7922    public boolean hasDefaultValueAge() { 
7923      return this != null && this.defaultValue instanceof Age;
7924    }
7925
7926    /**
7927     * @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').)
7928     */
7929    public Annotation getDefaultValueAnnotation() throws FHIRException { 
7930      if (this.defaultValue == null)
7931        this.defaultValue = new Annotation();
7932      if (!(this.defaultValue instanceof Annotation))
7933        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7934      return (Annotation) this.defaultValue;
7935    }
7936
7937    public boolean hasDefaultValueAnnotation() { 
7938      return this != null && this.defaultValue instanceof Annotation;
7939    }
7940
7941    /**
7942     * @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').)
7943     */
7944    public Attachment getDefaultValueAttachment() throws FHIRException { 
7945      if (this.defaultValue == null)
7946        this.defaultValue = new Attachment();
7947      if (!(this.defaultValue instanceof Attachment))
7948        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7949      return (Attachment) this.defaultValue;
7950    }
7951
7952    public boolean hasDefaultValueAttachment() { 
7953      return this != null && this.defaultValue instanceof Attachment;
7954    }
7955
7956    /**
7957     * @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').)
7958     */
7959    public CodeableConcept getDefaultValueCodeableConcept() throws FHIRException { 
7960      if (this.defaultValue == null)
7961        this.defaultValue = new CodeableConcept();
7962      if (!(this.defaultValue instanceof CodeableConcept))
7963        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7964      return (CodeableConcept) this.defaultValue;
7965    }
7966
7967    public boolean hasDefaultValueCodeableConcept() { 
7968      return this != null && this.defaultValue instanceof CodeableConcept;
7969    }
7970
7971    /**
7972     * @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').)
7973     */
7974    public CodeableReference getDefaultValueCodeableReference() throws FHIRException { 
7975      if (this.defaultValue == null)
7976        this.defaultValue = new CodeableReference();
7977      if (!(this.defaultValue instanceof CodeableReference))
7978        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7979      return (CodeableReference) this.defaultValue;
7980    }
7981
7982    public boolean hasDefaultValueCodeableReference() { 
7983      return this != null && this.defaultValue instanceof CodeableReference;
7984    }
7985
7986    /**
7987     * @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').)
7988     */
7989    public Coding getDefaultValueCoding() throws FHIRException { 
7990      if (this.defaultValue == null)
7991        this.defaultValue = new Coding();
7992      if (!(this.defaultValue instanceof Coding))
7993        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
7994      return (Coding) this.defaultValue;
7995    }
7996
7997    public boolean hasDefaultValueCoding() { 
7998      return this != null && this.defaultValue instanceof Coding;
7999    }
8000
8001    /**
8002     * @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').)
8003     */
8004    public ContactPoint getDefaultValueContactPoint() throws FHIRException { 
8005      if (this.defaultValue == null)
8006        this.defaultValue = new ContactPoint();
8007      if (!(this.defaultValue instanceof ContactPoint))
8008        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8009      return (ContactPoint) this.defaultValue;
8010    }
8011
8012    public boolean hasDefaultValueContactPoint() { 
8013      return this != null && this.defaultValue instanceof ContactPoint;
8014    }
8015
8016    /**
8017     * @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').)
8018     */
8019    public Count getDefaultValueCount() throws FHIRException { 
8020      if (this.defaultValue == null)
8021        this.defaultValue = new Count();
8022      if (!(this.defaultValue instanceof Count))
8023        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8024      return (Count) this.defaultValue;
8025    }
8026
8027    public boolean hasDefaultValueCount() { 
8028      return this != null && this.defaultValue instanceof Count;
8029    }
8030
8031    /**
8032     * @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').)
8033     */
8034    public Distance getDefaultValueDistance() throws FHIRException { 
8035      if (this.defaultValue == null)
8036        this.defaultValue = new Distance();
8037      if (!(this.defaultValue instanceof Distance))
8038        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8039      return (Distance) this.defaultValue;
8040    }
8041
8042    public boolean hasDefaultValueDistance() { 
8043      return this != null && this.defaultValue instanceof Distance;
8044    }
8045
8046    /**
8047     * @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').)
8048     */
8049    public Duration getDefaultValueDuration() throws FHIRException { 
8050      if (this.defaultValue == null)
8051        this.defaultValue = new Duration();
8052      if (!(this.defaultValue instanceof Duration))
8053        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8054      return (Duration) this.defaultValue;
8055    }
8056
8057    public boolean hasDefaultValueDuration() { 
8058      return this != null && this.defaultValue instanceof Duration;
8059    }
8060
8061    /**
8062     * @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').)
8063     */
8064    public HumanName getDefaultValueHumanName() throws FHIRException { 
8065      if (this.defaultValue == null)
8066        this.defaultValue = new HumanName();
8067      if (!(this.defaultValue instanceof HumanName))
8068        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8069      return (HumanName) this.defaultValue;
8070    }
8071
8072    public boolean hasDefaultValueHumanName() { 
8073      return this != null && this.defaultValue instanceof HumanName;
8074    }
8075
8076    /**
8077     * @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').)
8078     */
8079    public Identifier getDefaultValueIdentifier() throws FHIRException { 
8080      if (this.defaultValue == null)
8081        this.defaultValue = new Identifier();
8082      if (!(this.defaultValue instanceof Identifier))
8083        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8084      return (Identifier) this.defaultValue;
8085    }
8086
8087    public boolean hasDefaultValueIdentifier() { 
8088      return this != null && this.defaultValue instanceof Identifier;
8089    }
8090
8091    /**
8092     * @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').)
8093     */
8094    public Money getDefaultValueMoney() throws FHIRException { 
8095      if (this.defaultValue == null)
8096        this.defaultValue = new Money();
8097      if (!(this.defaultValue instanceof Money))
8098        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8099      return (Money) this.defaultValue;
8100    }
8101
8102    public boolean hasDefaultValueMoney() { 
8103      return this != null && this.defaultValue instanceof Money;
8104    }
8105
8106    /**
8107     * @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').)
8108     */
8109    public Period getDefaultValuePeriod() throws FHIRException { 
8110      if (this.defaultValue == null)
8111        this.defaultValue = new Period();
8112      if (!(this.defaultValue instanceof Period))
8113        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8114      return (Period) this.defaultValue;
8115    }
8116
8117    public boolean hasDefaultValuePeriod() { 
8118      return this != null && this.defaultValue instanceof Period;
8119    }
8120
8121    /**
8122     * @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').)
8123     */
8124    public Quantity getDefaultValueQuantity() throws FHIRException { 
8125      if (this.defaultValue == null)
8126        this.defaultValue = new Quantity();
8127      if (!(this.defaultValue instanceof Quantity))
8128        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8129      return (Quantity) this.defaultValue;
8130    }
8131
8132    public boolean hasDefaultValueQuantity() { 
8133      return this != null && this.defaultValue instanceof Quantity;
8134    }
8135
8136    /**
8137     * @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').)
8138     */
8139    public Range getDefaultValueRange() throws FHIRException { 
8140      if (this.defaultValue == null)
8141        this.defaultValue = new Range();
8142      if (!(this.defaultValue instanceof Range))
8143        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8144      return (Range) this.defaultValue;
8145    }
8146
8147    public boolean hasDefaultValueRange() { 
8148      return this != null && this.defaultValue instanceof Range;
8149    }
8150
8151    /**
8152     * @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').)
8153     */
8154    public Ratio getDefaultValueRatio() throws FHIRException { 
8155      if (this.defaultValue == null)
8156        this.defaultValue = new Ratio();
8157      if (!(this.defaultValue instanceof Ratio))
8158        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8159      return (Ratio) this.defaultValue;
8160    }
8161
8162    public boolean hasDefaultValueRatio() { 
8163      return this != null && this.defaultValue instanceof Ratio;
8164    }
8165
8166    /**
8167     * @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').)
8168     */
8169    public RatioRange getDefaultValueRatioRange() throws FHIRException { 
8170      if (this.defaultValue == null)
8171        this.defaultValue = new RatioRange();
8172      if (!(this.defaultValue instanceof RatioRange))
8173        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8174      return (RatioRange) this.defaultValue;
8175    }
8176
8177    public boolean hasDefaultValueRatioRange() { 
8178      return this != null && this.defaultValue instanceof RatioRange;
8179    }
8180
8181    /**
8182     * @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').)
8183     */
8184    public Reference getDefaultValueReference() throws FHIRException { 
8185      if (this.defaultValue == null)
8186        this.defaultValue = new Reference();
8187      if (!(this.defaultValue instanceof Reference))
8188        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8189      return (Reference) this.defaultValue;
8190    }
8191
8192    public boolean hasDefaultValueReference() { 
8193      return this != null && this.defaultValue instanceof Reference;
8194    }
8195
8196    /**
8197     * @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').)
8198     */
8199    public SampledData getDefaultValueSampledData() throws FHIRException { 
8200      if (this.defaultValue == null)
8201        this.defaultValue = new SampledData();
8202      if (!(this.defaultValue instanceof SampledData))
8203        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8204      return (SampledData) this.defaultValue;
8205    }
8206
8207    public boolean hasDefaultValueSampledData() { 
8208      return this != null && this.defaultValue instanceof SampledData;
8209    }
8210
8211    /**
8212     * @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').)
8213     */
8214    public Signature getDefaultValueSignature() throws FHIRException { 
8215      if (this.defaultValue == null)
8216        this.defaultValue = new Signature();
8217      if (!(this.defaultValue instanceof Signature))
8218        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8219      return (Signature) this.defaultValue;
8220    }
8221
8222    public boolean hasDefaultValueSignature() { 
8223      return this != null && this.defaultValue instanceof Signature;
8224    }
8225
8226    /**
8227     * @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').)
8228     */
8229    public Timing getDefaultValueTiming() throws FHIRException { 
8230      if (this.defaultValue == null)
8231        this.defaultValue = new Timing();
8232      if (!(this.defaultValue instanceof Timing))
8233        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8234      return (Timing) this.defaultValue;
8235    }
8236
8237    public boolean hasDefaultValueTiming() { 
8238      return this != null && this.defaultValue instanceof Timing;
8239    }
8240
8241    /**
8242     * @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').)
8243     */
8244    public ContactDetail getDefaultValueContactDetail() throws FHIRException { 
8245      if (this.defaultValue == null)
8246        this.defaultValue = new ContactDetail();
8247      if (!(this.defaultValue instanceof ContactDetail))
8248        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8249      return (ContactDetail) this.defaultValue;
8250    }
8251
8252    public boolean hasDefaultValueContactDetail() { 
8253      return this != null && this.defaultValue instanceof ContactDetail;
8254    }
8255
8256    /**
8257     * @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').)
8258     */
8259    public DataRequirement getDefaultValueDataRequirement() throws FHIRException { 
8260      if (this.defaultValue == null)
8261        this.defaultValue = new DataRequirement();
8262      if (!(this.defaultValue instanceof DataRequirement))
8263        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8264      return (DataRequirement) this.defaultValue;
8265    }
8266
8267    public boolean hasDefaultValueDataRequirement() { 
8268      return this != null && this.defaultValue instanceof DataRequirement;
8269    }
8270
8271    /**
8272     * @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').)
8273     */
8274    public Expression getDefaultValueExpression() throws FHIRException { 
8275      if (this.defaultValue == null)
8276        this.defaultValue = new Expression();
8277      if (!(this.defaultValue instanceof Expression))
8278        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8279      return (Expression) this.defaultValue;
8280    }
8281
8282    public boolean hasDefaultValueExpression() { 
8283      return this != null && this.defaultValue instanceof Expression;
8284    }
8285
8286    /**
8287     * @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').)
8288     */
8289    public ParameterDefinition getDefaultValueParameterDefinition() throws FHIRException { 
8290      if (this.defaultValue == null)
8291        this.defaultValue = new ParameterDefinition();
8292      if (!(this.defaultValue instanceof ParameterDefinition))
8293        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8294      return (ParameterDefinition) this.defaultValue;
8295    }
8296
8297    public boolean hasDefaultValueParameterDefinition() { 
8298      return this != null && this.defaultValue instanceof ParameterDefinition;
8299    }
8300
8301    /**
8302     * @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').)
8303     */
8304    public RelatedArtifact getDefaultValueRelatedArtifact() throws FHIRException { 
8305      if (this.defaultValue == null)
8306        this.defaultValue = new RelatedArtifact();
8307      if (!(this.defaultValue instanceof RelatedArtifact))
8308        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8309      return (RelatedArtifact) this.defaultValue;
8310    }
8311
8312    public boolean hasDefaultValueRelatedArtifact() { 
8313      return this != null && this.defaultValue instanceof RelatedArtifact;
8314    }
8315
8316    /**
8317     * @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').)
8318     */
8319    public TriggerDefinition getDefaultValueTriggerDefinition() throws FHIRException { 
8320      if (this.defaultValue == null)
8321        this.defaultValue = new TriggerDefinition();
8322      if (!(this.defaultValue instanceof TriggerDefinition))
8323        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8324      return (TriggerDefinition) this.defaultValue;
8325    }
8326
8327    public boolean hasDefaultValueTriggerDefinition() { 
8328      return this != null && this.defaultValue instanceof TriggerDefinition;
8329    }
8330
8331    /**
8332     * @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').)
8333     */
8334    public UsageContext getDefaultValueUsageContext() throws FHIRException { 
8335      if (this.defaultValue == null)
8336        this.defaultValue = new UsageContext();
8337      if (!(this.defaultValue instanceof UsageContext))
8338        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8339      return (UsageContext) this.defaultValue;
8340    }
8341
8342    public boolean hasDefaultValueUsageContext() { 
8343      return this != null && this.defaultValue instanceof UsageContext;
8344    }
8345
8346    /**
8347     * @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').)
8348     */
8349    public Availability getDefaultValueAvailability() throws FHIRException { 
8350      if (this.defaultValue == null)
8351        this.defaultValue = new Availability();
8352      if (!(this.defaultValue instanceof Availability))
8353        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8354      return (Availability) this.defaultValue;
8355    }
8356
8357    public boolean hasDefaultValueAvailability() { 
8358      return this != null && this.defaultValue instanceof Availability;
8359    }
8360
8361    /**
8362     * @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').)
8363     */
8364    public ExtendedContactDetail getDefaultValueExtendedContactDetail() throws FHIRException { 
8365      if (this.defaultValue == null)
8366        this.defaultValue = new ExtendedContactDetail();
8367      if (!(this.defaultValue instanceof ExtendedContactDetail))
8368        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8369      return (ExtendedContactDetail) this.defaultValue;
8370    }
8371
8372    public boolean hasDefaultValueExtendedContactDetail() { 
8373      return this != null && this.defaultValue instanceof ExtendedContactDetail;
8374    }
8375
8376    /**
8377     * @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').)
8378     */
8379    public Dosage getDefaultValueDosage() throws FHIRException { 
8380      if (this.defaultValue == null)
8381        this.defaultValue = new Dosage();
8382      if (!(this.defaultValue instanceof Dosage))
8383        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8384      return (Dosage) this.defaultValue;
8385    }
8386
8387    public boolean hasDefaultValueDosage() { 
8388      return this != null && this.defaultValue instanceof Dosage;
8389    }
8390
8391    /**
8392     * @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').)
8393     */
8394    public Meta getDefaultValueMeta() throws FHIRException { 
8395      if (this.defaultValue == null)
8396        this.defaultValue = new Meta();
8397      if (!(this.defaultValue instanceof Meta))
8398        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.defaultValue.getClass().getName()+" was encountered");
8399      return (Meta) this.defaultValue;
8400    }
8401
8402    public boolean hasDefaultValueMeta() { 
8403      return this != null && this.defaultValue instanceof Meta;
8404    }
8405
8406    public boolean hasDefaultValue() { 
8407      return this.defaultValue != null && !this.defaultValue.isEmpty();
8408    }
8409
8410    /**
8411     * @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').)
8412     */
8413    public ElementDefinition setDefaultValue(DataType value) { 
8414      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))
8415        throw new Error("Not the right type for ElementDefinition.defaultValue[x]: "+value.fhirType());
8416      this.defaultValue = value;
8417      return this;
8418    }
8419
8420    /**
8421     * @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
8422     */
8423    public MarkdownType getMeaningWhenMissingElement() { 
8424      if (this.meaningWhenMissing == null)
8425        if (Configuration.errorOnAutoCreate())
8426          throw new Error("Attempt to auto-create ElementDefinition.meaningWhenMissing");
8427        else if (Configuration.doAutoCreate())
8428          this.meaningWhenMissing = new MarkdownType(); // bb
8429      return this.meaningWhenMissing;
8430    }
8431
8432    public boolean hasMeaningWhenMissingElement() { 
8433      return this.meaningWhenMissing != null && !this.meaningWhenMissing.isEmpty();
8434    }
8435
8436    public boolean hasMeaningWhenMissing() { 
8437      return this.meaningWhenMissing != null && !this.meaningWhenMissing.isEmpty();
8438    }
8439
8440    /**
8441     * @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
8442     */
8443    public ElementDefinition setMeaningWhenMissingElement(MarkdownType value) { 
8444      this.meaningWhenMissing = value;
8445      return this;
8446    }
8447
8448    /**
8449     * @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').
8450     */
8451    public String getMeaningWhenMissing() { 
8452      return this.meaningWhenMissing == null ? null : this.meaningWhenMissing.getValue();
8453    }
8454
8455    /**
8456     * @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').
8457     */
8458    public ElementDefinition setMeaningWhenMissing(String value) { 
8459      if (value == null)
8460        this.meaningWhenMissing = null;
8461      else {
8462        if (this.meaningWhenMissing == null)
8463          this.meaningWhenMissing = new MarkdownType();
8464        this.meaningWhenMissing.setValue(value);
8465      }
8466      return this;
8467    }
8468
8469    /**
8470     * @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
8471     */
8472    public StringType getOrderMeaningElement() { 
8473      if (this.orderMeaning == null)
8474        if (Configuration.errorOnAutoCreate())
8475          throw new Error("Attempt to auto-create ElementDefinition.orderMeaning");
8476        else if (Configuration.doAutoCreate())
8477          this.orderMeaning = new StringType(); // bb
8478      return this.orderMeaning;
8479    }
8480
8481    public boolean hasOrderMeaningElement() { 
8482      return this.orderMeaning != null && !this.orderMeaning.isEmpty();
8483    }
8484
8485    public boolean hasOrderMeaning() { 
8486      return this.orderMeaning != null && !this.orderMeaning.isEmpty();
8487    }
8488
8489    /**
8490     * @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
8491     */
8492    public ElementDefinition setOrderMeaningElement(StringType value) { 
8493      this.orderMeaning = value;
8494      return this;
8495    }
8496
8497    /**
8498     * @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.
8499     */
8500    public String getOrderMeaning() { 
8501      return this.orderMeaning == null ? null : this.orderMeaning.getValue();
8502    }
8503
8504    /**
8505     * @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.
8506     */
8507    public ElementDefinition setOrderMeaning(String value) { 
8508      if (Utilities.noString(value))
8509        this.orderMeaning = null;
8510      else {
8511        if (this.orderMeaning == null)
8512          this.orderMeaning = new StringType();
8513        this.orderMeaning.setValue(value);
8514      }
8515      return this;
8516    }
8517
8518    /**
8519     * @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.)
8520     */
8521    public DataType getFixed() { 
8522      return this.fixed;
8523    }
8524
8525    /**
8526     * @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.)
8527     */
8528    public Base64BinaryType getFixedBase64BinaryType() throws FHIRException { 
8529      if (this.fixed == null)
8530        this.fixed = new Base64BinaryType();
8531      if (!(this.fixed instanceof Base64BinaryType))
8532        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8533      return (Base64BinaryType) this.fixed;
8534    }
8535
8536    public boolean hasFixedBase64BinaryType() { 
8537      return this != null && this.fixed instanceof Base64BinaryType;
8538    }
8539
8540    /**
8541     * @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.)
8542     */
8543    public BooleanType getFixedBooleanType() throws FHIRException { 
8544      if (this.fixed == null)
8545        this.fixed = new BooleanType();
8546      if (!(this.fixed instanceof BooleanType))
8547        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8548      return (BooleanType) this.fixed;
8549    }
8550
8551    public boolean hasFixedBooleanType() { 
8552      return this != null && this.fixed instanceof BooleanType;
8553    }
8554
8555    /**
8556     * @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.)
8557     */
8558    public CanonicalType getFixedCanonicalType() throws FHIRException { 
8559      if (this.fixed == null)
8560        this.fixed = new CanonicalType();
8561      if (!(this.fixed instanceof CanonicalType))
8562        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8563      return (CanonicalType) this.fixed;
8564    }
8565
8566    public boolean hasFixedCanonicalType() { 
8567      return this != null && this.fixed instanceof CanonicalType;
8568    }
8569
8570    /**
8571     * @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.)
8572     */
8573    public CodeType getFixedCodeType() throws FHIRException { 
8574      if (this.fixed == null)
8575        this.fixed = new CodeType();
8576      if (!(this.fixed instanceof CodeType))
8577        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8578      return (CodeType) this.fixed;
8579    }
8580
8581    public boolean hasFixedCodeType() { 
8582      return this != null && this.fixed instanceof CodeType;
8583    }
8584
8585    /**
8586     * @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.)
8587     */
8588    public DateType getFixedDateType() throws FHIRException { 
8589      if (this.fixed == null)
8590        this.fixed = new DateType();
8591      if (!(this.fixed instanceof DateType))
8592        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8593      return (DateType) this.fixed;
8594    }
8595
8596    public boolean hasFixedDateType() { 
8597      return this != null && this.fixed instanceof DateType;
8598    }
8599
8600    /**
8601     * @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.)
8602     */
8603    public DateTimeType getFixedDateTimeType() throws FHIRException { 
8604      if (this.fixed == null)
8605        this.fixed = new DateTimeType();
8606      if (!(this.fixed instanceof DateTimeType))
8607        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8608      return (DateTimeType) this.fixed;
8609    }
8610
8611    public boolean hasFixedDateTimeType() { 
8612      return this != null && this.fixed instanceof DateTimeType;
8613    }
8614
8615    /**
8616     * @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.)
8617     */
8618    public DecimalType getFixedDecimalType() throws FHIRException { 
8619      if (this.fixed == null)
8620        this.fixed = new DecimalType();
8621      if (!(this.fixed instanceof DecimalType))
8622        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8623      return (DecimalType) this.fixed;
8624    }
8625
8626    public boolean hasFixedDecimalType() { 
8627      return this != null && this.fixed instanceof DecimalType;
8628    }
8629
8630    /**
8631     * @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.)
8632     */
8633    public IdType getFixedIdType() throws FHIRException { 
8634      if (this.fixed == null)
8635        this.fixed = new IdType();
8636      if (!(this.fixed instanceof IdType))
8637        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8638      return (IdType) this.fixed;
8639    }
8640
8641    public boolean hasFixedIdType() { 
8642      return this != null && this.fixed instanceof IdType;
8643    }
8644
8645    /**
8646     * @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.)
8647     */
8648    public InstantType getFixedInstantType() throws FHIRException { 
8649      if (this.fixed == null)
8650        this.fixed = new InstantType();
8651      if (!(this.fixed instanceof InstantType))
8652        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8653      return (InstantType) this.fixed;
8654    }
8655
8656    public boolean hasFixedInstantType() { 
8657      return this != null && this.fixed instanceof InstantType;
8658    }
8659
8660    /**
8661     * @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.)
8662     */
8663    public IntegerType getFixedIntegerType() throws FHIRException { 
8664      if (this.fixed == null)
8665        this.fixed = new IntegerType();
8666      if (!(this.fixed instanceof IntegerType))
8667        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8668      return (IntegerType) this.fixed;
8669    }
8670
8671    public boolean hasFixedIntegerType() { 
8672      return this != null && this.fixed instanceof IntegerType;
8673    }
8674
8675    /**
8676     * @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.)
8677     */
8678    public Integer64Type getFixedInteger64Type() throws FHIRException { 
8679      if (this.fixed == null)
8680        this.fixed = new Integer64Type();
8681      if (!(this.fixed instanceof Integer64Type))
8682        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.fixed.getClass().getName()+" was encountered");
8683      return (Integer64Type) this.fixed;
8684    }
8685
8686    public boolean hasFixedInteger64Type() { 
8687      return this != null && this.fixed instanceof Integer64Type;
8688    }
8689
8690    /**
8691     * @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.)
8692     */
8693    public MarkdownType getFixedMarkdownType() throws FHIRException { 
8694      if (this.fixed == null)
8695        this.fixed = new MarkdownType();
8696      if (!(this.fixed instanceof MarkdownType))
8697        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8698      return (MarkdownType) this.fixed;
8699    }
8700
8701    public boolean hasFixedMarkdownType() { 
8702      return this != null && this.fixed instanceof MarkdownType;
8703    }
8704
8705    /**
8706     * @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.)
8707     */
8708    public OidType getFixedOidType() throws FHIRException { 
8709      if (this.fixed == null)
8710        this.fixed = new OidType();
8711      if (!(this.fixed instanceof OidType))
8712        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8713      return (OidType) this.fixed;
8714    }
8715
8716    public boolean hasFixedOidType() { 
8717      return this != null && this.fixed instanceof OidType;
8718    }
8719
8720    /**
8721     * @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.)
8722     */
8723    public PositiveIntType getFixedPositiveIntType() throws FHIRException { 
8724      if (this.fixed == null)
8725        this.fixed = new PositiveIntType();
8726      if (!(this.fixed instanceof PositiveIntType))
8727        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8728      return (PositiveIntType) this.fixed;
8729    }
8730
8731    public boolean hasFixedPositiveIntType() { 
8732      return this != null && this.fixed instanceof PositiveIntType;
8733    }
8734
8735    /**
8736     * @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.)
8737     */
8738    public StringType getFixedStringType() throws FHIRException { 
8739      if (this.fixed == null)
8740        this.fixed = new StringType();
8741      if (!(this.fixed instanceof StringType))
8742        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8743      return (StringType) this.fixed;
8744    }
8745
8746    public boolean hasFixedStringType() { 
8747      return this != null && this.fixed instanceof StringType;
8748    }
8749
8750    /**
8751     * @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.)
8752     */
8753    public TimeType getFixedTimeType() throws FHIRException { 
8754      if (this.fixed == null)
8755        this.fixed = new TimeType();
8756      if (!(this.fixed instanceof TimeType))
8757        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8758      return (TimeType) this.fixed;
8759    }
8760
8761    public boolean hasFixedTimeType() { 
8762      return this != null && this.fixed instanceof TimeType;
8763    }
8764
8765    /**
8766     * @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.)
8767     */
8768    public UnsignedIntType getFixedUnsignedIntType() throws FHIRException { 
8769      if (this.fixed == null)
8770        this.fixed = new UnsignedIntType();
8771      if (!(this.fixed instanceof UnsignedIntType))
8772        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8773      return (UnsignedIntType) this.fixed;
8774    }
8775
8776    public boolean hasFixedUnsignedIntType() { 
8777      return this != null && this.fixed instanceof UnsignedIntType;
8778    }
8779
8780    /**
8781     * @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.)
8782     */
8783    public UriType getFixedUriType() throws FHIRException { 
8784      if (this.fixed == null)
8785        this.fixed = new UriType();
8786      if (!(this.fixed instanceof UriType))
8787        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8788      return (UriType) this.fixed;
8789    }
8790
8791    public boolean hasFixedUriType() { 
8792      return this != null && this.fixed instanceof UriType;
8793    }
8794
8795    /**
8796     * @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.)
8797     */
8798    public UrlType getFixedUrlType() throws FHIRException { 
8799      if (this.fixed == null)
8800        this.fixed = new UrlType();
8801      if (!(this.fixed instanceof UrlType))
8802        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8803      return (UrlType) this.fixed;
8804    }
8805
8806    public boolean hasFixedUrlType() { 
8807      return this != null && this.fixed instanceof UrlType;
8808    }
8809
8810    /**
8811     * @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.)
8812     */
8813    public UuidType getFixedUuidType() throws FHIRException { 
8814      if (this.fixed == null)
8815        this.fixed = new UuidType();
8816      if (!(this.fixed instanceof UuidType))
8817        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.fixed.getClass().getName()+" was encountered");
8818      return (UuidType) this.fixed;
8819    }
8820
8821    public boolean hasFixedUuidType() { 
8822      return this != null && this.fixed instanceof UuidType;
8823    }
8824
8825    /**
8826     * @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.)
8827     */
8828    public Address getFixedAddress() throws FHIRException { 
8829      if (this.fixed == null)
8830        this.fixed = new Address();
8831      if (!(this.fixed instanceof Address))
8832        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.fixed.getClass().getName()+" was encountered");
8833      return (Address) this.fixed;
8834    }
8835
8836    public boolean hasFixedAddress() { 
8837      return this != null && this.fixed instanceof Address;
8838    }
8839
8840    /**
8841     * @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.)
8842     */
8843    public Age getFixedAge() throws FHIRException { 
8844      if (this.fixed == null)
8845        this.fixed = new Age();
8846      if (!(this.fixed instanceof Age))
8847        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.fixed.getClass().getName()+" was encountered");
8848      return (Age) this.fixed;
8849    }
8850
8851    public boolean hasFixedAge() { 
8852      return this != null && this.fixed instanceof Age;
8853    }
8854
8855    /**
8856     * @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.)
8857     */
8858    public Annotation getFixedAnnotation() throws FHIRException { 
8859      if (this.fixed == null)
8860        this.fixed = new Annotation();
8861      if (!(this.fixed instanceof Annotation))
8862        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.fixed.getClass().getName()+" was encountered");
8863      return (Annotation) this.fixed;
8864    }
8865
8866    public boolean hasFixedAnnotation() { 
8867      return this != null && this.fixed instanceof Annotation;
8868    }
8869
8870    /**
8871     * @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.)
8872     */
8873    public Attachment getFixedAttachment() throws FHIRException { 
8874      if (this.fixed == null)
8875        this.fixed = new Attachment();
8876      if (!(this.fixed instanceof Attachment))
8877        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.fixed.getClass().getName()+" was encountered");
8878      return (Attachment) this.fixed;
8879    }
8880
8881    public boolean hasFixedAttachment() { 
8882      return this != null && this.fixed instanceof Attachment;
8883    }
8884
8885    /**
8886     * @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.)
8887     */
8888    public CodeableConcept getFixedCodeableConcept() throws FHIRException { 
8889      if (this.fixed == null)
8890        this.fixed = new CodeableConcept();
8891      if (!(this.fixed instanceof CodeableConcept))
8892        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.fixed.getClass().getName()+" was encountered");
8893      return (CodeableConcept) this.fixed;
8894    }
8895
8896    public boolean hasFixedCodeableConcept() { 
8897      return this != null && this.fixed instanceof CodeableConcept;
8898    }
8899
8900    /**
8901     * @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.)
8902     */
8903    public CodeableReference getFixedCodeableReference() throws FHIRException { 
8904      if (this.fixed == null)
8905        this.fixed = new CodeableReference();
8906      if (!(this.fixed instanceof CodeableReference))
8907        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.fixed.getClass().getName()+" was encountered");
8908      return (CodeableReference) this.fixed;
8909    }
8910
8911    public boolean hasFixedCodeableReference() { 
8912      return this != null && this.fixed instanceof CodeableReference;
8913    }
8914
8915    /**
8916     * @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.)
8917     */
8918    public Coding getFixedCoding() throws FHIRException { 
8919      if (this.fixed == null)
8920        this.fixed = new Coding();
8921      if (!(this.fixed instanceof Coding))
8922        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.fixed.getClass().getName()+" was encountered");
8923      return (Coding) this.fixed;
8924    }
8925
8926    public boolean hasFixedCoding() { 
8927      return this != null && this.fixed instanceof Coding;
8928    }
8929
8930    /**
8931     * @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.)
8932     */
8933    public ContactPoint getFixedContactPoint() throws FHIRException { 
8934      if (this.fixed == null)
8935        this.fixed = new ContactPoint();
8936      if (!(this.fixed instanceof ContactPoint))
8937        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.fixed.getClass().getName()+" was encountered");
8938      return (ContactPoint) this.fixed;
8939    }
8940
8941    public boolean hasFixedContactPoint() { 
8942      return this != null && this.fixed instanceof ContactPoint;
8943    }
8944
8945    /**
8946     * @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.)
8947     */
8948    public Count getFixedCount() throws FHIRException { 
8949      if (this.fixed == null)
8950        this.fixed = new Count();
8951      if (!(this.fixed instanceof Count))
8952        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.fixed.getClass().getName()+" was encountered");
8953      return (Count) this.fixed;
8954    }
8955
8956    public boolean hasFixedCount() { 
8957      return this != null && this.fixed instanceof Count;
8958    }
8959
8960    /**
8961     * @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.)
8962     */
8963    public Distance getFixedDistance() throws FHIRException { 
8964      if (this.fixed == null)
8965        this.fixed = new Distance();
8966      if (!(this.fixed instanceof Distance))
8967        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.fixed.getClass().getName()+" was encountered");
8968      return (Distance) this.fixed;
8969    }
8970
8971    public boolean hasFixedDistance() { 
8972      return this != null && this.fixed instanceof Distance;
8973    }
8974
8975    /**
8976     * @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.)
8977     */
8978    public Duration getFixedDuration() throws FHIRException { 
8979      if (this.fixed == null)
8980        this.fixed = new Duration();
8981      if (!(this.fixed instanceof Duration))
8982        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.fixed.getClass().getName()+" was encountered");
8983      return (Duration) this.fixed;
8984    }
8985
8986    public boolean hasFixedDuration() { 
8987      return this != null && this.fixed instanceof Duration;
8988    }
8989
8990    /**
8991     * @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.)
8992     */
8993    public HumanName getFixedHumanName() throws FHIRException { 
8994      if (this.fixed == null)
8995        this.fixed = new HumanName();
8996      if (!(this.fixed instanceof HumanName))
8997        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.fixed.getClass().getName()+" was encountered");
8998      return (HumanName) this.fixed;
8999    }
9000
9001    public boolean hasFixedHumanName() { 
9002      return this != null && this.fixed instanceof HumanName;
9003    }
9004
9005    /**
9006     * @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.)
9007     */
9008    public Identifier getFixedIdentifier() throws FHIRException { 
9009      if (this.fixed == null)
9010        this.fixed = new Identifier();
9011      if (!(this.fixed instanceof Identifier))
9012        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.fixed.getClass().getName()+" was encountered");
9013      return (Identifier) this.fixed;
9014    }
9015
9016    public boolean hasFixedIdentifier() { 
9017      return this != null && this.fixed instanceof Identifier;
9018    }
9019
9020    /**
9021     * @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.)
9022     */
9023    public Money getFixedMoney() throws FHIRException { 
9024      if (this.fixed == null)
9025        this.fixed = new Money();
9026      if (!(this.fixed instanceof Money))
9027        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.fixed.getClass().getName()+" was encountered");
9028      return (Money) this.fixed;
9029    }
9030
9031    public boolean hasFixedMoney() { 
9032      return this != null && this.fixed instanceof Money;
9033    }
9034
9035    /**
9036     * @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.)
9037     */
9038    public Period getFixedPeriod() throws FHIRException { 
9039      if (this.fixed == null)
9040        this.fixed = new Period();
9041      if (!(this.fixed instanceof Period))
9042        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.fixed.getClass().getName()+" was encountered");
9043      return (Period) this.fixed;
9044    }
9045
9046    public boolean hasFixedPeriod() { 
9047      return this != null && this.fixed instanceof Period;
9048    }
9049
9050    /**
9051     * @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.)
9052     */
9053    public Quantity getFixedQuantity() throws FHIRException { 
9054      if (this.fixed == null)
9055        this.fixed = new Quantity();
9056      if (!(this.fixed instanceof Quantity))
9057        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.fixed.getClass().getName()+" was encountered");
9058      return (Quantity) this.fixed;
9059    }
9060
9061    public boolean hasFixedQuantity() { 
9062      return this != null && this.fixed instanceof Quantity;
9063    }
9064
9065    /**
9066     * @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.)
9067     */
9068    public Range getFixedRange() throws FHIRException { 
9069      if (this.fixed == null)
9070        this.fixed = new Range();
9071      if (!(this.fixed instanceof Range))
9072        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.fixed.getClass().getName()+" was encountered");
9073      return (Range) this.fixed;
9074    }
9075
9076    public boolean hasFixedRange() { 
9077      return this != null && this.fixed instanceof Range;
9078    }
9079
9080    /**
9081     * @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.)
9082     */
9083    public Ratio getFixedRatio() throws FHIRException { 
9084      if (this.fixed == null)
9085        this.fixed = new Ratio();
9086      if (!(this.fixed instanceof Ratio))
9087        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.fixed.getClass().getName()+" was encountered");
9088      return (Ratio) this.fixed;
9089    }
9090
9091    public boolean hasFixedRatio() { 
9092      return this != null && this.fixed instanceof Ratio;
9093    }
9094
9095    /**
9096     * @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.)
9097     */
9098    public RatioRange getFixedRatioRange() throws FHIRException { 
9099      if (this.fixed == null)
9100        this.fixed = new RatioRange();
9101      if (!(this.fixed instanceof RatioRange))
9102        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.fixed.getClass().getName()+" was encountered");
9103      return (RatioRange) this.fixed;
9104    }
9105
9106    public boolean hasFixedRatioRange() { 
9107      return this != null && this.fixed instanceof RatioRange;
9108    }
9109
9110    /**
9111     * @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.)
9112     */
9113    public Reference getFixedReference() throws FHIRException { 
9114      if (this.fixed == null)
9115        this.fixed = new Reference();
9116      if (!(this.fixed instanceof Reference))
9117        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.fixed.getClass().getName()+" was encountered");
9118      return (Reference) this.fixed;
9119    }
9120
9121    public boolean hasFixedReference() { 
9122      return this != null && this.fixed instanceof Reference;
9123    }
9124
9125    /**
9126     * @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.)
9127     */
9128    public SampledData getFixedSampledData() throws FHIRException { 
9129      if (this.fixed == null)
9130        this.fixed = new SampledData();
9131      if (!(this.fixed instanceof SampledData))
9132        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.fixed.getClass().getName()+" was encountered");
9133      return (SampledData) this.fixed;
9134    }
9135
9136    public boolean hasFixedSampledData() { 
9137      return this != null && this.fixed instanceof SampledData;
9138    }
9139
9140    /**
9141     * @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.)
9142     */
9143    public Signature getFixedSignature() throws FHIRException { 
9144      if (this.fixed == null)
9145        this.fixed = new Signature();
9146      if (!(this.fixed instanceof Signature))
9147        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.fixed.getClass().getName()+" was encountered");
9148      return (Signature) this.fixed;
9149    }
9150
9151    public boolean hasFixedSignature() { 
9152      return this != null && this.fixed instanceof Signature;
9153    }
9154
9155    /**
9156     * @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.)
9157     */
9158    public Timing getFixedTiming() throws FHIRException { 
9159      if (this.fixed == null)
9160        this.fixed = new Timing();
9161      if (!(this.fixed instanceof Timing))
9162        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.fixed.getClass().getName()+" was encountered");
9163      return (Timing) this.fixed;
9164    }
9165
9166    public boolean hasFixedTiming() { 
9167      return this != null && this.fixed instanceof Timing;
9168    }
9169
9170    /**
9171     * @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.)
9172     */
9173    public ContactDetail getFixedContactDetail() throws FHIRException { 
9174      if (this.fixed == null)
9175        this.fixed = new ContactDetail();
9176      if (!(this.fixed instanceof ContactDetail))
9177        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.fixed.getClass().getName()+" was encountered");
9178      return (ContactDetail) this.fixed;
9179    }
9180
9181    public boolean hasFixedContactDetail() { 
9182      return this != null && this.fixed instanceof ContactDetail;
9183    }
9184
9185    /**
9186     * @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.)
9187     */
9188    public DataRequirement getFixedDataRequirement() throws FHIRException { 
9189      if (this.fixed == null)
9190        this.fixed = new DataRequirement();
9191      if (!(this.fixed instanceof DataRequirement))
9192        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.fixed.getClass().getName()+" was encountered");
9193      return (DataRequirement) this.fixed;
9194    }
9195
9196    public boolean hasFixedDataRequirement() { 
9197      return this != null && this.fixed instanceof DataRequirement;
9198    }
9199
9200    /**
9201     * @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.)
9202     */
9203    public Expression getFixedExpression() throws FHIRException { 
9204      if (this.fixed == null)
9205        this.fixed = new Expression();
9206      if (!(this.fixed instanceof Expression))
9207        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.fixed.getClass().getName()+" was encountered");
9208      return (Expression) this.fixed;
9209    }
9210
9211    public boolean hasFixedExpression() { 
9212      return this != null && this.fixed instanceof Expression;
9213    }
9214
9215    /**
9216     * @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.)
9217     */
9218    public ParameterDefinition getFixedParameterDefinition() throws FHIRException { 
9219      if (this.fixed == null)
9220        this.fixed = new ParameterDefinition();
9221      if (!(this.fixed instanceof ParameterDefinition))
9222        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.fixed.getClass().getName()+" was encountered");
9223      return (ParameterDefinition) this.fixed;
9224    }
9225
9226    public boolean hasFixedParameterDefinition() { 
9227      return this != null && this.fixed instanceof ParameterDefinition;
9228    }
9229
9230    /**
9231     * @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.)
9232     */
9233    public RelatedArtifact getFixedRelatedArtifact() throws FHIRException { 
9234      if (this.fixed == null)
9235        this.fixed = new RelatedArtifact();
9236      if (!(this.fixed instanceof RelatedArtifact))
9237        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.fixed.getClass().getName()+" was encountered");
9238      return (RelatedArtifact) this.fixed;
9239    }
9240
9241    public boolean hasFixedRelatedArtifact() { 
9242      return this != null && this.fixed instanceof RelatedArtifact;
9243    }
9244
9245    /**
9246     * @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.)
9247     */
9248    public TriggerDefinition getFixedTriggerDefinition() throws FHIRException { 
9249      if (this.fixed == null)
9250        this.fixed = new TriggerDefinition();
9251      if (!(this.fixed instanceof TriggerDefinition))
9252        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.fixed.getClass().getName()+" was encountered");
9253      return (TriggerDefinition) this.fixed;
9254    }
9255
9256    public boolean hasFixedTriggerDefinition() { 
9257      return this != null && this.fixed instanceof TriggerDefinition;
9258    }
9259
9260    /**
9261     * @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.)
9262     */
9263    public UsageContext getFixedUsageContext() throws FHIRException { 
9264      if (this.fixed == null)
9265        this.fixed = new UsageContext();
9266      if (!(this.fixed instanceof UsageContext))
9267        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.fixed.getClass().getName()+" was encountered");
9268      return (UsageContext) this.fixed;
9269    }
9270
9271    public boolean hasFixedUsageContext() { 
9272      return this != null && this.fixed instanceof UsageContext;
9273    }
9274
9275    /**
9276     * @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.)
9277     */
9278    public Availability getFixedAvailability() throws FHIRException { 
9279      if (this.fixed == null)
9280        this.fixed = new Availability();
9281      if (!(this.fixed instanceof Availability))
9282        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.fixed.getClass().getName()+" was encountered");
9283      return (Availability) this.fixed;
9284    }
9285
9286    public boolean hasFixedAvailability() { 
9287      return this != null && this.fixed instanceof Availability;
9288    }
9289
9290    /**
9291     * @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.)
9292     */
9293    public ExtendedContactDetail getFixedExtendedContactDetail() throws FHIRException { 
9294      if (this.fixed == null)
9295        this.fixed = new ExtendedContactDetail();
9296      if (!(this.fixed instanceof ExtendedContactDetail))
9297        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.fixed.getClass().getName()+" was encountered");
9298      return (ExtendedContactDetail) this.fixed;
9299    }
9300
9301    public boolean hasFixedExtendedContactDetail() { 
9302      return this != null && this.fixed instanceof ExtendedContactDetail;
9303    }
9304
9305    /**
9306     * @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.)
9307     */
9308    public Dosage getFixedDosage() throws FHIRException { 
9309      if (this.fixed == null)
9310        this.fixed = new Dosage();
9311      if (!(this.fixed instanceof Dosage))
9312        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.fixed.getClass().getName()+" was encountered");
9313      return (Dosage) this.fixed;
9314    }
9315
9316    public boolean hasFixedDosage() { 
9317      return this != null && this.fixed instanceof Dosage;
9318    }
9319
9320    /**
9321     * @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.)
9322     */
9323    public Meta getFixedMeta() throws FHIRException { 
9324      if (this.fixed == null)
9325        this.fixed = new Meta();
9326      if (!(this.fixed instanceof Meta))
9327        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.fixed.getClass().getName()+" was encountered");
9328      return (Meta) this.fixed;
9329    }
9330
9331    public boolean hasFixedMeta() { 
9332      return this != null && this.fixed instanceof Meta;
9333    }
9334
9335    public boolean hasFixed() { 
9336      return this.fixed != null && !this.fixed.isEmpty();
9337    }
9338
9339    /**
9340     * @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.)
9341     */
9342    public ElementDefinition setFixed(DataType value) { 
9343      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))
9344        throw new Error("Not the right type for ElementDefinition.fixed[x]: "+value.fhirType());
9345      this.fixed = value;
9346      return this;
9347    }
9348
9349    /**
9350     * @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.  
9351
9352When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9353
9354When 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.
9355
9356When 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.,
9357
93581. If primitive: it must match exactly the pattern value
93592. If a complex object: it must match (recursively) the pattern value
93603. If an array: it must match (recursively) the pattern value
9361
9362If 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.)
9363     */
9364    public DataType getPattern() { 
9365      return this.pattern;
9366    }
9367
9368    /**
9369     * @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.  
9370
9371When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9372
9373When 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.
9374
9375When 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.,
9376
93771. If primitive: it must match exactly the pattern value
93782. If a complex object: it must match (recursively) the pattern value
93793. If an array: it must match (recursively) the pattern value
9380
9381If 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.)
9382     */
9383    public Base64BinaryType getPatternBase64BinaryType() throws FHIRException { 
9384      if (this.pattern == null)
9385        this.pattern = new Base64BinaryType();
9386      if (!(this.pattern instanceof Base64BinaryType))
9387        throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9388      return (Base64BinaryType) this.pattern;
9389    }
9390
9391    public boolean hasPatternBase64BinaryType() { 
9392      return this != null && this.pattern instanceof Base64BinaryType;
9393    }
9394
9395    /**
9396     * @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.  
9397
9398When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9399
9400When 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.
9401
9402When 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.,
9403
94041. If primitive: it must match exactly the pattern value
94052. If a complex object: it must match (recursively) the pattern value
94063. If an array: it must match (recursively) the pattern value
9407
9408If 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.)
9409     */
9410    public BooleanType getPatternBooleanType() throws FHIRException { 
9411      if (this.pattern == null)
9412        this.pattern = new BooleanType();
9413      if (!(this.pattern instanceof BooleanType))
9414        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9415      return (BooleanType) this.pattern;
9416    }
9417
9418    public boolean hasPatternBooleanType() { 
9419      return this != null && this.pattern instanceof BooleanType;
9420    }
9421
9422    /**
9423     * @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.  
9424
9425When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9426
9427When 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.
9428
9429When 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.,
9430
94311. If primitive: it must match exactly the pattern value
94322. If a complex object: it must match (recursively) the pattern value
94333. If an array: it must match (recursively) the pattern value
9434
9435If 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.)
9436     */
9437    public CanonicalType getPatternCanonicalType() throws FHIRException { 
9438      if (this.pattern == null)
9439        this.pattern = new CanonicalType();
9440      if (!(this.pattern instanceof CanonicalType))
9441        throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9442      return (CanonicalType) this.pattern;
9443    }
9444
9445    public boolean hasPatternCanonicalType() { 
9446      return this != null && this.pattern instanceof CanonicalType;
9447    }
9448
9449    /**
9450     * @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.  
9451
9452When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9453
9454When 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.
9455
9456When 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.,
9457
94581. If primitive: it must match exactly the pattern value
94592. If a complex object: it must match (recursively) the pattern value
94603. If an array: it must match (recursively) the pattern value
9461
9462If 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.)
9463     */
9464    public CodeType getPatternCodeType() throws FHIRException { 
9465      if (this.pattern == null)
9466        this.pattern = new CodeType();
9467      if (!(this.pattern instanceof CodeType))
9468        throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9469      return (CodeType) this.pattern;
9470    }
9471
9472    public boolean hasPatternCodeType() { 
9473      return this != null && this.pattern instanceof CodeType;
9474    }
9475
9476    /**
9477     * @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.  
9478
9479When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9480
9481When 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.
9482
9483When 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.,
9484
94851. If primitive: it must match exactly the pattern value
94862. If a complex object: it must match (recursively) the pattern value
94873. If an array: it must match (recursively) the pattern value
9488
9489If 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.)
9490     */
9491    public DateType getPatternDateType() throws FHIRException { 
9492      if (this.pattern == null)
9493        this.pattern = new DateType();
9494      if (!(this.pattern instanceof DateType))
9495        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9496      return (DateType) this.pattern;
9497    }
9498
9499    public boolean hasPatternDateType() { 
9500      return this != null && this.pattern instanceof DateType;
9501    }
9502
9503    /**
9504     * @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.  
9505
9506When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9507
9508When 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.
9509
9510When 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.,
9511
95121. If primitive: it must match exactly the pattern value
95132. If a complex object: it must match (recursively) the pattern value
95143. If an array: it must match (recursively) the pattern value
9515
9516If 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.)
9517     */
9518    public DateTimeType getPatternDateTimeType() throws FHIRException { 
9519      if (this.pattern == null)
9520        this.pattern = new DateTimeType();
9521      if (!(this.pattern instanceof DateTimeType))
9522        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9523      return (DateTimeType) this.pattern;
9524    }
9525
9526    public boolean hasPatternDateTimeType() { 
9527      return this != null && this.pattern instanceof DateTimeType;
9528    }
9529
9530    /**
9531     * @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.  
9532
9533When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9534
9535When 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.
9536
9537When 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.,
9538
95391. If primitive: it must match exactly the pattern value
95402. If a complex object: it must match (recursively) the pattern value
95413. If an array: it must match (recursively) the pattern value
9542
9543If 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.)
9544     */
9545    public DecimalType getPatternDecimalType() throws FHIRException { 
9546      if (this.pattern == null)
9547        this.pattern = new DecimalType();
9548      if (!(this.pattern instanceof DecimalType))
9549        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9550      return (DecimalType) this.pattern;
9551    }
9552
9553    public boolean hasPatternDecimalType() { 
9554      return this != null && this.pattern instanceof DecimalType;
9555    }
9556
9557    /**
9558     * @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.  
9559
9560When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9561
9562When 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.
9563
9564When 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.,
9565
95661. If primitive: it must match exactly the pattern value
95672. If a complex object: it must match (recursively) the pattern value
95683. If an array: it must match (recursively) the pattern value
9569
9570If 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.)
9571     */
9572    public IdType getPatternIdType() throws FHIRException { 
9573      if (this.pattern == null)
9574        this.pattern = new IdType();
9575      if (!(this.pattern instanceof IdType))
9576        throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9577      return (IdType) this.pattern;
9578    }
9579
9580    public boolean hasPatternIdType() { 
9581      return this != null && this.pattern instanceof IdType;
9582    }
9583
9584    /**
9585     * @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.  
9586
9587When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9588
9589When 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.
9590
9591When 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.,
9592
95931. If primitive: it must match exactly the pattern value
95942. If a complex object: it must match (recursively) the pattern value
95953. If an array: it must match (recursively) the pattern value
9596
9597If 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.)
9598     */
9599    public InstantType getPatternInstantType() throws FHIRException { 
9600      if (this.pattern == null)
9601        this.pattern = new InstantType();
9602      if (!(this.pattern instanceof InstantType))
9603        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9604      return (InstantType) this.pattern;
9605    }
9606
9607    public boolean hasPatternInstantType() { 
9608      return this != null && this.pattern instanceof InstantType;
9609    }
9610
9611    /**
9612     * @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.  
9613
9614When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9615
9616When 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.
9617
9618When 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.,
9619
96201. If primitive: it must match exactly the pattern value
96212. If a complex object: it must match (recursively) the pattern value
96223. If an array: it must match (recursively) the pattern value
9623
9624If 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.)
9625     */
9626    public IntegerType getPatternIntegerType() throws FHIRException { 
9627      if (this.pattern == null)
9628        this.pattern = new IntegerType();
9629      if (!(this.pattern instanceof IntegerType))
9630        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9631      return (IntegerType) this.pattern;
9632    }
9633
9634    public boolean hasPatternIntegerType() { 
9635      return this != null && this.pattern instanceof IntegerType;
9636    }
9637
9638    /**
9639     * @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.  
9640
9641When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9642
9643When 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.
9644
9645When 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.,
9646
96471. If primitive: it must match exactly the pattern value
96482. If a complex object: it must match (recursively) the pattern value
96493. If an array: it must match (recursively) the pattern value
9650
9651If 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.)
9652     */
9653    public Integer64Type getPatternInteger64Type() throws FHIRException { 
9654      if (this.pattern == null)
9655        this.pattern = new Integer64Type();
9656      if (!(this.pattern instanceof Integer64Type))
9657        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.pattern.getClass().getName()+" was encountered");
9658      return (Integer64Type) this.pattern;
9659    }
9660
9661    public boolean hasPatternInteger64Type() { 
9662      return this != null && this.pattern instanceof Integer64Type;
9663    }
9664
9665    /**
9666     * @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.  
9667
9668When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9669
9670When 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.
9671
9672When 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.,
9673
96741. If primitive: it must match exactly the pattern value
96752. If a complex object: it must match (recursively) the pattern value
96763. If an array: it must match (recursively) the pattern value
9677
9678If 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.)
9679     */
9680    public MarkdownType getPatternMarkdownType() throws FHIRException { 
9681      if (this.pattern == null)
9682        this.pattern = new MarkdownType();
9683      if (!(this.pattern instanceof MarkdownType))
9684        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9685      return (MarkdownType) this.pattern;
9686    }
9687
9688    public boolean hasPatternMarkdownType() { 
9689      return this != null && this.pattern instanceof MarkdownType;
9690    }
9691
9692    /**
9693     * @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.  
9694
9695When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9696
9697When 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.
9698
9699When 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.,
9700
97011. If primitive: it must match exactly the pattern value
97022. If a complex object: it must match (recursively) the pattern value
97033. If an array: it must match (recursively) the pattern value
9704
9705If 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.)
9706     */
9707    public OidType getPatternOidType() throws FHIRException { 
9708      if (this.pattern == null)
9709        this.pattern = new OidType();
9710      if (!(this.pattern instanceof OidType))
9711        throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9712      return (OidType) this.pattern;
9713    }
9714
9715    public boolean hasPatternOidType() { 
9716      return this != null && this.pattern instanceof OidType;
9717    }
9718
9719    /**
9720     * @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.  
9721
9722When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9723
9724When 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.
9725
9726When 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.,
9727
97281. If primitive: it must match exactly the pattern value
97292. If a complex object: it must match (recursively) the pattern value
97303. If an array: it must match (recursively) the pattern value
9731
9732If 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.)
9733     */
9734    public PositiveIntType getPatternPositiveIntType() throws FHIRException { 
9735      if (this.pattern == null)
9736        this.pattern = new PositiveIntType();
9737      if (!(this.pattern instanceof PositiveIntType))
9738        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9739      return (PositiveIntType) this.pattern;
9740    }
9741
9742    public boolean hasPatternPositiveIntType() { 
9743      return this != null && this.pattern instanceof PositiveIntType;
9744    }
9745
9746    /**
9747     * @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.  
9748
9749When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9750
9751When 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.
9752
9753When 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.,
9754
97551. If primitive: it must match exactly the pattern value
97562. If a complex object: it must match (recursively) the pattern value
97573. If an array: it must match (recursively) the pattern value
9758
9759If 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.)
9760     */
9761    public StringType getPatternStringType() throws FHIRException { 
9762      if (this.pattern == null)
9763        this.pattern = new StringType();
9764      if (!(this.pattern instanceof StringType))
9765        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9766      return (StringType) this.pattern;
9767    }
9768
9769    public boolean hasPatternStringType() { 
9770      return this != null && this.pattern instanceof StringType;
9771    }
9772
9773    /**
9774     * @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.  
9775
9776When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9777
9778When 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.
9779
9780When 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.,
9781
97821. If primitive: it must match exactly the pattern value
97832. If a complex object: it must match (recursively) the pattern value
97843. If an array: it must match (recursively) the pattern value
9785
9786If 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.)
9787     */
9788    public TimeType getPatternTimeType() throws FHIRException { 
9789      if (this.pattern == null)
9790        this.pattern = new TimeType();
9791      if (!(this.pattern instanceof TimeType))
9792        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9793      return (TimeType) this.pattern;
9794    }
9795
9796    public boolean hasPatternTimeType() { 
9797      return this != null && this.pattern instanceof TimeType;
9798    }
9799
9800    /**
9801     * @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.  
9802
9803When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9804
9805When 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.
9806
9807When 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.,
9808
98091. If primitive: it must match exactly the pattern value
98102. If a complex object: it must match (recursively) the pattern value
98113. If an array: it must match (recursively) the pattern value
9812
9813If 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.)
9814     */
9815    public UnsignedIntType getPatternUnsignedIntType() throws FHIRException { 
9816      if (this.pattern == null)
9817        this.pattern = new UnsignedIntType();
9818      if (!(this.pattern instanceof UnsignedIntType))
9819        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9820      return (UnsignedIntType) this.pattern;
9821    }
9822
9823    public boolean hasPatternUnsignedIntType() { 
9824      return this != null && this.pattern instanceof UnsignedIntType;
9825    }
9826
9827    /**
9828     * @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.  
9829
9830When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9831
9832When 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.
9833
9834When 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.,
9835
98361. If primitive: it must match exactly the pattern value
98372. If a complex object: it must match (recursively) the pattern value
98383. If an array: it must match (recursively) the pattern value
9839
9840If 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.)
9841     */
9842    public UriType getPatternUriType() throws FHIRException { 
9843      if (this.pattern == null)
9844        this.pattern = new UriType();
9845      if (!(this.pattern instanceof UriType))
9846        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9847      return (UriType) this.pattern;
9848    }
9849
9850    public boolean hasPatternUriType() { 
9851      return this != null && this.pattern instanceof UriType;
9852    }
9853
9854    /**
9855     * @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.  
9856
9857When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9858
9859When 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.
9860
9861When 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.,
9862
98631. If primitive: it must match exactly the pattern value
98642. If a complex object: it must match (recursively) the pattern value
98653. If an array: it must match (recursively) the pattern value
9866
9867If 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.)
9868     */
9869    public UrlType getPatternUrlType() throws FHIRException { 
9870      if (this.pattern == null)
9871        this.pattern = new UrlType();
9872      if (!(this.pattern instanceof UrlType))
9873        throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9874      return (UrlType) this.pattern;
9875    }
9876
9877    public boolean hasPatternUrlType() { 
9878      return this != null && this.pattern instanceof UrlType;
9879    }
9880
9881    /**
9882     * @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.  
9883
9884When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9885
9886When 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.
9887
9888When 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.,
9889
98901. If primitive: it must match exactly the pattern value
98912. If a complex object: it must match (recursively) the pattern value
98923. If an array: it must match (recursively) the pattern value
9893
9894If 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.)
9895     */
9896    public UuidType getPatternUuidType() throws FHIRException { 
9897      if (this.pattern == null)
9898        this.pattern = new UuidType();
9899      if (!(this.pattern instanceof UuidType))
9900        throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.pattern.getClass().getName()+" was encountered");
9901      return (UuidType) this.pattern;
9902    }
9903
9904    public boolean hasPatternUuidType() { 
9905      return this != null && this.pattern instanceof UuidType;
9906    }
9907
9908    /**
9909     * @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.  
9910
9911When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9912
9913When 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.
9914
9915When 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.,
9916
99171. If primitive: it must match exactly the pattern value
99182. If a complex object: it must match (recursively) the pattern value
99193. If an array: it must match (recursively) the pattern value
9920
9921If 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.)
9922     */
9923    public Address getPatternAddress() throws FHIRException { 
9924      if (this.pattern == null)
9925        this.pattern = new Address();
9926      if (!(this.pattern instanceof Address))
9927        throw new FHIRException("Type mismatch: the type Address was expected, but "+this.pattern.getClass().getName()+" was encountered");
9928      return (Address) this.pattern;
9929    }
9930
9931    public boolean hasPatternAddress() { 
9932      return this != null && this.pattern instanceof Address;
9933    }
9934
9935    /**
9936     * @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.  
9937
9938When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9939
9940When 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.
9941
9942When 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.,
9943
99441. If primitive: it must match exactly the pattern value
99452. If a complex object: it must match (recursively) the pattern value
99463. If an array: it must match (recursively) the pattern value
9947
9948If 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.)
9949     */
9950    public Age getPatternAge() throws FHIRException { 
9951      if (this.pattern == null)
9952        this.pattern = new Age();
9953      if (!(this.pattern instanceof Age))
9954        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.pattern.getClass().getName()+" was encountered");
9955      return (Age) this.pattern;
9956    }
9957
9958    public boolean hasPatternAge() { 
9959      return this != null && this.pattern instanceof Age;
9960    }
9961
9962    /**
9963     * @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.  
9964
9965When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9966
9967When 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.
9968
9969When 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.,
9970
99711. If primitive: it must match exactly the pattern value
99722. If a complex object: it must match (recursively) the pattern value
99733. If an array: it must match (recursively) the pattern value
9974
9975If 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.)
9976     */
9977    public Annotation getPatternAnnotation() throws FHIRException { 
9978      if (this.pattern == null)
9979        this.pattern = new Annotation();
9980      if (!(this.pattern instanceof Annotation))
9981        throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.pattern.getClass().getName()+" was encountered");
9982      return (Annotation) this.pattern;
9983    }
9984
9985    public boolean hasPatternAnnotation() { 
9986      return this != null && this.pattern instanceof Annotation;
9987    }
9988
9989    /**
9990     * @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.  
9991
9992When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
9993
9994When 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.
9995
9996When 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.,
9997
99981. If primitive: it must match exactly the pattern value
99992. If a complex object: it must match (recursively) the pattern value
100003. If an array: it must match (recursively) the pattern value
10001
10002If 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.)
10003     */
10004    public Attachment getPatternAttachment() throws FHIRException { 
10005      if (this.pattern == null)
10006        this.pattern = new Attachment();
10007      if (!(this.pattern instanceof Attachment))
10008        throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.pattern.getClass().getName()+" was encountered");
10009      return (Attachment) this.pattern;
10010    }
10011
10012    public boolean hasPatternAttachment() { 
10013      return this != null && this.pattern instanceof Attachment;
10014    }
10015
10016    /**
10017     * @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.  
10018
10019When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10020
10021When 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.
10022
10023When 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.,
10024
100251. If primitive: it must match exactly the pattern value
100262. If a complex object: it must match (recursively) the pattern value
100273. If an array: it must match (recursively) the pattern value
10028
10029If 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.)
10030     */
10031    public CodeableConcept getPatternCodeableConcept() throws FHIRException { 
10032      if (this.pattern == null)
10033        this.pattern = new CodeableConcept();
10034      if (!(this.pattern instanceof CodeableConcept))
10035        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.pattern.getClass().getName()+" was encountered");
10036      return (CodeableConcept) this.pattern;
10037    }
10038
10039    public boolean hasPatternCodeableConcept() { 
10040      return this != null && this.pattern instanceof CodeableConcept;
10041    }
10042
10043    /**
10044     * @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.  
10045
10046When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10047
10048When 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.
10049
10050When 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.,
10051
100521. If primitive: it must match exactly the pattern value
100532. If a complex object: it must match (recursively) the pattern value
100543. If an array: it must match (recursively) the pattern value
10055
10056If 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.)
10057     */
10058    public CodeableReference getPatternCodeableReference() throws FHIRException { 
10059      if (this.pattern == null)
10060        this.pattern = new CodeableReference();
10061      if (!(this.pattern instanceof CodeableReference))
10062        throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.pattern.getClass().getName()+" was encountered");
10063      return (CodeableReference) this.pattern;
10064    }
10065
10066    public boolean hasPatternCodeableReference() { 
10067      return this != null && this.pattern instanceof CodeableReference;
10068    }
10069
10070    /**
10071     * @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.  
10072
10073When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10074
10075When 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.
10076
10077When 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.,
10078
100791. If primitive: it must match exactly the pattern value
100802. If a complex object: it must match (recursively) the pattern value
100813. If an array: it must match (recursively) the pattern value
10082
10083If 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.)
10084     */
10085    public Coding getPatternCoding() throws FHIRException { 
10086      if (this.pattern == null)
10087        this.pattern = new Coding();
10088      if (!(this.pattern instanceof Coding))
10089        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.pattern.getClass().getName()+" was encountered");
10090      return (Coding) this.pattern;
10091    }
10092
10093    public boolean hasPatternCoding() { 
10094      return this != null && this.pattern instanceof Coding;
10095    }
10096
10097    /**
10098     * @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.  
10099
10100When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10101
10102When 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.
10103
10104When 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.,
10105
101061. If primitive: it must match exactly the pattern value
101072. If a complex object: it must match (recursively) the pattern value
101083. If an array: it must match (recursively) the pattern value
10109
10110If 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.)
10111     */
10112    public ContactPoint getPatternContactPoint() throws FHIRException { 
10113      if (this.pattern == null)
10114        this.pattern = new ContactPoint();
10115      if (!(this.pattern instanceof ContactPoint))
10116        throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.pattern.getClass().getName()+" was encountered");
10117      return (ContactPoint) this.pattern;
10118    }
10119
10120    public boolean hasPatternContactPoint() { 
10121      return this != null && this.pattern instanceof ContactPoint;
10122    }
10123
10124    /**
10125     * @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.  
10126
10127When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10128
10129When 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.
10130
10131When 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.,
10132
101331. If primitive: it must match exactly the pattern value
101342. If a complex object: it must match (recursively) the pattern value
101353. If an array: it must match (recursively) the pattern value
10136
10137If 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.)
10138     */
10139    public Count getPatternCount() throws FHIRException { 
10140      if (this.pattern == null)
10141        this.pattern = new Count();
10142      if (!(this.pattern instanceof Count))
10143        throw new FHIRException("Type mismatch: the type Count was expected, but "+this.pattern.getClass().getName()+" was encountered");
10144      return (Count) this.pattern;
10145    }
10146
10147    public boolean hasPatternCount() { 
10148      return this != null && this.pattern instanceof Count;
10149    }
10150
10151    /**
10152     * @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.  
10153
10154When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10155
10156When 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.
10157
10158When 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.,
10159
101601. If primitive: it must match exactly the pattern value
101612. If a complex object: it must match (recursively) the pattern value
101623. If an array: it must match (recursively) the pattern value
10163
10164If 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.)
10165     */
10166    public Distance getPatternDistance() throws FHIRException { 
10167      if (this.pattern == null)
10168        this.pattern = new Distance();
10169      if (!(this.pattern instanceof Distance))
10170        throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.pattern.getClass().getName()+" was encountered");
10171      return (Distance) this.pattern;
10172    }
10173
10174    public boolean hasPatternDistance() { 
10175      return this != null && this.pattern instanceof Distance;
10176    }
10177
10178    /**
10179     * @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.  
10180
10181When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10182
10183When 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.
10184
10185When 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.,
10186
101871. If primitive: it must match exactly the pattern value
101882. If a complex object: it must match (recursively) the pattern value
101893. If an array: it must match (recursively) the pattern value
10190
10191If 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.)
10192     */
10193    public Duration getPatternDuration() throws FHIRException { 
10194      if (this.pattern == null)
10195        this.pattern = new Duration();
10196      if (!(this.pattern instanceof Duration))
10197        throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.pattern.getClass().getName()+" was encountered");
10198      return (Duration) this.pattern;
10199    }
10200
10201    public boolean hasPatternDuration() { 
10202      return this != null && this.pattern instanceof Duration;
10203    }
10204
10205    /**
10206     * @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.  
10207
10208When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10209
10210When 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.
10211
10212When 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.,
10213
102141. If primitive: it must match exactly the pattern value
102152. If a complex object: it must match (recursively) the pattern value
102163. If an array: it must match (recursively) the pattern value
10217
10218If 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.)
10219     */
10220    public HumanName getPatternHumanName() throws FHIRException { 
10221      if (this.pattern == null)
10222        this.pattern = new HumanName();
10223      if (!(this.pattern instanceof HumanName))
10224        throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.pattern.getClass().getName()+" was encountered");
10225      return (HumanName) this.pattern;
10226    }
10227
10228    public boolean hasPatternHumanName() { 
10229      return this != null && this.pattern instanceof HumanName;
10230    }
10231
10232    /**
10233     * @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.  
10234
10235When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10236
10237When 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.
10238
10239When 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.,
10240
102411. If primitive: it must match exactly the pattern value
102422. If a complex object: it must match (recursively) the pattern value
102433. If an array: it must match (recursively) the pattern value
10244
10245If 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.)
10246     */
10247    public Identifier getPatternIdentifier() throws FHIRException { 
10248      if (this.pattern == null)
10249        this.pattern = new Identifier();
10250      if (!(this.pattern instanceof Identifier))
10251        throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.pattern.getClass().getName()+" was encountered");
10252      return (Identifier) this.pattern;
10253    }
10254
10255    public boolean hasPatternIdentifier() { 
10256      return this != null && this.pattern instanceof Identifier;
10257    }
10258
10259    /**
10260     * @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.  
10261
10262When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10263
10264When 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.
10265
10266When 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.,
10267
102681. If primitive: it must match exactly the pattern value
102692. If a complex object: it must match (recursively) the pattern value
102703. If an array: it must match (recursively) the pattern value
10271
10272If 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.)
10273     */
10274    public Money getPatternMoney() throws FHIRException { 
10275      if (this.pattern == null)
10276        this.pattern = new Money();
10277      if (!(this.pattern instanceof Money))
10278        throw new FHIRException("Type mismatch: the type Money was expected, but "+this.pattern.getClass().getName()+" was encountered");
10279      return (Money) this.pattern;
10280    }
10281
10282    public boolean hasPatternMoney() { 
10283      return this != null && this.pattern instanceof Money;
10284    }
10285
10286    /**
10287     * @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.  
10288
10289When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10290
10291When 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.
10292
10293When 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.,
10294
102951. If primitive: it must match exactly the pattern value
102962. If a complex object: it must match (recursively) the pattern value
102973. If an array: it must match (recursively) the pattern value
10298
10299If 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.)
10300     */
10301    public Period getPatternPeriod() throws FHIRException { 
10302      if (this.pattern == null)
10303        this.pattern = new Period();
10304      if (!(this.pattern instanceof Period))
10305        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.pattern.getClass().getName()+" was encountered");
10306      return (Period) this.pattern;
10307    }
10308
10309    public boolean hasPatternPeriod() { 
10310      return this != null && this.pattern instanceof Period;
10311    }
10312
10313    /**
10314     * @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.  
10315
10316When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10317
10318When 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.
10319
10320When 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.,
10321
103221. If primitive: it must match exactly the pattern value
103232. If a complex object: it must match (recursively) the pattern value
103243. If an array: it must match (recursively) the pattern value
10325
10326If 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.)
10327     */
10328    public Quantity getPatternQuantity() throws FHIRException { 
10329      if (this.pattern == null)
10330        this.pattern = new Quantity();
10331      if (!(this.pattern instanceof Quantity))
10332        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.pattern.getClass().getName()+" was encountered");
10333      return (Quantity) this.pattern;
10334    }
10335
10336    public boolean hasPatternQuantity() { 
10337      return this != null && this.pattern instanceof Quantity;
10338    }
10339
10340    /**
10341     * @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.  
10342
10343When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10344
10345When 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.
10346
10347When 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.,
10348
103491. If primitive: it must match exactly the pattern value
103502. If a complex object: it must match (recursively) the pattern value
103513. If an array: it must match (recursively) the pattern value
10352
10353If 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.)
10354     */
10355    public Range getPatternRange() throws FHIRException { 
10356      if (this.pattern == null)
10357        this.pattern = new Range();
10358      if (!(this.pattern instanceof Range))
10359        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.pattern.getClass().getName()+" was encountered");
10360      return (Range) this.pattern;
10361    }
10362
10363    public boolean hasPatternRange() { 
10364      return this != null && this.pattern instanceof Range;
10365    }
10366
10367    /**
10368     * @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.  
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 Ratio getPatternRatio() throws FHIRException { 
10383      if (this.pattern == null)
10384        this.pattern = new Ratio();
10385      if (!(this.pattern instanceof Ratio))
10386        throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.pattern.getClass().getName()+" was encountered");
10387      return (Ratio) this.pattern;
10388    }
10389
10390    public boolean hasPatternRatio() { 
10391      return this != null && this.pattern instanceof Ratio;
10392    }
10393
10394    /**
10395     * @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.  
10396
10397When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10398
10399When 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.
10400
10401When 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.,
10402
104031. If primitive: it must match exactly the pattern value
104042. If a complex object: it must match (recursively) the pattern value
104053. If an array: it must match (recursively) the pattern value
10406
10407If 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.)
10408     */
10409    public RatioRange getPatternRatioRange() throws FHIRException { 
10410      if (this.pattern == null)
10411        this.pattern = new RatioRange();
10412      if (!(this.pattern instanceof RatioRange))
10413        throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.pattern.getClass().getName()+" was encountered");
10414      return (RatioRange) this.pattern;
10415    }
10416
10417    public boolean hasPatternRatioRange() { 
10418      return this != null && this.pattern instanceof RatioRange;
10419    }
10420
10421    /**
10422     * @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.  
10423
10424When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10425
10426When 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.
10427
10428When 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.,
10429
104301. If primitive: it must match exactly the pattern value
104312. If a complex object: it must match (recursively) the pattern value
104323. If an array: it must match (recursively) the pattern value
10433
10434If 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.)
10435     */
10436    public Reference getPatternReference() throws FHIRException { 
10437      if (this.pattern == null)
10438        this.pattern = new Reference();
10439      if (!(this.pattern instanceof Reference))
10440        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.pattern.getClass().getName()+" was encountered");
10441      return (Reference) this.pattern;
10442    }
10443
10444    public boolean hasPatternReference() { 
10445      return this != null && this.pattern instanceof Reference;
10446    }
10447
10448    /**
10449     * @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.  
10450
10451When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10452
10453When 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.
10454
10455When 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.,
10456
104571. If primitive: it must match exactly the pattern value
104582. If a complex object: it must match (recursively) the pattern value
104593. If an array: it must match (recursively) the pattern value
10460
10461If 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.)
10462     */
10463    public SampledData getPatternSampledData() throws FHIRException { 
10464      if (this.pattern == null)
10465        this.pattern = new SampledData();
10466      if (!(this.pattern instanceof SampledData))
10467        throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.pattern.getClass().getName()+" was encountered");
10468      return (SampledData) this.pattern;
10469    }
10470
10471    public boolean hasPatternSampledData() { 
10472      return this != null && this.pattern instanceof SampledData;
10473    }
10474
10475    /**
10476     * @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.  
10477
10478When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10479
10480When 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.
10481
10482When 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.,
10483
104841. If primitive: it must match exactly the pattern value
104852. If a complex object: it must match (recursively) the pattern value
104863. If an array: it must match (recursively) the pattern value
10487
10488If 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.)
10489     */
10490    public Signature getPatternSignature() throws FHIRException { 
10491      if (this.pattern == null)
10492        this.pattern = new Signature();
10493      if (!(this.pattern instanceof Signature))
10494        throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.pattern.getClass().getName()+" was encountered");
10495      return (Signature) this.pattern;
10496    }
10497
10498    public boolean hasPatternSignature() { 
10499      return this != null && this.pattern instanceof Signature;
10500    }
10501
10502    /**
10503     * @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.  
10504
10505When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10506
10507When 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.
10508
10509When 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.,
10510
105111. If primitive: it must match exactly the pattern value
105122. If a complex object: it must match (recursively) the pattern value
105133. If an array: it must match (recursively) the pattern value
10514
10515If 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.)
10516     */
10517    public Timing getPatternTiming() throws FHIRException { 
10518      if (this.pattern == null)
10519        this.pattern = new Timing();
10520      if (!(this.pattern instanceof Timing))
10521        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.pattern.getClass().getName()+" was encountered");
10522      return (Timing) this.pattern;
10523    }
10524
10525    public boolean hasPatternTiming() { 
10526      return this != null && this.pattern instanceof Timing;
10527    }
10528
10529    /**
10530     * @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.  
10531
10532When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10533
10534When 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.
10535
10536When 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.,
10537
105381. If primitive: it must match exactly the pattern value
105392. If a complex object: it must match (recursively) the pattern value
105403. If an array: it must match (recursively) the pattern value
10541
10542If 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.)
10543     */
10544    public ContactDetail getPatternContactDetail() throws FHIRException { 
10545      if (this.pattern == null)
10546        this.pattern = new ContactDetail();
10547      if (!(this.pattern instanceof ContactDetail))
10548        throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.pattern.getClass().getName()+" was encountered");
10549      return (ContactDetail) this.pattern;
10550    }
10551
10552    public boolean hasPatternContactDetail() { 
10553      return this != null && this.pattern instanceof ContactDetail;
10554    }
10555
10556    /**
10557     * @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.  
10558
10559When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10560
10561When 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.
10562
10563When 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.,
10564
105651. If primitive: it must match exactly the pattern value
105662. If a complex object: it must match (recursively) the pattern value
105673. If an array: it must match (recursively) the pattern value
10568
10569If 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.)
10570     */
10571    public DataRequirement getPatternDataRequirement() throws FHIRException { 
10572      if (this.pattern == null)
10573        this.pattern = new DataRequirement();
10574      if (!(this.pattern instanceof DataRequirement))
10575        throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.pattern.getClass().getName()+" was encountered");
10576      return (DataRequirement) this.pattern;
10577    }
10578
10579    public boolean hasPatternDataRequirement() { 
10580      return this != null && this.pattern instanceof DataRequirement;
10581    }
10582
10583    /**
10584     * @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.  
10585
10586When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10587
10588When 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.
10589
10590When 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.,
10591
105921. If primitive: it must match exactly the pattern value
105932. If a complex object: it must match (recursively) the pattern value
105943. If an array: it must match (recursively) the pattern value
10595
10596If 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.)
10597     */
10598    public Expression getPatternExpression() throws FHIRException { 
10599      if (this.pattern == null)
10600        this.pattern = new Expression();
10601      if (!(this.pattern instanceof Expression))
10602        throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.pattern.getClass().getName()+" was encountered");
10603      return (Expression) this.pattern;
10604    }
10605
10606    public boolean hasPatternExpression() { 
10607      return this != null && this.pattern instanceof Expression;
10608    }
10609
10610    /**
10611     * @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.  
10612
10613When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10614
10615When 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.
10616
10617When 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.,
10618
106191. If primitive: it must match exactly the pattern value
106202. If a complex object: it must match (recursively) the pattern value
106213. If an array: it must match (recursively) the pattern value
10622
10623If 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.)
10624     */
10625    public ParameterDefinition getPatternParameterDefinition() throws FHIRException { 
10626      if (this.pattern == null)
10627        this.pattern = new ParameterDefinition();
10628      if (!(this.pattern instanceof ParameterDefinition))
10629        throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.pattern.getClass().getName()+" was encountered");
10630      return (ParameterDefinition) this.pattern;
10631    }
10632
10633    public boolean hasPatternParameterDefinition() { 
10634      return this != null && this.pattern instanceof ParameterDefinition;
10635    }
10636
10637    /**
10638     * @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.  
10639
10640When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10641
10642When 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.
10643
10644When 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.,
10645
106461. If primitive: it must match exactly the pattern value
106472. If a complex object: it must match (recursively) the pattern value
106483. If an array: it must match (recursively) the pattern value
10649
10650If 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.)
10651     */
10652    public RelatedArtifact getPatternRelatedArtifact() throws FHIRException { 
10653      if (this.pattern == null)
10654        this.pattern = new RelatedArtifact();
10655      if (!(this.pattern instanceof RelatedArtifact))
10656        throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.pattern.getClass().getName()+" was encountered");
10657      return (RelatedArtifact) this.pattern;
10658    }
10659
10660    public boolean hasPatternRelatedArtifact() { 
10661      return this != null && this.pattern instanceof RelatedArtifact;
10662    }
10663
10664    /**
10665     * @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.  
10666
10667When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10668
10669When 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.
10670
10671When 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.,
10672
106731. If primitive: it must match exactly the pattern value
106742. If a complex object: it must match (recursively) the pattern value
106753. If an array: it must match (recursively) the pattern value
10676
10677If 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.)
10678     */
10679    public TriggerDefinition getPatternTriggerDefinition() throws FHIRException { 
10680      if (this.pattern == null)
10681        this.pattern = new TriggerDefinition();
10682      if (!(this.pattern instanceof TriggerDefinition))
10683        throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.pattern.getClass().getName()+" was encountered");
10684      return (TriggerDefinition) this.pattern;
10685    }
10686
10687    public boolean hasPatternTriggerDefinition() { 
10688      return this != null && this.pattern instanceof TriggerDefinition;
10689    }
10690
10691    /**
10692     * @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.  
10693
10694When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10695
10696When 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.
10697
10698When 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.,
10699
107001. If primitive: it must match exactly the pattern value
107012. If a complex object: it must match (recursively) the pattern value
107023. If an array: it must match (recursively) the pattern value
10703
10704If 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.)
10705     */
10706    public UsageContext getPatternUsageContext() throws FHIRException { 
10707      if (this.pattern == null)
10708        this.pattern = new UsageContext();
10709      if (!(this.pattern instanceof UsageContext))
10710        throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.pattern.getClass().getName()+" was encountered");
10711      return (UsageContext) this.pattern;
10712    }
10713
10714    public boolean hasPatternUsageContext() { 
10715      return this != null && this.pattern instanceof UsageContext;
10716    }
10717
10718    /**
10719     * @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.  
10720
10721When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10722
10723When 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.
10724
10725When 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.,
10726
107271. If primitive: it must match exactly the pattern value
107282. If a complex object: it must match (recursively) the pattern value
107293. If an array: it must match (recursively) the pattern value
10730
10731If 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.)
10732     */
10733    public Availability getPatternAvailability() throws FHIRException { 
10734      if (this.pattern == null)
10735        this.pattern = new Availability();
10736      if (!(this.pattern instanceof Availability))
10737        throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.pattern.getClass().getName()+" was encountered");
10738      return (Availability) this.pattern;
10739    }
10740
10741    public boolean hasPatternAvailability() { 
10742      return this != null && this.pattern instanceof Availability;
10743    }
10744
10745    /**
10746     * @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.  
10747
10748When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10749
10750When 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.
10751
10752When 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.,
10753
107541. If primitive: it must match exactly the pattern value
107552. If a complex object: it must match (recursively) the pattern value
107563. If an array: it must match (recursively) the pattern value
10757
10758If 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.)
10759     */
10760    public ExtendedContactDetail getPatternExtendedContactDetail() throws FHIRException { 
10761      if (this.pattern == null)
10762        this.pattern = new ExtendedContactDetail();
10763      if (!(this.pattern instanceof ExtendedContactDetail))
10764        throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.pattern.getClass().getName()+" was encountered");
10765      return (ExtendedContactDetail) this.pattern;
10766    }
10767
10768    public boolean hasPatternExtendedContactDetail() { 
10769      return this != null && this.pattern instanceof ExtendedContactDetail;
10770    }
10771
10772    /**
10773     * @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.  
10774
10775When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10776
10777When 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.
10778
10779When 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.,
10780
107811. If primitive: it must match exactly the pattern value
107822. If a complex object: it must match (recursively) the pattern value
107833. If an array: it must match (recursively) the pattern value
10784
10785If 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.)
10786     */
10787    public Dosage getPatternDosage() throws FHIRException { 
10788      if (this.pattern == null)
10789        this.pattern = new Dosage();
10790      if (!(this.pattern instanceof Dosage))
10791        throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.pattern.getClass().getName()+" was encountered");
10792      return (Dosage) this.pattern;
10793    }
10794
10795    public boolean hasPatternDosage() { 
10796      return this != null && this.pattern instanceof Dosage;
10797    }
10798
10799    /**
10800     * @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.  
10801
10802When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10803
10804When 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.
10805
10806When 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.,
10807
108081. If primitive: it must match exactly the pattern value
108092. If a complex object: it must match (recursively) the pattern value
108103. If an array: it must match (recursively) the pattern value
10811
10812If 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.)
10813     */
10814    public Meta getPatternMeta() throws FHIRException { 
10815      if (this.pattern == null)
10816        this.pattern = new Meta();
10817      if (!(this.pattern instanceof Meta))
10818        throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.pattern.getClass().getName()+" was encountered");
10819      return (Meta) this.pattern;
10820    }
10821
10822    public boolean hasPatternMeta() { 
10823      return this != null && this.pattern instanceof Meta;
10824    }
10825
10826    public boolean hasPattern() { 
10827      return this.pattern != null && !this.pattern.isEmpty();
10828    }
10829
10830    /**
10831     * @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.  
10832
10833When pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.
10834
10835When 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.
10836
10837When 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.,
10838
108391. If primitive: it must match exactly the pattern value
108402. If a complex object: it must match (recursively) the pattern value
108413. If an array: it must match (recursively) the pattern value
10842
10843If 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.)
10844     */
10845    public ElementDefinition setPattern(DataType value) { 
10846      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))
10847        throw new Error("Not the right type for ElementDefinition.pattern[x]: "+value.fhirType());
10848      this.pattern = value;
10849      return this;
10850    }
10851
10852    /**
10853     * @return {@link #example} (A sample value for this element demonstrating the type of information that would typically be found in the element.)
10854     */
10855    public List<ElementDefinitionExampleComponent> getExample() { 
10856      if (this.example == null)
10857        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10858      return this.example;
10859    }
10860
10861    /**
10862     * @return Returns a reference to <code>this</code> for easy method chaining
10863     */
10864    public ElementDefinition setExample(List<ElementDefinitionExampleComponent> theExample) { 
10865      this.example = theExample;
10866      return this;
10867    }
10868
10869    public boolean hasExample() { 
10870      if (this.example == null)
10871        return false;
10872      for (ElementDefinitionExampleComponent item : this.example)
10873        if (!item.isEmpty())
10874          return true;
10875      return false;
10876    }
10877
10878    public ElementDefinitionExampleComponent addExample() { //3
10879      ElementDefinitionExampleComponent t = new ElementDefinitionExampleComponent();
10880      if (this.example == null)
10881        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10882      this.example.add(t);
10883      return t;
10884    }
10885
10886    public ElementDefinition addExample(ElementDefinitionExampleComponent t) { //3
10887      if (t == null)
10888        return this;
10889      if (this.example == null)
10890        this.example = new ArrayList<ElementDefinitionExampleComponent>();
10891      this.example.add(t);
10892      return this;
10893    }
10894
10895    /**
10896     * @return The first repetition of repeating field {@link #example}, creating it if it does not already exist {3}
10897     */
10898    public ElementDefinitionExampleComponent getExampleFirstRep() { 
10899      if (getExample().isEmpty()) {
10900        addExample();
10901      }
10902      return getExample().get(0);
10903    }
10904
10905    /**
10906     * @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.)
10907     */
10908    public DataType getMinValue() { 
10909      return this.minValue;
10910    }
10911
10912    /**
10913     * @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.)
10914     */
10915    public DateType getMinValueDateType() throws FHIRException { 
10916      if (this.minValue == null)
10917        this.minValue = new DateType();
10918      if (!(this.minValue instanceof DateType))
10919        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10920      return (DateType) this.minValue;
10921    }
10922
10923    public boolean hasMinValueDateType() { 
10924      return this != null && this.minValue instanceof DateType;
10925    }
10926
10927    /**
10928     * @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.)
10929     */
10930    public DateTimeType getMinValueDateTimeType() throws FHIRException { 
10931      if (this.minValue == null)
10932        this.minValue = new DateTimeType();
10933      if (!(this.minValue instanceof DateTimeType))
10934        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10935      return (DateTimeType) this.minValue;
10936    }
10937
10938    public boolean hasMinValueDateTimeType() { 
10939      return this != null && this.minValue instanceof DateTimeType;
10940    }
10941
10942    /**
10943     * @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.)
10944     */
10945    public InstantType getMinValueInstantType() throws FHIRException { 
10946      if (this.minValue == null)
10947        this.minValue = new InstantType();
10948      if (!(this.minValue instanceof InstantType))
10949        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10950      return (InstantType) this.minValue;
10951    }
10952
10953    public boolean hasMinValueInstantType() { 
10954      return this != null && this.minValue instanceof InstantType;
10955    }
10956
10957    /**
10958     * @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.)
10959     */
10960    public TimeType getMinValueTimeType() throws FHIRException { 
10961      if (this.minValue == null)
10962        this.minValue = new TimeType();
10963      if (!(this.minValue instanceof TimeType))
10964        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10965      return (TimeType) this.minValue;
10966    }
10967
10968    public boolean hasMinValueTimeType() { 
10969      return this != null && this.minValue instanceof TimeType;
10970    }
10971
10972    /**
10973     * @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.)
10974     */
10975    public DecimalType getMinValueDecimalType() throws FHIRException { 
10976      if (this.minValue == null)
10977        this.minValue = new DecimalType();
10978      if (!(this.minValue instanceof DecimalType))
10979        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10980      return (DecimalType) this.minValue;
10981    }
10982
10983    public boolean hasMinValueDecimalType() { 
10984      return this != null && this.minValue instanceof DecimalType;
10985    }
10986
10987    /**
10988     * @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.)
10989     */
10990    public IntegerType getMinValueIntegerType() throws FHIRException { 
10991      if (this.minValue == null)
10992        this.minValue = new IntegerType();
10993      if (!(this.minValue instanceof IntegerType))
10994        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.minValue.getClass().getName()+" was encountered");
10995      return (IntegerType) this.minValue;
10996    }
10997
10998    public boolean hasMinValueIntegerType() { 
10999      return this != null && this.minValue instanceof IntegerType;
11000    }
11001
11002    /**
11003     * @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.)
11004     */
11005    public Integer64Type getMinValueInteger64Type() throws FHIRException { 
11006      if (this.minValue == null)
11007        this.minValue = new Integer64Type();
11008      if (!(this.minValue instanceof Integer64Type))
11009        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.minValue.getClass().getName()+" was encountered");
11010      return (Integer64Type) this.minValue;
11011    }
11012
11013    public boolean hasMinValueInteger64Type() { 
11014      return this != null && this.minValue instanceof Integer64Type;
11015    }
11016
11017    /**
11018     * @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.)
11019     */
11020    public PositiveIntType getMinValuePositiveIntType() throws FHIRException { 
11021      if (this.minValue == null)
11022        this.minValue = new PositiveIntType();
11023      if (!(this.minValue instanceof PositiveIntType))
11024        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.minValue.getClass().getName()+" was encountered");
11025      return (PositiveIntType) this.minValue;
11026    }
11027
11028    public boolean hasMinValuePositiveIntType() { 
11029      return this != null && this.minValue instanceof PositiveIntType;
11030    }
11031
11032    /**
11033     * @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.)
11034     */
11035    public UnsignedIntType getMinValueUnsignedIntType() throws FHIRException { 
11036      if (this.minValue == null)
11037        this.minValue = new UnsignedIntType();
11038      if (!(this.minValue instanceof UnsignedIntType))
11039        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.minValue.getClass().getName()+" was encountered");
11040      return (UnsignedIntType) this.minValue;
11041    }
11042
11043    public boolean hasMinValueUnsignedIntType() { 
11044      return this != null && this.minValue instanceof UnsignedIntType;
11045    }
11046
11047    /**
11048     * @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.)
11049     */
11050    public Quantity getMinValueQuantity() throws FHIRException { 
11051      if (this.minValue == null)
11052        this.minValue = new Quantity();
11053      if (!(this.minValue instanceof Quantity))
11054        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.minValue.getClass().getName()+" was encountered");
11055      return (Quantity) this.minValue;
11056    }
11057
11058    public boolean hasMinValueQuantity() { 
11059      return this != null && this.minValue instanceof Quantity;
11060    }
11061
11062    public boolean hasMinValue() { 
11063      return this.minValue != null && !this.minValue.isEmpty();
11064    }
11065
11066    /**
11067     * @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.)
11068     */
11069    public ElementDefinition setMinValue(DataType value) { 
11070      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))
11071        throw new Error("Not the right type for ElementDefinition.minValue[x]: "+value.fhirType());
11072      this.minValue = value;
11073      return this;
11074    }
11075
11076    /**
11077     * @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.)
11078     */
11079    public DataType getMaxValue() { 
11080      return this.maxValue;
11081    }
11082
11083    /**
11084     * @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.)
11085     */
11086    public DateType getMaxValueDateType() throws FHIRException { 
11087      if (this.maxValue == null)
11088        this.maxValue = new DateType();
11089      if (!(this.maxValue instanceof DateType))
11090        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11091      return (DateType) this.maxValue;
11092    }
11093
11094    public boolean hasMaxValueDateType() { 
11095      return this != null && this.maxValue instanceof DateType;
11096    }
11097
11098    /**
11099     * @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.)
11100     */
11101    public DateTimeType getMaxValueDateTimeType() throws FHIRException { 
11102      if (this.maxValue == null)
11103        this.maxValue = new DateTimeType();
11104      if (!(this.maxValue instanceof DateTimeType))
11105        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11106      return (DateTimeType) this.maxValue;
11107    }
11108
11109    public boolean hasMaxValueDateTimeType() { 
11110      return this != null && this.maxValue instanceof DateTimeType;
11111    }
11112
11113    /**
11114     * @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.)
11115     */
11116    public InstantType getMaxValueInstantType() throws FHIRException { 
11117      if (this.maxValue == null)
11118        this.maxValue = new InstantType();
11119      if (!(this.maxValue instanceof InstantType))
11120        throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11121      return (InstantType) this.maxValue;
11122    }
11123
11124    public boolean hasMaxValueInstantType() { 
11125      return this != null && this.maxValue instanceof InstantType;
11126    }
11127
11128    /**
11129     * @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.)
11130     */
11131    public TimeType getMaxValueTimeType() throws FHIRException { 
11132      if (this.maxValue == null)
11133        this.maxValue = new TimeType();
11134      if (!(this.maxValue instanceof TimeType))
11135        throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11136      return (TimeType) this.maxValue;
11137    }
11138
11139    public boolean hasMaxValueTimeType() { 
11140      return this != null && this.maxValue instanceof TimeType;
11141    }
11142
11143    /**
11144     * @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.)
11145     */
11146    public DecimalType getMaxValueDecimalType() throws FHIRException { 
11147      if (this.maxValue == null)
11148        this.maxValue = new DecimalType();
11149      if (!(this.maxValue instanceof DecimalType))
11150        throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11151      return (DecimalType) this.maxValue;
11152    }
11153
11154    public boolean hasMaxValueDecimalType() { 
11155      return this != null && this.maxValue instanceof DecimalType;
11156    }
11157
11158    /**
11159     * @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.)
11160     */
11161    public IntegerType getMaxValueIntegerType() throws FHIRException { 
11162      if (this.maxValue == null)
11163        this.maxValue = new IntegerType();
11164      if (!(this.maxValue instanceof IntegerType))
11165        throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11166      return (IntegerType) this.maxValue;
11167    }
11168
11169    public boolean hasMaxValueIntegerType() { 
11170      return this != null && this.maxValue instanceof IntegerType;
11171    }
11172
11173    /**
11174     * @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.)
11175     */
11176    public Integer64Type getMaxValueInteger64Type() throws FHIRException { 
11177      if (this.maxValue == null)
11178        this.maxValue = new Integer64Type();
11179      if (!(this.maxValue instanceof Integer64Type))
11180        throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11181      return (Integer64Type) this.maxValue;
11182    }
11183
11184    public boolean hasMaxValueInteger64Type() { 
11185      return this != null && this.maxValue instanceof Integer64Type;
11186    }
11187
11188    /**
11189     * @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.)
11190     */
11191    public PositiveIntType getMaxValuePositiveIntType() throws FHIRException { 
11192      if (this.maxValue == null)
11193        this.maxValue = new PositiveIntType();
11194      if (!(this.maxValue instanceof PositiveIntType))
11195        throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11196      return (PositiveIntType) this.maxValue;
11197    }
11198
11199    public boolean hasMaxValuePositiveIntType() { 
11200      return this != null && this.maxValue instanceof PositiveIntType;
11201    }
11202
11203    /**
11204     * @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.)
11205     */
11206    public UnsignedIntType getMaxValueUnsignedIntType() throws FHIRException { 
11207      if (this.maxValue == null)
11208        this.maxValue = new UnsignedIntType();
11209      if (!(this.maxValue instanceof UnsignedIntType))
11210        throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11211      return (UnsignedIntType) this.maxValue;
11212    }
11213
11214    public boolean hasMaxValueUnsignedIntType() { 
11215      return this != null && this.maxValue instanceof UnsignedIntType;
11216    }
11217
11218    /**
11219     * @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.)
11220     */
11221    public Quantity getMaxValueQuantity() throws FHIRException { 
11222      if (this.maxValue == null)
11223        this.maxValue = new Quantity();
11224      if (!(this.maxValue instanceof Quantity))
11225        throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.maxValue.getClass().getName()+" was encountered");
11226      return (Quantity) this.maxValue;
11227    }
11228
11229    public boolean hasMaxValueQuantity() { 
11230      return this != null && this.maxValue instanceof Quantity;
11231    }
11232
11233    public boolean hasMaxValue() { 
11234      return this.maxValue != null && !this.maxValue.isEmpty();
11235    }
11236
11237    /**
11238     * @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.)
11239     */
11240    public ElementDefinition setMaxValue(DataType value) { 
11241      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))
11242        throw new Error("Not the right type for ElementDefinition.maxValue[x]: "+value.fhirType());
11243      this.maxValue = value;
11244      return this;
11245    }
11246
11247    /**
11248     * @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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).). This is the underlying object with id, value and extensions. The accessor "getMaxLength" gives direct access to the value
11249     */
11250    public IntegerType getMaxLengthElement() { 
11251      if (this.maxLength == null)
11252        if (Configuration.errorOnAutoCreate())
11253          throw new Error("Attempt to auto-create ElementDefinition.maxLength");
11254        else if (Configuration.doAutoCreate())
11255          this.maxLength = new IntegerType(); // bb
11256      return this.maxLength;
11257    }
11258
11259    public boolean hasMaxLengthElement() { 
11260      return this.maxLength != null && !this.maxLength.isEmpty();
11261    }
11262
11263    public boolean hasMaxLength() { 
11264      return this.maxLength != null && !this.maxLength.isEmpty();
11265    }
11266
11267    /**
11268     * @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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).). This is the underlying object with id, value and extensions. The accessor "getMaxLength" gives direct access to the value
11269     */
11270    public ElementDefinition setMaxLengthElement(IntegerType value) { 
11271      this.maxLength = value;
11272      return this;
11273    }
11274
11275    /**
11276     * @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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).
11277     */
11278    public int getMaxLength() { 
11279      return this.maxLength == null || this.maxLength.isEmpty() ? 0 : this.maxLength.getValue();
11280    }
11281
11282    /**
11283     * @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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).
11284     */
11285    public ElementDefinition setMaxLength(int value) { 
11286        if (this.maxLength == null)
11287          this.maxLength = new IntegerType();
11288        this.maxLength.setValue(value);
11289      return this;
11290    }
11291
11292    /**
11293     * @return {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
11294     */
11295    public List<IdType> getCondition() { 
11296      if (this.condition == null)
11297        this.condition = new ArrayList<IdType>();
11298      return this.condition;
11299    }
11300
11301    /**
11302     * @return Returns a reference to <code>this</code> for easy method chaining
11303     */
11304    public ElementDefinition setCondition(List<IdType> theCondition) { 
11305      this.condition = theCondition;
11306      return this;
11307    }
11308
11309    public boolean hasCondition() { 
11310      if (this.condition == null)
11311        return false;
11312      for (IdType item : this.condition)
11313        if (!item.isEmpty())
11314          return true;
11315      return false;
11316    }
11317
11318    /**
11319     * @return {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
11320     */
11321    public IdType addConditionElement() {//2 
11322      IdType t = new IdType();
11323      if (this.condition == null)
11324        this.condition = new ArrayList<IdType>();
11325      this.condition.add(t);
11326      return t;
11327    }
11328
11329    /**
11330     * @param value {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
11331     */
11332    public ElementDefinition addCondition(String value) { //1
11333      IdType t = new IdType();
11334      t.setValue(value);
11335      if (this.condition == null)
11336        this.condition = new ArrayList<IdType>();
11337      this.condition.add(t);
11338      return this;
11339    }
11340
11341    /**
11342     * @param value {@link #condition} (A reference to an invariant that may make additional statements about the cardinality or value in the instance.)
11343     */
11344    public boolean hasCondition(String value) { 
11345      if (this.condition == null)
11346        return false;
11347      for (IdType v : this.condition)
11348        if (v.getValue().equals(value)) // id
11349          return true;
11350      return false;
11351    }
11352
11353    /**
11354     * @return {@link #constraint} (Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.)
11355     */
11356    public List<ElementDefinitionConstraintComponent> getConstraint() { 
11357      if (this.constraint == null)
11358        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
11359      return this.constraint;
11360    }
11361
11362    /**
11363     * @return Returns a reference to <code>this</code> for easy method chaining
11364     */
11365    public ElementDefinition setConstraint(List<ElementDefinitionConstraintComponent> theConstraint) { 
11366      this.constraint = theConstraint;
11367      return this;
11368    }
11369
11370    public boolean hasConstraint() { 
11371      if (this.constraint == null)
11372        return false;
11373      for (ElementDefinitionConstraintComponent item : this.constraint)
11374        if (!item.isEmpty())
11375          return true;
11376      return false;
11377    }
11378
11379    public ElementDefinitionConstraintComponent addConstraint() { //3
11380      ElementDefinitionConstraintComponent t = new ElementDefinitionConstraintComponent();
11381      if (this.constraint == null)
11382        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
11383      this.constraint.add(t);
11384      return t;
11385    }
11386
11387    public ElementDefinition addConstraint(ElementDefinitionConstraintComponent t) { //3
11388      if (t == null)
11389        return this;
11390      if (this.constraint == null)
11391        this.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
11392      this.constraint.add(t);
11393      return this;
11394    }
11395
11396    /**
11397     * @return The first repetition of repeating field {@link #constraint}, creating it if it does not already exist {3}
11398     */
11399    public ElementDefinitionConstraintComponent getConstraintFirstRep() { 
11400      if (getConstraint().isEmpty()) {
11401        addConstraint();
11402      }
11403      return getConstraint().get(0);
11404    }
11405
11406    /**
11407     * @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
11408     */
11409    public BooleanType getMustHaveValueElement() { 
11410      if (this.mustHaveValue == null)
11411        if (Configuration.errorOnAutoCreate())
11412          throw new Error("Attempt to auto-create ElementDefinition.mustHaveValue");
11413        else if (Configuration.doAutoCreate())
11414          this.mustHaveValue = new BooleanType(); // bb
11415      return this.mustHaveValue;
11416    }
11417
11418    public boolean hasMustHaveValueElement() { 
11419      return this.mustHaveValue != null && !this.mustHaveValue.isEmpty();
11420    }
11421
11422    public boolean hasMustHaveValue() { 
11423      return this.mustHaveValue != null && !this.mustHaveValue.isEmpty();
11424    }
11425
11426    /**
11427     * @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
11428     */
11429    public ElementDefinition setMustHaveValueElement(BooleanType value) { 
11430      this.mustHaveValue = value;
11431      return this;
11432    }
11433
11434    /**
11435     * @return Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
11436     */
11437    public boolean getMustHaveValue() { 
11438      return this.mustHaveValue == null || this.mustHaveValue.isEmpty() ? false : this.mustHaveValue.getValue();
11439    }
11440
11441    /**
11442     * @param value Specifies for a primitive data type that the value of the data type cannot be replaced by an extension.
11443     */
11444    public ElementDefinition setMustHaveValue(boolean value) { 
11445        if (this.mustHaveValue == null)
11446          this.mustHaveValue = new BooleanType();
11447        this.mustHaveValue.setValue(value);
11448      return this;
11449    }
11450
11451    /**
11452     * @return {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11453     */
11454    public List<CanonicalType> getValueAlternatives() { 
11455      if (this.valueAlternatives == null)
11456        this.valueAlternatives = new ArrayList<CanonicalType>();
11457      return this.valueAlternatives;
11458    }
11459
11460    /**
11461     * @return Returns a reference to <code>this</code> for easy method chaining
11462     */
11463    public ElementDefinition setValueAlternatives(List<CanonicalType> theValueAlternatives) { 
11464      this.valueAlternatives = theValueAlternatives;
11465      return this;
11466    }
11467
11468    public boolean hasValueAlternatives() { 
11469      if (this.valueAlternatives == null)
11470        return false;
11471      for (CanonicalType item : this.valueAlternatives)
11472        if (!item.isEmpty())
11473          return true;
11474      return false;
11475    }
11476
11477    /**
11478     * @return {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11479     */
11480    public CanonicalType addValueAlternativesElement() {//2 
11481      CanonicalType t = new CanonicalType();
11482      if (this.valueAlternatives == null)
11483        this.valueAlternatives = new ArrayList<CanonicalType>();
11484      this.valueAlternatives.add(t);
11485      return t;
11486    }
11487
11488    /**
11489     * @param value {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11490     */
11491    public ElementDefinition addValueAlternatives(String value) { //1
11492      CanonicalType t = new CanonicalType();
11493      t.setValue(value);
11494      if (this.valueAlternatives == null)
11495        this.valueAlternatives = new ArrayList<CanonicalType>();
11496      this.valueAlternatives.add(t);
11497      return this;
11498    }
11499
11500    /**
11501     * @param value {@link #valueAlternatives} (Specifies a list of extensions that can appear in place of a primitive value.)
11502     */
11503    public boolean hasValueAlternatives(String value) { 
11504      if (this.valueAlternatives == null)
11505        return false;
11506      for (CanonicalType v : this.valueAlternatives)
11507        if (v.getValue().equals(value)) // canonical
11508          return true;
11509      return false;
11510    }
11511
11512    /**
11513     * @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
11514     */
11515    public BooleanType getMustSupportElement() { 
11516      if (this.mustSupport == null)
11517        if (Configuration.errorOnAutoCreate())
11518          throw new Error("Attempt to auto-create ElementDefinition.mustSupport");
11519        else if (Configuration.doAutoCreate())
11520          this.mustSupport = new BooleanType(); // bb
11521      return this.mustSupport;
11522    }
11523
11524    public boolean hasMustSupportElement() { 
11525      return this.mustSupport != null && !this.mustSupport.isEmpty();
11526    }
11527
11528    public boolean hasMustSupport() { 
11529      return this.mustSupport != null && !this.mustSupport.isEmpty();
11530    }
11531
11532    /**
11533     * @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
11534     */
11535    public ElementDefinition setMustSupportElement(BooleanType value) { 
11536      this.mustSupport = value;
11537      return this;
11538    }
11539
11540    /**
11541     * @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.
11542     */
11543    public boolean getMustSupport() { 
11544      return this.mustSupport == null || this.mustSupport.isEmpty() ? false : this.mustSupport.getValue();
11545    }
11546
11547    /**
11548     * @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.
11549     */
11550    public ElementDefinition setMustSupport(boolean value) { 
11551        if (this.mustSupport == null)
11552          this.mustSupport = new BooleanType();
11553        this.mustSupport.setValue(value);
11554      return this;
11555    }
11556
11557    /**
11558     * @return {@link #obligation} (Documents obligations that apply to applications implementing this element. The obligations relate to application behaviour, not the content of the element itself in the resource instances that contain this element.)
11559     */
11560    public List<ElementDefinitionObligationComponent> getObligation() { 
11561      if (this.obligation == null)
11562        this.obligation = new ArrayList<ElementDefinitionObligationComponent>();
11563      return this.obligation;
11564    }
11565
11566    /**
11567     * @return Returns a reference to <code>this</code> for easy method chaining
11568     */
11569    public ElementDefinition setObligation(List<ElementDefinitionObligationComponent> theObligation) { 
11570      this.obligation = theObligation;
11571      return this;
11572    }
11573
11574    public boolean hasObligation() { 
11575      if (this.obligation == null)
11576        return false;
11577      for (ElementDefinitionObligationComponent item : this.obligation)
11578        if (!item.isEmpty())
11579          return true;
11580      return false;
11581    }
11582
11583    public ElementDefinitionObligationComponent addObligation() { //3
11584      ElementDefinitionObligationComponent t = new ElementDefinitionObligationComponent();
11585      if (this.obligation == null)
11586        this.obligation = new ArrayList<ElementDefinitionObligationComponent>();
11587      this.obligation.add(t);
11588      return t;
11589    }
11590
11591    public ElementDefinition addObligation(ElementDefinitionObligationComponent t) { //3
11592      if (t == null)
11593        return this;
11594      if (this.obligation == null)
11595        this.obligation = new ArrayList<ElementDefinitionObligationComponent>();
11596      this.obligation.add(t);
11597      return this;
11598    }
11599
11600    /**
11601     * @return The first repetition of repeating field {@link #obligation}, creating it if it does not already exist {3}
11602     */
11603    public ElementDefinitionObligationComponent getObligationFirstRep() { 
11604      if (getObligation().isEmpty()) {
11605        addObligation();
11606      }
11607      return getObligation().get(0);
11608    }
11609
11610    /**
11611     * @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.). This is the underlying object with id, value and extensions. The accessor "getIsModifier" gives direct access to the value
11612     */
11613    public BooleanType getIsModifierElement() { 
11614      if (this.isModifier == null)
11615        if (Configuration.errorOnAutoCreate())
11616          throw new Error("Attempt to auto-create ElementDefinition.isModifier");
11617        else if (Configuration.doAutoCreate())
11618          this.isModifier = new BooleanType(); // bb
11619      return this.isModifier;
11620    }
11621
11622    public boolean hasIsModifierElement() { 
11623      return this.isModifier != null && !this.isModifier.isEmpty();
11624    }
11625
11626    public boolean hasIsModifier() { 
11627      return this.isModifier != null && !this.isModifier.isEmpty();
11628    }
11629
11630    /**
11631     * @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.). This is the underlying object with id, value and extensions. The accessor "getIsModifier" gives direct access to the value
11632     */
11633    public ElementDefinition setIsModifierElement(BooleanType value) { 
11634      this.isModifier = value;
11635      return this;
11636    }
11637
11638    /**
11639     * @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.
11640     */
11641    public boolean getIsModifier() { 
11642      return this.isModifier == null || this.isModifier.isEmpty() ? false : this.isModifier.getValue();
11643    }
11644
11645    /**
11646     * @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.
11647     */
11648    public ElementDefinition setIsModifier(boolean value) { 
11649        if (this.isModifier == null)
11650          this.isModifier = new BooleanType();
11651        this.isModifier.setValue(value);
11652      return this;
11653    }
11654
11655    /**
11656     * @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
11657     */
11658    public StringType getIsModifierReasonElement() { 
11659      if (this.isModifierReason == null)
11660        if (Configuration.errorOnAutoCreate())
11661          throw new Error("Attempt to auto-create ElementDefinition.isModifierReason");
11662        else if (Configuration.doAutoCreate())
11663          this.isModifierReason = new StringType(); // bb
11664      return this.isModifierReason;
11665    }
11666
11667    public boolean hasIsModifierReasonElement() { 
11668      return this.isModifierReason != null && !this.isModifierReason.isEmpty();
11669    }
11670
11671    public boolean hasIsModifierReason() { 
11672      return this.isModifierReason != null && !this.isModifierReason.isEmpty();
11673    }
11674
11675    /**
11676     * @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
11677     */
11678    public ElementDefinition setIsModifierReasonElement(StringType value) { 
11679      this.isModifierReason = value;
11680      return this;
11681    }
11682
11683    /**
11684     * @return Explains how that element affects the interpretation of the resource or element that contains it.
11685     */
11686    public String getIsModifierReason() { 
11687      return this.isModifierReason == null ? null : this.isModifierReason.getValue();
11688    }
11689
11690    /**
11691     * @param value Explains how that element affects the interpretation of the resource or element that contains it.
11692     */
11693    public ElementDefinition setIsModifierReason(String value) { 
11694      if (Utilities.noString(value))
11695        this.isModifierReason = null;
11696      else {
11697        if (this.isModifierReason == null)
11698          this.isModifierReason = new StringType();
11699        this.isModifierReason.setValue(value);
11700      }
11701      return this;
11702    }
11703
11704    /**
11705     * @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
11706     */
11707    public BooleanType getIsSummaryElement() { 
11708      if (this.isSummary == null)
11709        if (Configuration.errorOnAutoCreate())
11710          throw new Error("Attempt to auto-create ElementDefinition.isSummary");
11711        else if (Configuration.doAutoCreate())
11712          this.isSummary = new BooleanType(); // bb
11713      return this.isSummary;
11714    }
11715
11716    public boolean hasIsSummaryElement() { 
11717      return this.isSummary != null && !this.isSummary.isEmpty();
11718    }
11719
11720    public boolean hasIsSummary() { 
11721      return this.isSummary != null && !this.isSummary.isEmpty();
11722    }
11723
11724    /**
11725     * @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
11726     */
11727    public ElementDefinition setIsSummaryElement(BooleanType value) { 
11728      this.isSummary = value;
11729      return this;
11730    }
11731
11732    /**
11733     * @return Whether the element should be included if a client requests a search with the parameter _summary=true.
11734     */
11735    public boolean getIsSummary() { 
11736      return this.isSummary == null || this.isSummary.isEmpty() ? false : this.isSummary.getValue();
11737    }
11738
11739    /**
11740     * @param value Whether the element should be included if a client requests a search with the parameter _summary=true.
11741     */
11742    public ElementDefinition setIsSummary(boolean value) { 
11743        if (this.isSummary == null)
11744          this.isSummary = new BooleanType();
11745        this.isSummary.setValue(value);
11746      return this;
11747    }
11748
11749    /**
11750     * @return {@link #binding} (Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).)
11751     */
11752    public ElementDefinitionBindingComponent getBinding() { 
11753      if (this.binding == null)
11754        if (Configuration.errorOnAutoCreate())
11755          throw new Error("Attempt to auto-create ElementDefinition.binding");
11756        else if (Configuration.doAutoCreate())
11757          this.binding = new ElementDefinitionBindingComponent(); // cc
11758      return this.binding;
11759    }
11760
11761    public boolean hasBinding() { 
11762      return this.binding != null && !this.binding.isEmpty();
11763    }
11764
11765    /**
11766     * @param value {@link #binding} (Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).)
11767     */
11768    public ElementDefinition setBinding(ElementDefinitionBindingComponent value) { 
11769      this.binding = value;
11770      return this;
11771    }
11772
11773    /**
11774     * @return {@link #mapping} (Identifies a concept from an external specification that roughly corresponds to this element.)
11775     */
11776    public List<ElementDefinitionMappingComponent> getMapping() { 
11777      if (this.mapping == null)
11778        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11779      return this.mapping;
11780    }
11781
11782    /**
11783     * @return Returns a reference to <code>this</code> for easy method chaining
11784     */
11785    public ElementDefinition setMapping(List<ElementDefinitionMappingComponent> theMapping) { 
11786      this.mapping = theMapping;
11787      return this;
11788    }
11789
11790    public boolean hasMapping() { 
11791      if (this.mapping == null)
11792        return false;
11793      for (ElementDefinitionMappingComponent item : this.mapping)
11794        if (!item.isEmpty())
11795          return true;
11796      return false;
11797    }
11798
11799    public ElementDefinitionMappingComponent addMapping() { //3
11800      ElementDefinitionMappingComponent t = new ElementDefinitionMappingComponent();
11801      if (this.mapping == null)
11802        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11803      this.mapping.add(t);
11804      return t;
11805    }
11806
11807    public ElementDefinition addMapping(ElementDefinitionMappingComponent t) { //3
11808      if (t == null)
11809        return this;
11810      if (this.mapping == null)
11811        this.mapping = new ArrayList<ElementDefinitionMappingComponent>();
11812      this.mapping.add(t);
11813      return this;
11814    }
11815
11816    /**
11817     * @return The first repetition of repeating field {@link #mapping}, creating it if it does not already exist {3}
11818     */
11819    public ElementDefinitionMappingComponent getMappingFirstRep() { 
11820      if (getMapping().isEmpty()) {
11821        addMapping();
11822      }
11823      return getMapping().get(0);
11824    }
11825
11826      protected void listChildren(List<Property> children) {
11827        super.listChildren(children);
11828        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));
11829        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));
11830        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));
11831        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));
11832        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));
11833        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));
11834        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));
11835        children.add(new Property("short", "string", "A concise description of what this element means (e.g. for use in autogenerated summaries).", 0, 1, short_));
11836        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));
11837        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));
11838        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));
11839        children.add(new Property("alias", "string", "Identifies additional names by which this element might also be known.", 0, java.lang.Integer.MAX_VALUE, alias));
11840        children.add(new Property("min", "unsignedInt", "The minimum number of times this element SHALL appear in the instance.", 0, 1, min));
11841        children.add(new Property("max", "string", "The maximum number of times this element is permitted to appear in the instance.", 0, 1, max));
11842        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 - i.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));
11843        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));
11844        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));
11845        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));
11846        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));
11847        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));
11848        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));
11849        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));
11850        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));
11851        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));
11852        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));
11853        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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).", 0, 1, maxLength));
11854        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));
11855        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));
11856        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));
11857        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));
11858        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));
11859        children.add(new Property("obligation", "", "Documents obligations that apply to applications implementing this element. The obligations relate to application behaviour, not the content of the element itself in the resource instances that contain this element.", 0, java.lang.Integer.MAX_VALUE, obligation));
11860        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.", 0, 1, isModifier));
11861        children.add(new Property("isModifierReason", "string", "Explains how that element affects the interpretation of the resource or element that contains it.", 0, 1, isModifierReason));
11862        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));
11863        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));
11864        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));
11865      }
11866
11867      @Override
11868      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
11869        switch (_hash) {
11870        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);
11871        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);
11872        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);
11873        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);
11874        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);
11875        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);
11876        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);
11877        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_);
11878        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);
11879        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);
11880        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);
11881        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);
11882        case 108114: /*min*/  return new Property("min", "unsignedInt", "The minimum number of times this element SHALL appear in the instance.", 0, 1, min);
11883        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);
11884        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 - i.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);
11885        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);
11886        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);
11887        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);
11888        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);
11889        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);
11890        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);
11891        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);
11892        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);
11893        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);
11894        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);
11895        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);
11896        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);
11897        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);
11898        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);
11899        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);
11900        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);
11901        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);
11902        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);
11903        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);
11904        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);
11905        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);
11906        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);
11907        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);
11908        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);
11909        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);
11910        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);
11911        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);
11912        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);
11913        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);
11914        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);
11915        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);
11916        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);
11917        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);
11918        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);
11919        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);
11920        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);
11921        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);
11922        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);
11923        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);
11924        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);
11925        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);
11926        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);
11927        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);
11928        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);
11929        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);
11930        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);
11931        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);
11932        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);
11933        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);
11934        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);
11935        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);
11936        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);
11937        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);
11938        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);
11939        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);
11940        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);
11941        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);
11942        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);
11943        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);
11944        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);
11945        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);
11946        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);
11947        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);
11948        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);
11949        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);
11950        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);
11951        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);
11952        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);
11953        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);
11954        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);
11955        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);
11956        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);
11957        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);
11958        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);
11959        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);
11960        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);
11961        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);
11962        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);
11963        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);
11964        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);
11965        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);
11966        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);
11967        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);
11968        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);
11969        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);
11970        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);
11971        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);
11972        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);
11973        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);
11974        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);
11975        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);
11976        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);
11977        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);
11978        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);
11979        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);
11980        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);
11981        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);
11982        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);
11983        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);
11984        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);
11985        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);
11986        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);
11987        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);
11988        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);
11989        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);
11990        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);
11991        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);
11992        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);
11993        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);
11994        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);
11995        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);
11996        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);
11997        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);
11998        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);
11999        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);
12000        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);
12001        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);
12002        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);
12003        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);
12004        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);
12005        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);
12006        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);
12007        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);
12008        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);
12009        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);
12010        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);
12011        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);
12012        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);
12013        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);
12014        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);
12015        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);
12016        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);
12017        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);
12018        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);
12019        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);
12020        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);
12021        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);
12022        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);
12023        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);
12024        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);
12025        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);
12026        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);
12027        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);
12028        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);
12029        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);
12030        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);
12031        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);
12032        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);
12033        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);
12034        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);
12035        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);
12036        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);
12037        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);
12038        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);
12039        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);
12040        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);
12041        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);
12042        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);
12043        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);
12044        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);
12045        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);
12046        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);
12047        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);
12048        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);
12049        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);
12050        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);
12051        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);
12052        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);
12053        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);
12054        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);
12055        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);
12056        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);
12057        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);
12058        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);
12059        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);
12060        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);
12061        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);
12062        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);
12063        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);
12064        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);
12065        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);
12066        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);
12067        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);
12068        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);
12069        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);
12070        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);
12071        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);
12072        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);
12073        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);
12074        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);
12075        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);
12076        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);
12077        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);
12078        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);
12079        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);
12080        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);
12081        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);
12082        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 [Datatype characteristics](extension-structuredefinition-type-characteristics.html)).", 0, 1, maxLength);
12083        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);
12084        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);
12085        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);
12086        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);
12087        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);
12088        case -389535362: /*obligation*/  return new Property("obligation", "", "Documents obligations that apply to applications implementing this element. The obligations relate to application behaviour, not the content of the element itself in the resource instances that contain this element.", 0, java.lang.Integer.MAX_VALUE, obligation);
12089        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.", 0, 1, isModifier);
12090        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);
12091        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);
12092        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);
12093        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);
12094        default: return super.getNamedProperty(_hash, _name, _checkValid);
12095        }
12096
12097      }
12098
12099      @Override
12100      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
12101        switch (hash) {
12102        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
12103        case -671065907: /*representation*/ return this.representation == null ? new Base[0] : this.representation.toArray(new Base[this.representation.size()]); // Enumeration<PropertyRepresentation>
12104        case -825289923: /*sliceName*/ return this.sliceName == null ? new Base[0] : new Base[] {this.sliceName}; // StringType
12105        case 333040519: /*sliceIsConstraining*/ return this.sliceIsConstraining == null ? new Base[0] : new Base[] {this.sliceIsConstraining}; // BooleanType
12106        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
12107        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // Coding
12108        case -2119287345: /*slicing*/ return this.slicing == null ? new Base[0] : new Base[] {this.slicing}; // ElementDefinitionSlicingComponent
12109        case 109413500: /*short*/ return this.short_ == null ? new Base[0] : new Base[] {this.short_}; // StringType
12110        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : new Base[] {this.definition}; // MarkdownType
12111        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
12112        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // MarkdownType
12113        case 92902992: /*alias*/ return this.alias == null ? new Base[0] : this.alias.toArray(new Base[this.alias.size()]); // StringType
12114        case 108114: /*min*/ return this.min == null ? new Base[0] : new Base[] {this.min}; // UnsignedIntType
12115        case 107876: /*max*/ return this.max == null ? new Base[0] : new Base[] {this.max}; // StringType
12116        case 3016401: /*base*/ return this.base == null ? new Base[0] : new Base[] {this.base}; // ElementDefinitionBaseComponent
12117        case 1193747154: /*contentReference*/ return this.contentReference == null ? new Base[0] : new Base[] {this.contentReference}; // UriType
12118        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // TypeRefComponent
12119        case -659125328: /*defaultValue*/ return this.defaultValue == null ? new Base[0] : new Base[] {this.defaultValue}; // DataType
12120        case 1857257103: /*meaningWhenMissing*/ return this.meaningWhenMissing == null ? new Base[0] : new Base[] {this.meaningWhenMissing}; // MarkdownType
12121        case 1828196047: /*orderMeaning*/ return this.orderMeaning == null ? new Base[0] : new Base[] {this.orderMeaning}; // StringType
12122        case 97445748: /*fixed*/ return this.fixed == null ? new Base[0] : new Base[] {this.fixed}; // DataType
12123        case -791090288: /*pattern*/ return this.pattern == null ? new Base[0] : new Base[] {this.pattern}; // DataType
12124        case -1322970774: /*example*/ return this.example == null ? new Base[0] : this.example.toArray(new Base[this.example.size()]); // ElementDefinitionExampleComponent
12125        case -1376969153: /*minValue*/ return this.minValue == null ? new Base[0] : new Base[] {this.minValue}; // DataType
12126        case 399227501: /*maxValue*/ return this.maxValue == null ? new Base[0] : new Base[] {this.maxValue}; // DataType
12127        case -791400086: /*maxLength*/ return this.maxLength == null ? new Base[0] : new Base[] {this.maxLength}; // IntegerType
12128        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // IdType
12129        case -190376483: /*constraint*/ return this.constraint == null ? new Base[0] : this.constraint.toArray(new Base[this.constraint.size()]); // ElementDefinitionConstraintComponent
12130        case -923694880: /*mustHaveValue*/ return this.mustHaveValue == null ? new Base[0] : new Base[] {this.mustHaveValue}; // BooleanType
12131        case -2124672393: /*valueAlternatives*/ return this.valueAlternatives == null ? new Base[0] : this.valueAlternatives.toArray(new Base[this.valueAlternatives.size()]); // CanonicalType
12132        case -1402857082: /*mustSupport*/ return this.mustSupport == null ? new Base[0] : new Base[] {this.mustSupport}; // BooleanType
12133        case -389535362: /*obligation*/ return this.obligation == null ? new Base[0] : this.obligation.toArray(new Base[this.obligation.size()]); // ElementDefinitionObligationComponent
12134        case -1408783839: /*isModifier*/ return this.isModifier == null ? new Base[0] : new Base[] {this.isModifier}; // BooleanType
12135        case -1854387259: /*isModifierReason*/ return this.isModifierReason == null ? new Base[0] : new Base[] {this.isModifierReason}; // StringType
12136        case 1857548060: /*isSummary*/ return this.isSummary == null ? new Base[0] : new Base[] {this.isSummary}; // BooleanType
12137        case -108220795: /*binding*/ return this.binding == null ? new Base[0] : new Base[] {this.binding}; // ElementDefinitionBindingComponent
12138        case 837556430: /*mapping*/ return this.mapping == null ? new Base[0] : this.mapping.toArray(new Base[this.mapping.size()]); // ElementDefinitionMappingComponent
12139        default: return super.getProperty(hash, name, checkValid);
12140        }
12141
12142      }
12143
12144      @Override
12145      public Base setProperty(int hash, String name, Base value) throws FHIRException {
12146        switch (hash) {
12147        case 3433509: // path
12148          this.path = TypeConvertor.castToString(value); // StringType
12149          return value;
12150        case -671065907: // representation
12151          value = new PropertyRepresentationEnumFactory().fromType(TypeConvertor.castToCode(value));
12152          this.getRepresentation().add((Enumeration) value); // Enumeration<PropertyRepresentation>
12153          return value;
12154        case -825289923: // sliceName
12155          this.sliceName = TypeConvertor.castToString(value); // StringType
12156          return value;
12157        case 333040519: // sliceIsConstraining
12158          this.sliceIsConstraining = TypeConvertor.castToBoolean(value); // BooleanType
12159          return value;
12160        case 102727412: // label
12161          this.label = TypeConvertor.castToString(value); // StringType
12162          return value;
12163        case 3059181: // code
12164          this.getCode().add(TypeConvertor.castToCoding(value)); // Coding
12165          return value;
12166        case -2119287345: // slicing
12167          this.slicing = (ElementDefinitionSlicingComponent) value; // ElementDefinitionSlicingComponent
12168          return value;
12169        case 109413500: // short
12170          this.short_ = TypeConvertor.castToString(value); // StringType
12171          return value;
12172        case -1014418093: // definition
12173          this.definition = TypeConvertor.castToMarkdown(value); // MarkdownType
12174          return value;
12175        case 950398559: // comment
12176          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
12177          return value;
12178        case -1619874672: // requirements
12179          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
12180          return value;
12181        case 92902992: // alias
12182          this.getAlias().add(TypeConvertor.castToString(value)); // StringType
12183          return value;
12184        case 108114: // min
12185          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
12186          return value;
12187        case 107876: // max
12188          this.max = TypeConvertor.castToString(value); // StringType
12189          return value;
12190        case 3016401: // base
12191          this.base = (ElementDefinitionBaseComponent) value; // ElementDefinitionBaseComponent
12192          return value;
12193        case 1193747154: // contentReference
12194          this.contentReference = TypeConvertor.castToUri(value); // UriType
12195          return value;
12196        case 3575610: // type
12197          this.getType().add((TypeRefComponent) value); // TypeRefComponent
12198          return value;
12199        case -659125328: // defaultValue
12200          this.defaultValue = TypeConvertor.castToType(value); // DataType
12201          return value;
12202        case 1857257103: // meaningWhenMissing
12203          this.meaningWhenMissing = TypeConvertor.castToMarkdown(value); // MarkdownType
12204          return value;
12205        case 1828196047: // orderMeaning
12206          this.orderMeaning = TypeConvertor.castToString(value); // StringType
12207          return value;
12208        case 97445748: // fixed
12209          this.fixed = TypeConvertor.castToType(value); // DataType
12210          return value;
12211        case -791090288: // pattern
12212          this.pattern = TypeConvertor.castToType(value); // DataType
12213          return value;
12214        case -1322970774: // example
12215          this.getExample().add((ElementDefinitionExampleComponent) value); // ElementDefinitionExampleComponent
12216          return value;
12217        case -1376969153: // minValue
12218          this.minValue = TypeConvertor.castToType(value); // DataType
12219          return value;
12220        case 399227501: // maxValue
12221          this.maxValue = TypeConvertor.castToType(value); // DataType
12222          return value;
12223        case -791400086: // maxLength
12224          this.maxLength = TypeConvertor.castToInteger(value); // IntegerType
12225          return value;
12226        case -861311717: // condition
12227          this.getCondition().add(TypeConvertor.castToId(value)); // IdType
12228          return value;
12229        case -190376483: // constraint
12230          this.getConstraint().add((ElementDefinitionConstraintComponent) value); // ElementDefinitionConstraintComponent
12231          return value;
12232        case -923694880: // mustHaveValue
12233          this.mustHaveValue = TypeConvertor.castToBoolean(value); // BooleanType
12234          return value;
12235        case -2124672393: // valueAlternatives
12236          this.getValueAlternatives().add(TypeConvertor.castToCanonical(value)); // CanonicalType
12237          return value;
12238        case -1402857082: // mustSupport
12239          this.mustSupport = TypeConvertor.castToBoolean(value); // BooleanType
12240          return value;
12241        case -389535362: // obligation
12242          this.getObligation().add((ElementDefinitionObligationComponent) value); // ElementDefinitionObligationComponent
12243          return value;
12244        case -1408783839: // isModifier
12245          this.isModifier = TypeConvertor.castToBoolean(value); // BooleanType
12246          return value;
12247        case -1854387259: // isModifierReason
12248          this.isModifierReason = TypeConvertor.castToString(value); // StringType
12249          return value;
12250        case 1857548060: // isSummary
12251          this.isSummary = TypeConvertor.castToBoolean(value); // BooleanType
12252          return value;
12253        case -108220795: // binding
12254          this.binding = (ElementDefinitionBindingComponent) value; // ElementDefinitionBindingComponent
12255          return value;
12256        case 837556430: // mapping
12257          this.getMapping().add((ElementDefinitionMappingComponent) value); // ElementDefinitionMappingComponent
12258          return value;
12259        default: return super.setProperty(hash, name, value);
12260        }
12261
12262      }
12263
12264      @Override
12265      public Base setProperty(String name, Base value) throws FHIRException {
12266        if (name.equals("path")) {
12267          this.path = TypeConvertor.castToString(value); // StringType
12268        } else if (name.equals("representation")) {
12269          value = new PropertyRepresentationEnumFactory().fromType(TypeConvertor.castToCode(value));
12270          this.getRepresentation().add((Enumeration) value);
12271        } else if (name.equals("sliceName")) {
12272          this.sliceName = TypeConvertor.castToString(value); // StringType
12273        } else if (name.equals("sliceIsConstraining")) {
12274          this.sliceIsConstraining = TypeConvertor.castToBoolean(value); // BooleanType
12275        } else if (name.equals("label")) {
12276          this.label = TypeConvertor.castToString(value); // StringType
12277        } else if (name.equals("code")) {
12278          this.getCode().add(TypeConvertor.castToCoding(value));
12279        } else if (name.equals("slicing")) {
12280          this.slicing = (ElementDefinitionSlicingComponent) value; // ElementDefinitionSlicingComponent
12281        } else if (name.equals("short")) {
12282          this.short_ = TypeConvertor.castToString(value); // StringType
12283        } else if (name.equals("definition")) {
12284          this.definition = TypeConvertor.castToMarkdown(value); // MarkdownType
12285        } else if (name.equals("comment")) {
12286          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
12287        } else if (name.equals("requirements")) {
12288          this.requirements = TypeConvertor.castToMarkdown(value); // MarkdownType
12289        } else if (name.equals("alias")) {
12290          this.getAlias().add(TypeConvertor.castToString(value));
12291        } else if (name.equals("min")) {
12292          this.min = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
12293        } else if (name.equals("max")) {
12294          this.max = TypeConvertor.castToString(value); // StringType
12295        } else if (name.equals("base")) {
12296          this.base = (ElementDefinitionBaseComponent) value; // ElementDefinitionBaseComponent
12297        } else if (name.equals("contentReference")) {
12298          this.contentReference = TypeConvertor.castToUri(value); // UriType
12299        } else if (name.equals("type")) {
12300          this.getType().add((TypeRefComponent) value);
12301        } else if (name.equals("defaultValue[x]")) {
12302          this.defaultValue = TypeConvertor.castToType(value); // DataType
12303        } else if (name.equals("meaningWhenMissing")) {
12304          this.meaningWhenMissing = TypeConvertor.castToMarkdown(value); // MarkdownType
12305        } else if (name.equals("orderMeaning")) {
12306          this.orderMeaning = TypeConvertor.castToString(value); // StringType
12307        } else if (name.equals("fixed[x]")) {
12308          this.fixed = TypeConvertor.castToType(value); // DataType
12309        } else if (name.equals("pattern[x]")) {
12310          this.pattern = TypeConvertor.castToType(value); // DataType
12311        } else if (name.equals("example")) {
12312          this.getExample().add((ElementDefinitionExampleComponent) value);
12313        } else if (name.equals("minValue[x]")) {
12314          this.minValue = TypeConvertor.castToType(value); // DataType
12315        } else if (name.equals("maxValue[x]")) {
12316          this.maxValue = TypeConvertor.castToType(value); // DataType
12317        } else if (name.equals("maxLength")) {
12318          this.maxLength = TypeConvertor.castToInteger(value); // IntegerType
12319        } else if (name.equals("condition")) {
12320          this.getCondition().add(TypeConvertor.castToId(value));
12321        } else if (name.equals("constraint")) {
12322          this.getConstraint().add((ElementDefinitionConstraintComponent) value);
12323        } else if (name.equals("mustHaveValue")) {
12324          this.mustHaveValue = TypeConvertor.castToBoolean(value); // BooleanType
12325        } else if (name.equals("valueAlternatives")) {
12326          this.getValueAlternatives().add(TypeConvertor.castToCanonical(value));
12327        } else if (name.equals("mustSupport")) {
12328          this.mustSupport = TypeConvertor.castToBoolean(value); // BooleanType
12329        } else if (name.equals("obligation")) {
12330          this.getObligation().add((ElementDefinitionObligationComponent) value);
12331        } else if (name.equals("isModifier")) {
12332          this.isModifier = TypeConvertor.castToBoolean(value); // BooleanType
12333        } else if (name.equals("isModifierReason")) {
12334          this.isModifierReason = TypeConvertor.castToString(value); // StringType
12335        } else if (name.equals("isSummary")) {
12336          this.isSummary = TypeConvertor.castToBoolean(value); // BooleanType
12337        } else if (name.equals("binding")) {
12338          this.binding = (ElementDefinitionBindingComponent) value; // ElementDefinitionBindingComponent
12339        } else if (name.equals("mapping")) {
12340          this.getMapping().add((ElementDefinitionMappingComponent) value);
12341        } else
12342          return super.setProperty(name, value);
12343        return value;
12344      }
12345
12346      @Override
12347      public Base makeProperty(int hash, String name) throws FHIRException {
12348        switch (hash) {
12349        case 3433509:  return getPathElement();
12350        case -671065907:  return addRepresentationElement();
12351        case -825289923:  return getSliceNameElement();
12352        case 333040519:  return getSliceIsConstrainingElement();
12353        case 102727412:  return getLabelElement();
12354        case 3059181:  return addCode(); 
12355        case -2119287345:  return getSlicing();
12356        case 109413500:  return getShortElement();
12357        case -1014418093:  return getDefinitionElement();
12358        case 950398559:  return getCommentElement();
12359        case -1619874672:  return getRequirementsElement();
12360        case 92902992:  return addAliasElement();
12361        case 108114:  return getMinElement();
12362        case 107876:  return getMaxElement();
12363        case 3016401:  return getBase();
12364        case 1193747154:  return getContentReferenceElement();
12365        case 3575610:  return addType(); 
12366        case 587922128:  return getDefaultValue();
12367        case -659125328:  return getDefaultValue();
12368        case 1857257103:  return getMeaningWhenMissingElement();
12369        case 1828196047:  return getOrderMeaningElement();
12370        case -391522164:  return getFixed();
12371        case 97445748:  return getFixed();
12372        case -885125392:  return getPattern();
12373        case -791090288:  return getPattern();
12374        case -1322970774:  return addExample(); 
12375        case -55301663:  return getMinValue();
12376        case -1376969153:  return getMinValue();
12377        case 622130931:  return getMaxValue();
12378        case 399227501:  return getMaxValue();
12379        case -791400086:  return getMaxLengthElement();
12380        case -861311717:  return addConditionElement();
12381        case -190376483:  return addConstraint(); 
12382        case -923694880:  return getMustHaveValueElement();
12383        case -2124672393:  return addValueAlternativesElement();
12384        case -1402857082:  return getMustSupportElement();
12385        case -389535362:  return addObligation(); 
12386        case -1408783839:  return getIsModifierElement();
12387        case -1854387259:  return getIsModifierReasonElement();
12388        case 1857548060:  return getIsSummaryElement();
12389        case -108220795:  return getBinding();
12390        case 837556430:  return addMapping(); 
12391        default: return super.makeProperty(hash, name);
12392        }
12393
12394      }
12395
12396      @Override
12397      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
12398        switch (hash) {
12399        case 3433509: /*path*/ return new String[] {"string"};
12400        case -671065907: /*representation*/ return new String[] {"code"};
12401        case -825289923: /*sliceName*/ return new String[] {"string"};
12402        case 333040519: /*sliceIsConstraining*/ return new String[] {"boolean"};
12403        case 102727412: /*label*/ return new String[] {"string"};
12404        case 3059181: /*code*/ return new String[] {"Coding"};
12405        case -2119287345: /*slicing*/ return new String[] {};
12406        case 109413500: /*short*/ return new String[] {"string"};
12407        case -1014418093: /*definition*/ return new String[] {"markdown"};
12408        case 950398559: /*comment*/ return new String[] {"markdown"};
12409        case -1619874672: /*requirements*/ return new String[] {"markdown"};
12410        case 92902992: /*alias*/ return new String[] {"string"};
12411        case 108114: /*min*/ return new String[] {"unsignedInt"};
12412        case 107876: /*max*/ return new String[] {"string"};
12413        case 3016401: /*base*/ return new String[] {};
12414        case 1193747154: /*contentReference*/ return new String[] {"uri"};
12415        case 3575610: /*type*/ return new String[] {};
12416        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"};
12417        case 1857257103: /*meaningWhenMissing*/ return new String[] {"markdown"};
12418        case 1828196047: /*orderMeaning*/ return new String[] {"string"};
12419        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"};
12420        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"};
12421        case -1322970774: /*example*/ return new String[] {};
12422        case -1376969153: /*minValue*/ return new String[] {"date", "dateTime", "instant", "time", "decimal", "integer", "integer64", "positiveInt", "unsignedInt", "Quantity"};
12423        case 399227501: /*maxValue*/ return new String[] {"date", "dateTime", "instant", "time", "decimal", "integer", "integer64", "positiveInt", "unsignedInt", "Quantity"};
12424        case -791400086: /*maxLength*/ return new String[] {"integer"};
12425        case -861311717: /*condition*/ return new String[] {"id"};
12426        case -190376483: /*constraint*/ return new String[] {};
12427        case -923694880: /*mustHaveValue*/ return new String[] {"boolean"};
12428        case -2124672393: /*valueAlternatives*/ return new String[] {"canonical"};
12429        case -1402857082: /*mustSupport*/ return new String[] {"boolean"};
12430        case -389535362: /*obligation*/ return new String[] {};
12431        case -1408783839: /*isModifier*/ return new String[] {"boolean"};
12432        case -1854387259: /*isModifierReason*/ return new String[] {"string"};
12433        case 1857548060: /*isSummary*/ return new String[] {"boolean"};
12434        case -108220795: /*binding*/ return new String[] {};
12435        case 837556430: /*mapping*/ return new String[] {};
12436        default: return super.getTypesForProperty(hash, name);
12437        }
12438
12439      }
12440
12441      @Override
12442      public Base addChild(String name) throws FHIRException {
12443        if (name.equals("path")) {
12444          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.path");
12445        }
12446        else if (name.equals("representation")) {
12447          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.representation");
12448        }
12449        else if (name.equals("sliceName")) {
12450          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.sliceName");
12451        }
12452        else if (name.equals("sliceIsConstraining")) {
12453          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.sliceIsConstraining");
12454        }
12455        else if (name.equals("label")) {
12456          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.label");
12457        }
12458        else if (name.equals("code")) {
12459          return addCode();
12460        }
12461        else if (name.equals("slicing")) {
12462          this.slicing = new ElementDefinitionSlicingComponent();
12463          return this.slicing;
12464        }
12465        else if (name.equals("short")) {
12466          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.short");
12467        }
12468        else if (name.equals("definition")) {
12469          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.definition");
12470        }
12471        else if (name.equals("comment")) {
12472          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.comment");
12473        }
12474        else if (name.equals("requirements")) {
12475          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.requirements");
12476        }
12477        else if (name.equals("alias")) {
12478          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.alias");
12479        }
12480        else if (name.equals("min")) {
12481          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.min");
12482        }
12483        else if (name.equals("max")) {
12484          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.max");
12485        }
12486        else if (name.equals("base")) {
12487          this.base = new ElementDefinitionBaseComponent();
12488          return this.base;
12489        }
12490        else if (name.equals("contentReference")) {
12491          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.contentReference");
12492        }
12493        else if (name.equals("type")) {
12494          return addType();
12495        }
12496        else if (name.equals("defaultValueBase64Binary")) {
12497          this.defaultValue = new Base64BinaryType();
12498          return this.defaultValue;
12499        }
12500        else if (name.equals("defaultValueBoolean")) {
12501          this.defaultValue = new BooleanType();
12502          return this.defaultValue;
12503        }
12504        else if (name.equals("defaultValueCanonical")) {
12505          this.defaultValue = new CanonicalType();
12506          return this.defaultValue;
12507        }
12508        else if (name.equals("defaultValueCode")) {
12509          this.defaultValue = new CodeType();
12510          return this.defaultValue;
12511        }
12512        else if (name.equals("defaultValueDate")) {
12513          this.defaultValue = new DateType();
12514          return this.defaultValue;
12515        }
12516        else if (name.equals("defaultValueDateTime")) {
12517          this.defaultValue = new DateTimeType();
12518          return this.defaultValue;
12519        }
12520        else if (name.equals("defaultValueDecimal")) {
12521          this.defaultValue = new DecimalType();
12522          return this.defaultValue;
12523        }
12524        else if (name.equals("defaultValueId")) {
12525          this.defaultValue = new IdType();
12526          return this.defaultValue;
12527        }
12528        else if (name.equals("defaultValueInstant")) {
12529          this.defaultValue = new InstantType();
12530          return this.defaultValue;
12531        }
12532        else if (name.equals("defaultValueInteger")) {
12533          this.defaultValue = new IntegerType();
12534          return this.defaultValue;
12535        }
12536        else if (name.equals("defaultValueInteger64")) {
12537          this.defaultValue = new Integer64Type();
12538          return this.defaultValue;
12539        }
12540        else if (name.equals("defaultValueMarkdown")) {
12541          this.defaultValue = new MarkdownType();
12542          return this.defaultValue;
12543        }
12544        else if (name.equals("defaultValueOid")) {
12545          this.defaultValue = new OidType();
12546          return this.defaultValue;
12547        }
12548        else if (name.equals("defaultValuePositiveInt")) {
12549          this.defaultValue = new PositiveIntType();
12550          return this.defaultValue;
12551        }
12552        else if (name.equals("defaultValueString")) {
12553          this.defaultValue = new StringType();
12554          return this.defaultValue;
12555        }
12556        else if (name.equals("defaultValueTime")) {
12557          this.defaultValue = new TimeType();
12558          return this.defaultValue;
12559        }
12560        else if (name.equals("defaultValueUnsignedInt")) {
12561          this.defaultValue = new UnsignedIntType();
12562          return this.defaultValue;
12563        }
12564        else if (name.equals("defaultValueUri")) {
12565          this.defaultValue = new UriType();
12566          return this.defaultValue;
12567        }
12568        else if (name.equals("defaultValueUrl")) {
12569          this.defaultValue = new UrlType();
12570          return this.defaultValue;
12571        }
12572        else if (name.equals("defaultValueUuid")) {
12573          this.defaultValue = new UuidType();
12574          return this.defaultValue;
12575        }
12576        else if (name.equals("defaultValueAddress")) {
12577          this.defaultValue = new Address();
12578          return this.defaultValue;
12579        }
12580        else if (name.equals("defaultValueAge")) {
12581          this.defaultValue = new Age();
12582          return this.defaultValue;
12583        }
12584        else if (name.equals("defaultValueAnnotation")) {
12585          this.defaultValue = new Annotation();
12586          return this.defaultValue;
12587        }
12588        else if (name.equals("defaultValueAttachment")) {
12589          this.defaultValue = new Attachment();
12590          return this.defaultValue;
12591        }
12592        else if (name.equals("defaultValueCodeableConcept")) {
12593          this.defaultValue = new CodeableConcept();
12594          return this.defaultValue;
12595        }
12596        else if (name.equals("defaultValueCodeableReference")) {
12597          this.defaultValue = new CodeableReference();
12598          return this.defaultValue;
12599        }
12600        else if (name.equals("defaultValueCoding")) {
12601          this.defaultValue = new Coding();
12602          return this.defaultValue;
12603        }
12604        else if (name.equals("defaultValueContactPoint")) {
12605          this.defaultValue = new ContactPoint();
12606          return this.defaultValue;
12607        }
12608        else if (name.equals("defaultValueCount")) {
12609          this.defaultValue = new Count();
12610          return this.defaultValue;
12611        }
12612        else if (name.equals("defaultValueDistance")) {
12613          this.defaultValue = new Distance();
12614          return this.defaultValue;
12615        }
12616        else if (name.equals("defaultValueDuration")) {
12617          this.defaultValue = new Duration();
12618          return this.defaultValue;
12619        }
12620        else if (name.equals("defaultValueHumanName")) {
12621          this.defaultValue = new HumanName();
12622          return this.defaultValue;
12623        }
12624        else if (name.equals("defaultValueIdentifier")) {
12625          this.defaultValue = new Identifier();
12626          return this.defaultValue;
12627        }
12628        else if (name.equals("defaultValueMoney")) {
12629          this.defaultValue = new Money();
12630          return this.defaultValue;
12631        }
12632        else if (name.equals("defaultValuePeriod")) {
12633          this.defaultValue = new Period();
12634          return this.defaultValue;
12635        }
12636        else if (name.equals("defaultValueQuantity")) {
12637          this.defaultValue = new Quantity();
12638          return this.defaultValue;
12639        }
12640        else if (name.equals("defaultValueRange")) {
12641          this.defaultValue = new Range();
12642          return this.defaultValue;
12643        }
12644        else if (name.equals("defaultValueRatio")) {
12645          this.defaultValue = new Ratio();
12646          return this.defaultValue;
12647        }
12648        else if (name.equals("defaultValueRatioRange")) {
12649          this.defaultValue = new RatioRange();
12650          return this.defaultValue;
12651        }
12652        else if (name.equals("defaultValueReference")) {
12653          this.defaultValue = new Reference();
12654          return this.defaultValue;
12655        }
12656        else if (name.equals("defaultValueSampledData")) {
12657          this.defaultValue = new SampledData();
12658          return this.defaultValue;
12659        }
12660        else if (name.equals("defaultValueSignature")) {
12661          this.defaultValue = new Signature();
12662          return this.defaultValue;
12663        }
12664        else if (name.equals("defaultValueTiming")) {
12665          this.defaultValue = new Timing();
12666          return this.defaultValue;
12667        }
12668        else if (name.equals("defaultValueContactDetail")) {
12669          this.defaultValue = new ContactDetail();
12670          return this.defaultValue;
12671        }
12672        else if (name.equals("defaultValueDataRequirement")) {
12673          this.defaultValue = new DataRequirement();
12674          return this.defaultValue;
12675        }
12676        else if (name.equals("defaultValueExpression")) {
12677          this.defaultValue = new Expression();
12678          return this.defaultValue;
12679        }
12680        else if (name.equals("defaultValueParameterDefinition")) {
12681          this.defaultValue = new ParameterDefinition();
12682          return this.defaultValue;
12683        }
12684        else if (name.equals("defaultValueRelatedArtifact")) {
12685          this.defaultValue = new RelatedArtifact();
12686          return this.defaultValue;
12687        }
12688        else if (name.equals("defaultValueTriggerDefinition")) {
12689          this.defaultValue = new TriggerDefinition();
12690          return this.defaultValue;
12691        }
12692        else if (name.equals("defaultValueUsageContext")) {
12693          this.defaultValue = new UsageContext();
12694          return this.defaultValue;
12695        }
12696        else if (name.equals("defaultValueAvailability")) {
12697          this.defaultValue = new Availability();
12698          return this.defaultValue;
12699        }
12700        else if (name.equals("defaultValueExtendedContactDetail")) {
12701          this.defaultValue = new ExtendedContactDetail();
12702          return this.defaultValue;
12703        }
12704        else if (name.equals("defaultValueDosage")) {
12705          this.defaultValue = new Dosage();
12706          return this.defaultValue;
12707        }
12708        else if (name.equals("defaultValueMeta")) {
12709          this.defaultValue = new Meta();
12710          return this.defaultValue;
12711        }
12712        else if (name.equals("meaningWhenMissing")) {
12713          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.meaningWhenMissing");
12714        }
12715        else if (name.equals("orderMeaning")) {
12716          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.orderMeaning");
12717        }
12718        else if (name.equals("fixedBase64Binary")) {
12719          this.fixed = new Base64BinaryType();
12720          return this.fixed;
12721        }
12722        else if (name.equals("fixedBoolean")) {
12723          this.fixed = new BooleanType();
12724          return this.fixed;
12725        }
12726        else if (name.equals("fixedCanonical")) {
12727          this.fixed = new CanonicalType();
12728          return this.fixed;
12729        }
12730        else if (name.equals("fixedCode")) {
12731          this.fixed = new CodeType();
12732          return this.fixed;
12733        }
12734        else if (name.equals("fixedDate")) {
12735          this.fixed = new DateType();
12736          return this.fixed;
12737        }
12738        else if (name.equals("fixedDateTime")) {
12739          this.fixed = new DateTimeType();
12740          return this.fixed;
12741        }
12742        else if (name.equals("fixedDecimal")) {
12743          this.fixed = new DecimalType();
12744          return this.fixed;
12745        }
12746        else if (name.equals("fixedId")) {
12747          this.fixed = new IdType();
12748          return this.fixed;
12749        }
12750        else if (name.equals("fixedInstant")) {
12751          this.fixed = new InstantType();
12752          return this.fixed;
12753        }
12754        else if (name.equals("fixedInteger")) {
12755          this.fixed = new IntegerType();
12756          return this.fixed;
12757        }
12758        else if (name.equals("fixedInteger64")) {
12759          this.fixed = new Integer64Type();
12760          return this.fixed;
12761        }
12762        else if (name.equals("fixedMarkdown")) {
12763          this.fixed = new MarkdownType();
12764          return this.fixed;
12765        }
12766        else if (name.equals("fixedOid")) {
12767          this.fixed = new OidType();
12768          return this.fixed;
12769        }
12770        else if (name.equals("fixedPositiveInt")) {
12771          this.fixed = new PositiveIntType();
12772          return this.fixed;
12773        }
12774        else if (name.equals("fixedString")) {
12775          this.fixed = new StringType();
12776          return this.fixed;
12777        }
12778        else if (name.equals("fixedTime")) {
12779          this.fixed = new TimeType();
12780          return this.fixed;
12781        }
12782        else if (name.equals("fixedUnsignedInt")) {
12783          this.fixed = new UnsignedIntType();
12784          return this.fixed;
12785        }
12786        else if (name.equals("fixedUri")) {
12787          this.fixed = new UriType();
12788          return this.fixed;
12789        }
12790        else if (name.equals("fixedUrl")) {
12791          this.fixed = new UrlType();
12792          return this.fixed;
12793        }
12794        else if (name.equals("fixedUuid")) {
12795          this.fixed = new UuidType();
12796          return this.fixed;
12797        }
12798        else if (name.equals("fixedAddress")) {
12799          this.fixed = new Address();
12800          return this.fixed;
12801        }
12802        else if (name.equals("fixedAge")) {
12803          this.fixed = new Age();
12804          return this.fixed;
12805        }
12806        else if (name.equals("fixedAnnotation")) {
12807          this.fixed = new Annotation();
12808          return this.fixed;
12809        }
12810        else if (name.equals("fixedAttachment")) {
12811          this.fixed = new Attachment();
12812          return this.fixed;
12813        }
12814        else if (name.equals("fixedCodeableConcept")) {
12815          this.fixed = new CodeableConcept();
12816          return this.fixed;
12817        }
12818        else if (name.equals("fixedCodeableReference")) {
12819          this.fixed = new CodeableReference();
12820          return this.fixed;
12821        }
12822        else if (name.equals("fixedCoding")) {
12823          this.fixed = new Coding();
12824          return this.fixed;
12825        }
12826        else if (name.equals("fixedContactPoint")) {
12827          this.fixed = new ContactPoint();
12828          return this.fixed;
12829        }
12830        else if (name.equals("fixedCount")) {
12831          this.fixed = new Count();
12832          return this.fixed;
12833        }
12834        else if (name.equals("fixedDistance")) {
12835          this.fixed = new Distance();
12836          return this.fixed;
12837        }
12838        else if (name.equals("fixedDuration")) {
12839          this.fixed = new Duration();
12840          return this.fixed;
12841        }
12842        else if (name.equals("fixedHumanName")) {
12843          this.fixed = new HumanName();
12844          return this.fixed;
12845        }
12846        else if (name.equals("fixedIdentifier")) {
12847          this.fixed = new Identifier();
12848          return this.fixed;
12849        }
12850        else if (name.equals("fixedMoney")) {
12851          this.fixed = new Money();
12852          return this.fixed;
12853        }
12854        else if (name.equals("fixedPeriod")) {
12855          this.fixed = new Period();
12856          return this.fixed;
12857        }
12858        else if (name.equals("fixedQuantity")) {
12859          this.fixed = new Quantity();
12860          return this.fixed;
12861        }
12862        else if (name.equals("fixedRange")) {
12863          this.fixed = new Range();
12864          return this.fixed;
12865        }
12866        else if (name.equals("fixedRatio")) {
12867          this.fixed = new Ratio();
12868          return this.fixed;
12869        }
12870        else if (name.equals("fixedRatioRange")) {
12871          this.fixed = new RatioRange();
12872          return this.fixed;
12873        }
12874        else if (name.equals("fixedReference")) {
12875          this.fixed = new Reference();
12876          return this.fixed;
12877        }
12878        else if (name.equals("fixedSampledData")) {
12879          this.fixed = new SampledData();
12880          return this.fixed;
12881        }
12882        else if (name.equals("fixedSignature")) {
12883          this.fixed = new Signature();
12884          return this.fixed;
12885        }
12886        else if (name.equals("fixedTiming")) {
12887          this.fixed = new Timing();
12888          return this.fixed;
12889        }
12890        else if (name.equals("fixedContactDetail")) {
12891          this.fixed = new ContactDetail();
12892          return this.fixed;
12893        }
12894        else if (name.equals("fixedDataRequirement")) {
12895          this.fixed = new DataRequirement();
12896          return this.fixed;
12897        }
12898        else if (name.equals("fixedExpression")) {
12899          this.fixed = new Expression();
12900          return this.fixed;
12901        }
12902        else if (name.equals("fixedParameterDefinition")) {
12903          this.fixed = new ParameterDefinition();
12904          return this.fixed;
12905        }
12906        else if (name.equals("fixedRelatedArtifact")) {
12907          this.fixed = new RelatedArtifact();
12908          return this.fixed;
12909        }
12910        else if (name.equals("fixedTriggerDefinition")) {
12911          this.fixed = new TriggerDefinition();
12912          return this.fixed;
12913        }
12914        else if (name.equals("fixedUsageContext")) {
12915          this.fixed = new UsageContext();
12916          return this.fixed;
12917        }
12918        else if (name.equals("fixedAvailability")) {
12919          this.fixed = new Availability();
12920          return this.fixed;
12921        }
12922        else if (name.equals("fixedExtendedContactDetail")) {
12923          this.fixed = new ExtendedContactDetail();
12924          return this.fixed;
12925        }
12926        else if (name.equals("fixedDosage")) {
12927          this.fixed = new Dosage();
12928          return this.fixed;
12929        }
12930        else if (name.equals("fixedMeta")) {
12931          this.fixed = new Meta();
12932          return this.fixed;
12933        }
12934        else if (name.equals("patternBase64Binary")) {
12935          this.pattern = new Base64BinaryType();
12936          return this.pattern;
12937        }
12938        else if (name.equals("patternBoolean")) {
12939          this.pattern = new BooleanType();
12940          return this.pattern;
12941        }
12942        else if (name.equals("patternCanonical")) {
12943          this.pattern = new CanonicalType();
12944          return this.pattern;
12945        }
12946        else if (name.equals("patternCode")) {
12947          this.pattern = new CodeType();
12948          return this.pattern;
12949        }
12950        else if (name.equals("patternDate")) {
12951          this.pattern = new DateType();
12952          return this.pattern;
12953        }
12954        else if (name.equals("patternDateTime")) {
12955          this.pattern = new DateTimeType();
12956          return this.pattern;
12957        }
12958        else if (name.equals("patternDecimal")) {
12959          this.pattern = new DecimalType();
12960          return this.pattern;
12961        }
12962        else if (name.equals("patternId")) {
12963          this.pattern = new IdType();
12964          return this.pattern;
12965        }
12966        else if (name.equals("patternInstant")) {
12967          this.pattern = new InstantType();
12968          return this.pattern;
12969        }
12970        else if (name.equals("patternInteger")) {
12971          this.pattern = new IntegerType();
12972          return this.pattern;
12973        }
12974        else if (name.equals("patternInteger64")) {
12975          this.pattern = new Integer64Type();
12976          return this.pattern;
12977        }
12978        else if (name.equals("patternMarkdown")) {
12979          this.pattern = new MarkdownType();
12980          return this.pattern;
12981        }
12982        else if (name.equals("patternOid")) {
12983          this.pattern = new OidType();
12984          return this.pattern;
12985        }
12986        else if (name.equals("patternPositiveInt")) {
12987          this.pattern = new PositiveIntType();
12988          return this.pattern;
12989        }
12990        else if (name.equals("patternString")) {
12991          this.pattern = new StringType();
12992          return this.pattern;
12993        }
12994        else if (name.equals("patternTime")) {
12995          this.pattern = new TimeType();
12996          return this.pattern;
12997        }
12998        else if (name.equals("patternUnsignedInt")) {
12999          this.pattern = new UnsignedIntType();
13000          return this.pattern;
13001        }
13002        else if (name.equals("patternUri")) {
13003          this.pattern = new UriType();
13004          return this.pattern;
13005        }
13006        else if (name.equals("patternUrl")) {
13007          this.pattern = new UrlType();
13008          return this.pattern;
13009        }
13010        else if (name.equals("patternUuid")) {
13011          this.pattern = new UuidType();
13012          return this.pattern;
13013        }
13014        else if (name.equals("patternAddress")) {
13015          this.pattern = new Address();
13016          return this.pattern;
13017        }
13018        else if (name.equals("patternAge")) {
13019          this.pattern = new Age();
13020          return this.pattern;
13021        }
13022        else if (name.equals("patternAnnotation")) {
13023          this.pattern = new Annotation();
13024          return this.pattern;
13025        }
13026        else if (name.equals("patternAttachment")) {
13027          this.pattern = new Attachment();
13028          return this.pattern;
13029        }
13030        else if (name.equals("patternCodeableConcept")) {
13031          this.pattern = new CodeableConcept();
13032          return this.pattern;
13033        }
13034        else if (name.equals("patternCodeableReference")) {
13035          this.pattern = new CodeableReference();
13036          return this.pattern;
13037        }
13038        else if (name.equals("patternCoding")) {
13039          this.pattern = new Coding();
13040          return this.pattern;
13041        }
13042        else if (name.equals("patternContactPoint")) {
13043          this.pattern = new ContactPoint();
13044          return this.pattern;
13045        }
13046        else if (name.equals("patternCount")) {
13047          this.pattern = new Count();
13048          return this.pattern;
13049        }
13050        else if (name.equals("patternDistance")) {
13051          this.pattern = new Distance();
13052          return this.pattern;
13053        }
13054        else if (name.equals("patternDuration")) {
13055          this.pattern = new Duration();
13056          return this.pattern;
13057        }
13058        else if (name.equals("patternHumanName")) {
13059          this.pattern = new HumanName();
13060          return this.pattern;
13061        }
13062        else if (name.equals("patternIdentifier")) {
13063          this.pattern = new Identifier();
13064          return this.pattern;
13065        }
13066        else if (name.equals("patternMoney")) {
13067          this.pattern = new Money();
13068          return this.pattern;
13069        }
13070        else if (name.equals("patternPeriod")) {
13071          this.pattern = new Period();
13072          return this.pattern;
13073        }
13074        else if (name.equals("patternQuantity")) {
13075          this.pattern = new Quantity();
13076          return this.pattern;
13077        }
13078        else if (name.equals("patternRange")) {
13079          this.pattern = new Range();
13080          return this.pattern;
13081        }
13082        else if (name.equals("patternRatio")) {
13083          this.pattern = new Ratio();
13084          return this.pattern;
13085        }
13086        else if (name.equals("patternRatioRange")) {
13087          this.pattern = new RatioRange();
13088          return this.pattern;
13089        }
13090        else if (name.equals("patternReference")) {
13091          this.pattern = new Reference();
13092          return this.pattern;
13093        }
13094        else if (name.equals("patternSampledData")) {
13095          this.pattern = new SampledData();
13096          return this.pattern;
13097        }
13098        else if (name.equals("patternSignature")) {
13099          this.pattern = new Signature();
13100          return this.pattern;
13101        }
13102        else if (name.equals("patternTiming")) {
13103          this.pattern = new Timing();
13104          return this.pattern;
13105        }
13106        else if (name.equals("patternContactDetail")) {
13107          this.pattern = new ContactDetail();
13108          return this.pattern;
13109        }
13110        else if (name.equals("patternDataRequirement")) {
13111          this.pattern = new DataRequirement();
13112          return this.pattern;
13113        }
13114        else if (name.equals("patternExpression")) {
13115          this.pattern = new Expression();
13116          return this.pattern;
13117        }
13118        else if (name.equals("patternParameterDefinition")) {
13119          this.pattern = new ParameterDefinition();
13120          return this.pattern;
13121        }
13122        else if (name.equals("patternRelatedArtifact")) {
13123          this.pattern = new RelatedArtifact();
13124          return this.pattern;
13125        }
13126        else if (name.equals("patternTriggerDefinition")) {
13127          this.pattern = new TriggerDefinition();
13128          return this.pattern;
13129        }
13130        else if (name.equals("patternUsageContext")) {
13131          this.pattern = new UsageContext();
13132          return this.pattern;
13133        }
13134        else if (name.equals("patternAvailability")) {
13135          this.pattern = new Availability();
13136          return this.pattern;
13137        }
13138        else if (name.equals("patternExtendedContactDetail")) {
13139          this.pattern = new ExtendedContactDetail();
13140          return this.pattern;
13141        }
13142        else if (name.equals("patternDosage")) {
13143          this.pattern = new Dosage();
13144          return this.pattern;
13145        }
13146        else if (name.equals("patternMeta")) {
13147          this.pattern = new Meta();
13148          return this.pattern;
13149        }
13150        else if (name.equals("example")) {
13151          return addExample();
13152        }
13153        else if (name.equals("minValueDate")) {
13154          this.minValue = new DateType();
13155          return this.minValue;
13156        }
13157        else if (name.equals("minValueDateTime")) {
13158          this.minValue = new DateTimeType();
13159          return this.minValue;
13160        }
13161        else if (name.equals("minValueInstant")) {
13162          this.minValue = new InstantType();
13163          return this.minValue;
13164        }
13165        else if (name.equals("minValueTime")) {
13166          this.minValue = new TimeType();
13167          return this.minValue;
13168        }
13169        else if (name.equals("minValueDecimal")) {
13170          this.minValue = new DecimalType();
13171          return this.minValue;
13172        }
13173        else if (name.equals("minValueInteger")) {
13174          this.minValue = new IntegerType();
13175          return this.minValue;
13176        }
13177        else if (name.equals("minValueInteger64")) {
13178          this.minValue = new Integer64Type();
13179          return this.minValue;
13180        }
13181        else if (name.equals("minValuePositiveInt")) {
13182          this.minValue = new PositiveIntType();
13183          return this.minValue;
13184        }
13185        else if (name.equals("minValueUnsignedInt")) {
13186          this.minValue = new UnsignedIntType();
13187          return this.minValue;
13188        }
13189        else if (name.equals("minValueQuantity")) {
13190          this.minValue = new Quantity();
13191          return this.minValue;
13192        }
13193        else if (name.equals("maxValueDate")) {
13194          this.maxValue = new DateType();
13195          return this.maxValue;
13196        }
13197        else if (name.equals("maxValueDateTime")) {
13198          this.maxValue = new DateTimeType();
13199          return this.maxValue;
13200        }
13201        else if (name.equals("maxValueInstant")) {
13202          this.maxValue = new InstantType();
13203          return this.maxValue;
13204        }
13205        else if (name.equals("maxValueTime")) {
13206          this.maxValue = new TimeType();
13207          return this.maxValue;
13208        }
13209        else if (name.equals("maxValueDecimal")) {
13210          this.maxValue = new DecimalType();
13211          return this.maxValue;
13212        }
13213        else if (name.equals("maxValueInteger")) {
13214          this.maxValue = new IntegerType();
13215          return this.maxValue;
13216        }
13217        else if (name.equals("maxValueInteger64")) {
13218          this.maxValue = new Integer64Type();
13219          return this.maxValue;
13220        }
13221        else if (name.equals("maxValuePositiveInt")) {
13222          this.maxValue = new PositiveIntType();
13223          return this.maxValue;
13224        }
13225        else if (name.equals("maxValueUnsignedInt")) {
13226          this.maxValue = new UnsignedIntType();
13227          return this.maxValue;
13228        }
13229        else if (name.equals("maxValueQuantity")) {
13230          this.maxValue = new Quantity();
13231          return this.maxValue;
13232        }
13233        else if (name.equals("maxLength")) {
13234          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.maxLength");
13235        }
13236        else if (name.equals("condition")) {
13237          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.condition");
13238        }
13239        else if (name.equals("constraint")) {
13240          return addConstraint();
13241        }
13242        else if (name.equals("mustHaveValue")) {
13243          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mustHaveValue");
13244        }
13245        else if (name.equals("valueAlternatives")) {
13246          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.valueAlternatives");
13247        }
13248        else if (name.equals("mustSupport")) {
13249          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.mustSupport");
13250        }
13251        else if (name.equals("obligation")) {
13252          return addObligation();
13253        }
13254        else if (name.equals("isModifier")) {
13255          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.isModifier");
13256        }
13257        else if (name.equals("isModifierReason")) {
13258          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.isModifierReason");
13259        }
13260        else if (name.equals("isSummary")) {
13261          throw new FHIRException("Cannot call addChild on a primitive type ElementDefinition.isSummary");
13262        }
13263        else if (name.equals("binding")) {
13264          this.binding = new ElementDefinitionBindingComponent();
13265          return this.binding;
13266        }
13267        else if (name.equals("mapping")) {
13268          return addMapping();
13269        }
13270        else
13271          return super.addChild(name);
13272      }
13273
13274  public String fhirType() {
13275    return "ElementDefinition";
13276
13277  }
13278
13279      public ElementDefinition copy() {
13280        ElementDefinition dst = new ElementDefinition();
13281        copyValues(dst);
13282        return dst;
13283      }
13284
13285      public void copyValues(ElementDefinition dst) {
13286        super.copyValues(dst);
13287        dst.path = path == null ? null : path.copy();
13288        if (representation != null) {
13289          dst.representation = new ArrayList<Enumeration<PropertyRepresentation>>();
13290          for (Enumeration<PropertyRepresentation> i : representation)
13291            dst.representation.add(i.copy());
13292        };
13293        dst.sliceName = sliceName == null ? null : sliceName.copy();
13294        dst.sliceIsConstraining = sliceIsConstraining == null ? null : sliceIsConstraining.copy();
13295        dst.label = label == null ? null : label.copy();
13296        if (code != null) {
13297          dst.code = new ArrayList<Coding>();
13298          for (Coding i : code)
13299            dst.code.add(i.copy());
13300        };
13301        dst.slicing = slicing == null ? null : slicing.copy();
13302        dst.short_ = short_ == null ? null : short_.copy();
13303        dst.definition = definition == null ? null : definition.copy();
13304        dst.comment = comment == null ? null : comment.copy();
13305        dst.requirements = requirements == null ? null : requirements.copy();
13306        if (alias != null) {
13307          dst.alias = new ArrayList<StringType>();
13308          for (StringType i : alias)
13309            dst.alias.add(i.copy());
13310        };
13311        dst.min = min == null ? null : min.copy();
13312        dst.max = max == null ? null : max.copy();
13313        dst.base = base == null ? null : base.copy();
13314        dst.contentReference = contentReference == null ? null : contentReference.copy();
13315        if (type != null) {
13316          dst.type = new ArrayList<TypeRefComponent>();
13317          for (TypeRefComponent i : type)
13318            dst.type.add(i.copy());
13319        };
13320        dst.defaultValue = defaultValue == null ? null : defaultValue.copy();
13321        dst.meaningWhenMissing = meaningWhenMissing == null ? null : meaningWhenMissing.copy();
13322        dst.orderMeaning = orderMeaning == null ? null : orderMeaning.copy();
13323        dst.fixed = fixed == null ? null : fixed.copy();
13324        dst.pattern = pattern == null ? null : pattern.copy();
13325        if (example != null) {
13326          dst.example = new ArrayList<ElementDefinitionExampleComponent>();
13327          for (ElementDefinitionExampleComponent i : example)
13328            dst.example.add(i.copy());
13329        };
13330        dst.minValue = minValue == null ? null : minValue.copy();
13331        dst.maxValue = maxValue == null ? null : maxValue.copy();
13332        dst.maxLength = maxLength == null ? null : maxLength.copy();
13333        if (condition != null) {
13334          dst.condition = new ArrayList<IdType>();
13335          for (IdType i : condition)
13336            dst.condition.add(i.copy());
13337        };
13338        if (constraint != null) {
13339          dst.constraint = new ArrayList<ElementDefinitionConstraintComponent>();
13340          for (ElementDefinitionConstraintComponent i : constraint)
13341            dst.constraint.add(i.copy());
13342        };
13343        dst.mustHaveValue = mustHaveValue == null ? null : mustHaveValue.copy();
13344        if (valueAlternatives != null) {
13345          dst.valueAlternatives = new ArrayList<CanonicalType>();
13346          for (CanonicalType i : valueAlternatives)
13347            dst.valueAlternatives.add(i.copy());
13348        };
13349        dst.mustSupport = mustSupport == null ? null : mustSupport.copy();
13350        if (obligation != null) {
13351          dst.obligation = new ArrayList<ElementDefinitionObligationComponent>();
13352          for (ElementDefinitionObligationComponent i : obligation)
13353            dst.obligation.add(i.copy());
13354        };
13355        dst.isModifier = isModifier == null ? null : isModifier.copy();
13356        dst.isModifierReason = isModifierReason == null ? null : isModifierReason.copy();
13357        dst.isSummary = isSummary == null ? null : isSummary.copy();
13358        dst.binding = binding == null ? null : binding.copy();
13359        if (mapping != null) {
13360          dst.mapping = new ArrayList<ElementDefinitionMappingComponent>();
13361          for (ElementDefinitionMappingComponent i : mapping)
13362            dst.mapping.add(i.copy());
13363        };
13364      }
13365
13366      protected ElementDefinition typedCopy() {
13367        return copy();
13368      }
13369
13370      @Override
13371      public boolean equalsDeep(Base other_) {
13372        if (!super.equalsDeep(other_))
13373          return false;
13374        if (!(other_ instanceof ElementDefinition))
13375          return false;
13376        ElementDefinition o = (ElementDefinition) other_;
13377        return compareDeep(path, o.path, true) && compareDeep(representation, o.representation, true) && compareDeep(sliceName, o.sliceName, true)
13378           && compareDeep(sliceIsConstraining, o.sliceIsConstraining, true) && compareDeep(label, o.label, true)
13379           && compareDeep(code, o.code, true) && compareDeep(slicing, o.slicing, true) && compareDeep(short_, o.short_, true)
13380           && compareDeep(definition, o.definition, true) && compareDeep(comment, o.comment, true) && compareDeep(requirements, o.requirements, true)
13381           && compareDeep(alias, o.alias, true) && compareDeep(min, o.min, true) && compareDeep(max, o.max, true)
13382           && compareDeep(base, o.base, true) && compareDeep(contentReference, o.contentReference, true) && compareDeep(type, o.type, true)
13383           && compareDeep(defaultValue, o.defaultValue, true) && compareDeep(meaningWhenMissing, o.meaningWhenMissing, true)
13384           && compareDeep(orderMeaning, o.orderMeaning, true) && compareDeep(fixed, o.fixed, true) && compareDeep(pattern, o.pattern, true)
13385           && compareDeep(example, o.example, true) && compareDeep(minValue, o.minValue, true) && compareDeep(maxValue, o.maxValue, true)
13386           && compareDeep(maxLength, o.maxLength, true) && compareDeep(condition, o.condition, true) && compareDeep(constraint, o.constraint, true)
13387           && compareDeep(mustHaveValue, o.mustHaveValue, true) && compareDeep(valueAlternatives, o.valueAlternatives, true)
13388           && compareDeep(mustSupport, o.mustSupport, true) && compareDeep(obligation, o.obligation, true)
13389           && compareDeep(isModifier, o.isModifier, true) && compareDeep(isModifierReason, o.isModifierReason, true)
13390           && compareDeep(isSummary, o.isSummary, true) && compareDeep(binding, o.binding, true) && compareDeep(mapping, o.mapping, true)
13391          ;
13392      }
13393
13394      @Override
13395      public boolean equalsShallow(Base other_) {
13396        if (!super.equalsShallow(other_))
13397          return false;
13398        if (!(other_ instanceof ElementDefinition))
13399          return false;
13400        ElementDefinition o = (ElementDefinition) other_;
13401        return compareValues(path, o.path, true) && compareValues(representation, o.representation, true) && compareValues(sliceName, o.sliceName, true)
13402           && compareValues(sliceIsConstraining, o.sliceIsConstraining, true) && compareValues(label, o.label, true)
13403           && compareValues(short_, o.short_, true) && compareValues(definition, o.definition, true) && compareValues(comment, o.comment, true)
13404           && compareValues(requirements, o.requirements, true) && compareValues(alias, o.alias, true) && compareValues(min, o.min, true)
13405           && compareValues(max, o.max, true) && compareValues(contentReference, o.contentReference, true) && compareValues(meaningWhenMissing, o.meaningWhenMissing, true)
13406           && compareValues(orderMeaning, o.orderMeaning, true) && compareValues(maxLength, o.maxLength, true)
13407           && compareValues(condition, o.condition, true) && compareValues(mustHaveValue, o.mustHaveValue, true)
13408           && compareValues(valueAlternatives, o.valueAlternatives, true) && compareValues(mustSupport, o.mustSupport, true)
13409           && compareValues(isModifier, o.isModifier, true) && compareValues(isModifierReason, o.isModifierReason, true)
13410           && compareValues(isSummary, o.isSummary, true);
13411      }
13412
13413      public boolean isEmpty() {
13414        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(path, representation, sliceName
13415          , sliceIsConstraining, label, code, slicing, short_, definition, comment, requirements
13416          , alias, min, max, base, contentReference, type, defaultValue, meaningWhenMissing
13417          , orderMeaning, fixed, pattern, example, minValue, maxValue, maxLength, condition
13418          , constraint, mustHaveValue, valueAlternatives, mustSupport, obligation, isModifier
13419          , isModifierReason, isSummary, binding, mapping);
13420      }
13421
13422// Manual code (from Configuration.txt):
13423
13424  public String toString() {
13425    if (hasId())
13426      return getId();
13427    if (hasSliceName())
13428      return getPath()+":"+getSliceName();
13429    else
13430      return getPath();
13431  }
13432    
13433  public void makeBase(String path, int min, String max) {
13434    ElementDefinitionBaseComponent self = getBase();
13435    self.setPath(path);
13436    self.setMin(min);
13437    self.setMax(max);
13438  }
13439  
13440  public void makeBase() {
13441    ElementDefinitionBaseComponent self = getBase();
13442    self.setPath(getPath());
13443    self.setMin(getMin());
13444    self.setMax(getMax());
13445  }
13446 
13447  
13448  public String typeSummary() {
13449    CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
13450    for (TypeRefComponent tr : getType()) {
13451      if (tr.hasCode())
13452        b.append(tr.getWorkingCode());
13453    }
13454    return b.toString();
13455  }
13456  
13457  public String typeSummaryVB() {
13458    CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder("|");
13459    for (TypeRefComponent tr : getType()) {
13460      if (tr.hasCode())
13461        b.append(tr.getWorkingCode());
13462    }
13463    return b.toString().replace(" ", "");
13464  }
13465  
13466  public TypeRefComponent getType(String code) {
13467    for (TypeRefComponent tr : getType()) 
13468      if (tr.getCode().equals(code))
13469        return tr;
13470    TypeRefComponent tr = new TypeRefComponent();
13471    tr.setCode(code);
13472    type.add(tr);
13473    return tr;
13474  }
13475
13476  public static final boolean NOT_MODIFIER = false;
13477  public static final boolean NOT_IN_SUMMARY = false;
13478  public static final boolean IS_MODIFIER = true;
13479  public static final boolean IS_IN_SUMMARY = true;
13480  public ElementDefinition(boolean defaults, boolean modifier, boolean inSummary) {
13481    super();
13482    if (defaults) {
13483      setIsModifier(modifier);
13484      setIsSummary(inSummary);
13485    }
13486  }  
13487
13488 public String present() {
13489    return hasId() ? getId() : getPath();
13490  }
13491
13492  public boolean hasCondition(IdType id) {
13493    for (IdType c : getCondition()) {
13494      if (c.primitiveValue().equals(id.primitiveValue()))
13495        return true;
13496    }
13497    return false;
13498  }
13499
13500  public boolean hasConstraint(String key) {
13501    for (ElementDefinitionConstraintComponent c : getConstraint()) {
13502      if (c.getKey().equals(key))
13503        return true;
13504    }
13505    return false;
13506  }
13507
13508  public boolean hasCode(Coding c) {
13509    for (Coding t : getCode()) {
13510      if (t.getSystem().equals(c.getSystem()) && t.getCode().equals(c.getCode()))
13511        return true;
13512    }
13513    return false;
13514  }  
13515
13516  public boolean isChoice() {
13517    return getPath().endsWith("[x]");
13518  }  
13519
13520  public String getName() {
13521    return hasPath() ? getPath().contains(".") ? getPath().substring(getPath().lastIndexOf(".")+1) : getPath() : null;
13522  }
13523
13524  public boolean unbounded() {
13525    return getMax().equals("*") || Integer.parseInt(getMax()) > 1;
13526  }
13527
13528  public boolean isMandatory() {
13529    return getMin() > 0;
13530  }
13531
13532  public boolean isInlineType() {
13533    return getType().size() == 1 && Utilities.existsInList(getType().get(0).getCode(), "Element", "BackboneElement");
13534  }  
13535
13536
13537  public boolean prohibited() { 
13538    return "0".equals(getMax()); 
13539  } 
13540
13541  public boolean hasFixedOrPattern() { 
13542    return hasFixed() || hasPattern(); 
13543  } 
13544
13545  public DataType getFixedOrPattern() { 
13546    return hasFixed() ? getFixed() : getPattern(); 
13547  } 
13548
13549  public boolean isProhibited() { 
13550    return "0".equals(getMax()); 
13551  }   
13552
13553  public boolean isRequired() { 
13554    return getMin() == 1; 
13555  }
13556
13557// end addition
13558
13559}