001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017package ca.uhn.fhir.model.dstu2.composite;
018
019import java.net.URI;
020import java.math.BigDecimal;
021import org.apache.commons.lang3.StringUtils;
022import java.util.*;
023import ca.uhn.fhir.model.api.*;
024import ca.uhn.fhir.model.primitive.*;
025import ca.uhn.fhir.model.api.annotation.*;
026import ca.uhn.fhir.model.base.composite.*;
027
028import ca.uhn.fhir.model.dstu2.valueset.AddressTypeEnum;
029import ca.uhn.fhir.model.dstu2.valueset.AddressUseEnum;
030import ca.uhn.fhir.model.dstu2.valueset.AggregationModeEnum;
031import ca.uhn.fhir.model.dstu2.valueset.BindingStrengthEnum;
032import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt;
033import ca.uhn.fhir.model.dstu2.composite.CodingDt;
034import ca.uhn.fhir.model.dstu2.valueset.ConstraintSeverityEnum;
035import ca.uhn.fhir.model.dstu2.valueset.ContactPointSystemEnum;
036import ca.uhn.fhir.model.dstu2.valueset.ContactPointUseEnum;
037import ca.uhn.fhir.model.dstu2.resource.Device;
038import ca.uhn.fhir.model.dstu2.valueset.EventTimingEnum;
039import ca.uhn.fhir.model.dstu2.valueset.IdentifierTypeCodesEnum;
040import ca.uhn.fhir.model.dstu2.valueset.IdentifierUseEnum;
041import ca.uhn.fhir.model.dstu2.valueset.NameUseEnum;
042import ca.uhn.fhir.model.dstu2.resource.Organization;
043import ca.uhn.fhir.model.dstu2.resource.Patient;
044import ca.uhn.fhir.model.dstu2.composite.PeriodDt;
045import ca.uhn.fhir.model.dstu2.resource.Practitioner;
046import ca.uhn.fhir.model.dstu2.valueset.PropertyRepresentationEnum;
047import ca.uhn.fhir.model.dstu2.valueset.QuantityComparatorEnum;
048import ca.uhn.fhir.model.dstu2.composite.QuantityDt;
049import ca.uhn.fhir.model.dstu2.composite.RangeDt;
050import ca.uhn.fhir.model.dstu2.resource.RelatedPerson;
051import ca.uhn.fhir.model.dstu2.valueset.SignatureTypeCodesEnum;
052import ca.uhn.fhir.model.dstu2.valueset.SlicingRulesEnum;
053import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
054import ca.uhn.fhir.model.dstu2.valueset.TimingAbbreviationEnum;
055import ca.uhn.fhir.model.dstu2.valueset.UnitsOfTimeEnum;
056import ca.uhn.fhir.model.dstu2.resource.ValueSet;
057import ca.uhn.fhir.model.dstu2.composite.BoundCodeableConceptDt;
058import ca.uhn.fhir.model.dstu2.composite.DurationDt;
059import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
060import ca.uhn.fhir.model.dstu2.composite.SimpleQuantityDt;
061import ca.uhn.fhir.model.primitive.Base64BinaryDt;
062import ca.uhn.fhir.model.primitive.BooleanDt;
063import ca.uhn.fhir.model.primitive.BoundCodeDt;
064import ca.uhn.fhir.model.primitive.CodeDt;
065import ca.uhn.fhir.model.primitive.DateTimeDt;
066import ca.uhn.fhir.model.primitive.DecimalDt;
067import ca.uhn.fhir.model.primitive.IdDt;
068import ca.uhn.fhir.model.primitive.InstantDt;
069import ca.uhn.fhir.model.primitive.IntegerDt;
070import ca.uhn.fhir.model.primitive.MarkdownDt;
071import ca.uhn.fhir.model.primitive.PositiveIntDt;
072import ca.uhn.fhir.model.primitive.StringDt;
073import ca.uhn.fhir.model.primitive.UnsignedIntDt;
074import ca.uhn.fhir.model.primitive.UriDt;
075
076/**
077 * HAPI/FHIR <b>ElementDefinitionDt</b> Datatype
078 * ()
079 *
080 * <p>
081 * <b>Definition:</b>
082 * Captures constraints on each element within the resource, profile, or extension
083 * </p> 
084 *
085 * <p>
086 * <b>Requirements:</b>
087 * 
088 * </p> 
089 */
090@DatatypeDef(name="ElementDefinitionDt") 
091public class ElementDefinitionDt
092        extends  BaseIdentifiableElement         implements ICompositeDatatype{
093
094        /**
095         * Constructor
096         */
097        public ElementDefinitionDt() {
098                // nothing
099        }
100
101
102        @Child(name="path", type=StringDt.class, order=0, min=1, max=1, summary=true, modifier=false)   
103        @Description(
104                shortDefinition="",
105                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"
106        )
107        private StringDt myPath;
108        
109        @Child(name="representation", type=CodeDt.class, order=1, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false) 
110        @Description(
111                shortDefinition="",
112                formalDefinition="Codes that define how this element is represented in instances, when the deviation varies from the normal case"
113        )
114        private java.util.List<BoundCodeDt<PropertyRepresentationEnum>> myRepresentation;
115        
116        @Child(name="name", type=StringDt.class, order=2, min=0, max=1, summary=true, modifier=false)   
117        @Description(
118                shortDefinition="",
119                formalDefinition="The name of this element definition (to refer to it from other element definitions using ElementDefinition.nameReference). This is a unique name referring to a specific set of constraints applied to this element. One use of this is to provide a name to different slices of the same element"
120        )
121        private StringDt myName;
122        
123        @Child(name="label", type=StringDt.class, order=3, min=0, max=1, summary=true, modifier=false)  
124        @Description(
125                shortDefinition="",
126                formalDefinition="The text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form."
127        )
128        private StringDt myLabel;
129        
130        @Child(name="code", type=CodingDt.class, order=4, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false) 
131        @Description(
132                shortDefinition="",
133                formalDefinition="A code that provides the meaning for the element according to a particular terminology."
134        )
135        private java.util.List<CodingDt> myCode;
136        
137        @Child(name="slicing", order=5, min=0, max=1, summary=true, modifier=false)     
138        @Description(
139                shortDefinition="",
140                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)"
141        )
142        private Slicing mySlicing;
143        
144        @Child(name="short", type=StringDt.class, order=6, min=0, max=1, summary=true, modifier=false)  
145        @Description(
146                shortDefinition="",
147                formalDefinition="A concise description of what this element means (e.g. for use in autogenerated summaries)"
148        )
149        private StringDt myShort;
150        
151        @Child(name="definition", type=MarkdownDt.class, order=7, min=0, max=1, summary=true, modifier=false)   
152        @Description(
153                shortDefinition="",
154                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"
155        )
156        private MarkdownDt myDefinition;
157        
158        @Child(name="comments", type=MarkdownDt.class, order=8, min=0, max=1, summary=true, modifier=false)     
159        @Description(
160                shortDefinition="",
161                formalDefinition="Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc."
162        )
163        private MarkdownDt myComments;
164        
165        @Child(name="requirements", type=MarkdownDt.class, order=9, min=0, max=1, summary=true, modifier=false) 
166        @Description(
167                shortDefinition="",
168                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."
169        )
170        private MarkdownDt myRequirements;
171        
172        @Child(name="alias", type=StringDt.class, order=10, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)       
173        @Description(
174                shortDefinition="",
175                formalDefinition="Identifies additional names by which this element might also be known"
176        )
177        private java.util.List<StringDt> myAlias;
178        
179        @Child(name="min", type=IntegerDt.class, order=11, min=0, max=1, summary=true, modifier=false)  
180        @Description(
181                shortDefinition="",
182                formalDefinition="The minimum number of times this element SHALL appear in the instance"
183        )
184        private IntegerDt myMin;
185        
186        @Child(name="max", type=StringDt.class, order=12, min=0, max=1, summary=true, modifier=false)   
187        @Description(
188                shortDefinition="",
189                formalDefinition="The maximum number of times this element is permitted to appear in the instance"
190        )
191        private StringDt myMax;
192        
193        @Child(name="base", order=13, min=0, max=1, summary=true, modifier=false)       
194        @Description(
195                shortDefinition="",
196                formalDefinition="Information about the base definition of the element, provided to make it unncessary for tools to trace the deviation of the element through the derived and related profiles. This information is only provided where the element definition represents a constraint on another element definition, and must be present if there is a base element definition."
197        )
198        private Base myBase;
199        
200        @Child(name="type", order=14, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)     
201        @Description(
202                shortDefinition="",
203                formalDefinition="The data type or resource that the value of this element is permitted to be"
204        )
205        private java.util.List<Type> myType;
206        
207        @Child(name="nameReference", type=StringDt.class, order=15, min=0, max=1, summary=true, modifier=false) 
208        @Description(
209                shortDefinition="",
210                formalDefinition="Identifies the name of a slice defined elsewhere in the profile whose constraints should be applied to the current element"
211        )
212        private StringDt myNameReference;
213        
214        @Child(name="defaultValue", type=IDatatype.class, order=16, min=0, max=1, summary=true, modifier=false) 
215        @Description(
216                shortDefinition="",
217                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')"
218        )
219        private IDatatype myDefaultValue;
220        
221        @Child(name="meaningWhenMissing", type=MarkdownDt.class, order=17, min=0, max=1, summary=true, modifier=false)  
222        @Description(
223                shortDefinition="",
224                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'"
225        )
226        private MarkdownDt myMeaningWhenMissing;
227        
228        @Child(name="fixed", type=IDatatype.class, order=18, min=0, max=1, summary=true, modifier=false)        
229        @Description(
230                shortDefinition="",
231                formalDefinition="Specifies a value that SHALL be exactly the value  for this element in the instance. 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."
232        )
233        private IDatatype myFixed;
234        
235        @Child(name="pattern", type=IDatatype.class, order=19, min=0, max=1, summary=true, modifier=false)      
236        @Description(
237                shortDefinition="",
238                formalDefinition="Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.)."
239        )
240        private IDatatype myPattern;
241        
242        @Child(name="example", type=IDatatype.class, order=20, min=0, max=1, summary=true, modifier=false)      
243        @Description(
244                shortDefinition="",
245                formalDefinition="A sample value for this element demonstrating the type of information that would typically be captured."
246        )
247        private IDatatype myExample;
248        
249        @Child(name="minValue", type=IDatatype.class, order=21, min=0, max=1, summary=true, modifier=false)     
250        @Description(
251                shortDefinition="",
252                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"
253        )
254        private IDatatype myMinValue;
255        
256        @Child(name="maxValue", type=IDatatype.class, order=22, min=0, max=1, summary=true, modifier=false)     
257        @Description(
258                shortDefinition="",
259                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"
260        )
261        private IDatatype myMaxValue;
262        
263        @Child(name="maxLength", type=IntegerDt.class, order=23, min=0, max=1, summary=true, modifier=false)    
264        @Description(
265                shortDefinition="",
266                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"
267        )
268        private IntegerDt myMaxLength;
269        
270        @Child(name="condition", type=IdDt.class, order=24, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)       
271        @Description(
272                shortDefinition="",
273                formalDefinition="A reference to an invariant that may make additional statements about the cardinality or value in the instance"
274        )
275        private java.util.List<IdDt> myCondition;
276        
277        @Child(name="constraint", order=25, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)       
278        @Description(
279                shortDefinition="",
280                formalDefinition="Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance"
281        )
282        private java.util.List<Constraint> myConstraint;
283        
284        @Child(name="mustSupport", type=BooleanDt.class, order=26, min=0, max=1, summary=true, modifier=false)  
285        @Description(
286                shortDefinition="",
287                formalDefinition="If true, implementations that produce or consume resources SHALL provide \"support\" for the element in some meaningful way.  If false, the element may be ignored and not supported"
288        )
289        private BooleanDt myMustSupport;
290        
291        @Child(name="isModifier", type=BooleanDt.class, order=27, min=0, max=1, summary=true, modifier=false)   
292        @Description(
293                shortDefinition="",
294                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."
295        )
296        private BooleanDt myIsModifier;
297        
298        @Child(name="isSummary", type=BooleanDt.class, order=28, min=0, max=1, summary=true, modifier=false)    
299        @Description(
300                shortDefinition="",
301                formalDefinition="Whether the element should be included if a client requests a search with the parameter _summary=true"
302        )
303        private BooleanDt myIsSummary;
304        
305        @Child(name="binding", order=29, min=0, max=1, summary=true, modifier=false)    
306        @Description(
307                shortDefinition="",
308                formalDefinition="Binds to a value set if this element is coded (code, Coding, CodeableConcept)"
309        )
310        private Binding myBinding;
311        
312        @Child(name="mapping", order=30, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)  
313        @Description(
314                shortDefinition="",
315                formalDefinition="Identifies a concept from an external specification that roughly corresponds to this element"
316        )
317        private java.util.List<Mapping> myMapping;
318        
319
320        @Override
321        public boolean isEmpty() {
322                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myPath,  myRepresentation,  myName,  myLabel,  myCode,  mySlicing,  myShort,  myDefinition,  myComments,  myRequirements,  myAlias,  myMin,  myMax,  myBase,  myType,  myNameReference,  myDefaultValue,  myMeaningWhenMissing,  myFixed,  myPattern,  myExample,  myMinValue,  myMaxValue,  myMaxLength,  myCondition,  myConstraint,  myMustSupport,  myIsModifier,  myIsSummary,  myBinding,  myMapping);
323        }
324        
325        @Override
326        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
327                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myPath, myRepresentation, myName, myLabel, myCode, mySlicing, myShort, myDefinition, myComments, myRequirements, myAlias, myMin, myMax, myBase, myType, myNameReference, myDefaultValue, myMeaningWhenMissing, myFixed, myPattern, myExample, myMinValue, myMaxValue, myMaxLength, myCondition, myConstraint, myMustSupport, myIsModifier, myIsSummary, myBinding, myMapping);
328        }
329
330        /**
331         * Gets the value(s) for <b>path</b> ().
332         * creating it if it does
333         * not exist. Will not return <code>null</code>.
334         *
335     * <p>
336     * <b>Definition:</b>
337     * The path identifies the element and is expressed as a \&quot;.\&quot;-separated list of ancestor elements, beginning with the name of the resource or extension
338     * </p> 
339         */
340        public StringDt getPathElement() {  
341                if (myPath == null) {
342                        myPath = new StringDt();
343                }
344                return myPath;
345        }
346
347        
348        /**
349         * Gets the value(s) for <b>path</b> ().
350         * creating it if it does
351         * not exist. Will not return <code>null</code>.
352         *
353     * <p>
354     * <b>Definition:</b>
355     * The path identifies the element and is expressed as a \&quot;.\&quot;-separated list of ancestor elements, beginning with the name of the resource or extension
356     * </p> 
357         */
358        public String getPath() {  
359                return getPathElement().getValue();
360        }
361
362        /**
363         * Sets the value(s) for <b>path</b> ()
364         *
365     * <p>
366     * <b>Definition:</b>
367     * The path identifies the element and is expressed as a \&quot;.\&quot;-separated list of ancestor elements, beginning with the name of the resource or extension
368     * </p> 
369         */
370        public ElementDefinitionDt setPath(StringDt theValue) {
371                myPath = theValue;
372                return this;
373        }
374        
375        
376
377        /**
378         * Sets the value for <b>path</b> ()
379         *
380     * <p>
381     * <b>Definition:</b>
382     * The path identifies the element and is expressed as a \&quot;.\&quot;-separated list of ancestor elements, beginning with the name of the resource or extension
383     * </p> 
384         */
385        public ElementDefinitionDt setPath( String theString) {
386                myPath = new StringDt(theString); 
387                return this; 
388        }
389
390 
391        /**
392         * Gets the value(s) for <b>representation</b> ().
393         * creating it if it does
394         * not exist. Will not return <code>null</code>.
395         *
396     * <p>
397     * <b>Definition:</b>
398     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
399     * </p> 
400         */
401        public java.util.List<BoundCodeDt<PropertyRepresentationEnum>> getRepresentation() {  
402                if (myRepresentation == null) {
403                        myRepresentation = new java.util.ArrayList<BoundCodeDt<PropertyRepresentationEnum>>();
404                }
405                return myRepresentation;
406        }
407
408        /**
409         * Sets the value(s) for <b>representation</b> ()
410         *
411     * <p>
412     * <b>Definition:</b>
413     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
414     * </p> 
415         */
416        public ElementDefinitionDt setRepresentation(java.util.List<BoundCodeDt<PropertyRepresentationEnum>> theValue) {
417                myRepresentation = theValue;
418                return this;
419        }
420        
421        
422
423        /**
424         * Add a value for <b>representation</b> () using an enumerated type. This
425         * is intended as a convenience method for situations where the FHIR defined ValueSets are mandatory
426         * or contain the desirable codes. If you wish to use codes other than those which are built-in, 
427         * you may also use the {@link #addRepresentation()} method.
428         *
429     * <p>
430     * <b>Definition:</b>
431     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
432     * </p> 
433         */
434        public BoundCodeDt<PropertyRepresentationEnum> addRepresentation(PropertyRepresentationEnum theValue) {
435                BoundCodeDt<PropertyRepresentationEnum> retVal = new BoundCodeDt<PropertyRepresentationEnum>(PropertyRepresentationEnum.VALUESET_BINDER, theValue);
436                getRepresentation().add(retVal);
437                return retVal;
438        }
439
440        /**
441         * Gets the first repetition for <b>representation</b> (),
442         * creating it if it does not already exist.
443         *
444     * <p>
445     * <b>Definition:</b>
446     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
447     * </p> 
448         */
449        public BoundCodeDt<PropertyRepresentationEnum> getRepresentationFirstRep() {
450                if (getRepresentation().size() == 0) {
451                        addRepresentation();
452                }
453                return getRepresentation().get(0);
454        }
455
456        /**
457         * Add a value for <b>representation</b> ()
458         *
459     * <p>
460     * <b>Definition:</b>
461     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
462     * </p> 
463         */
464        public BoundCodeDt<PropertyRepresentationEnum> addRepresentation() {
465                BoundCodeDt<PropertyRepresentationEnum> retVal = new BoundCodeDt<PropertyRepresentationEnum>(PropertyRepresentationEnum.VALUESET_BINDER);
466                getRepresentation().add(retVal);
467                return retVal;
468        }
469
470        /**
471         * Sets the value(s), and clears any existing value(s) for <b>representation</b> ()
472         *
473     * <p>
474     * <b>Definition:</b>
475     * Codes that define how this element is represented in instances, when the deviation varies from the normal case
476     * </p> 
477         */
478        public ElementDefinitionDt setRepresentation(PropertyRepresentationEnum theValue) {
479                getRepresentation().clear();
480                addRepresentation(theValue);
481                return this;
482        }
483
484  
485        /**
486         * Gets the value(s) for <b>name</b> ().
487         * creating it if it does
488         * not exist. Will not return <code>null</code>.
489         *
490     * <p>
491     * <b>Definition:</b>
492     * The name of this element definition (to refer to it from other element definitions using ElementDefinition.nameReference). This is a unique name referring to a specific set of constraints applied to this element. One use of this is to provide a name to different slices of the same element
493     * </p> 
494         */
495        public StringDt getNameElement() {  
496                if (myName == null) {
497                        myName = new StringDt();
498                }
499                return myName;
500        }
501
502        
503        /**
504         * Gets the value(s) for <b>name</b> ().
505         * creating it if it does
506         * not exist. Will not return <code>null</code>.
507         *
508     * <p>
509     * <b>Definition:</b>
510     * The name of this element definition (to refer to it from other element definitions using ElementDefinition.nameReference). This is a unique name referring to a specific set of constraints applied to this element. One use of this is to provide a name to different slices of the same element
511     * </p> 
512         */
513        public String getName() {  
514                return getNameElement().getValue();
515        }
516
517        /**
518         * Sets the value(s) for <b>name</b> ()
519         *
520     * <p>
521     * <b>Definition:</b>
522     * The name of this element definition (to refer to it from other element definitions using ElementDefinition.nameReference). This is a unique name referring to a specific set of constraints applied to this element. One use of this is to provide a name to different slices of the same element
523     * </p> 
524         */
525        public ElementDefinitionDt setName(StringDt theValue) {
526                myName = theValue;
527                return this;
528        }
529        
530        
531
532        /**
533         * Sets the value for <b>name</b> ()
534         *
535     * <p>
536     * <b>Definition:</b>
537     * The name of this element definition (to refer to it from other element definitions using ElementDefinition.nameReference). This is a unique name referring to a specific set of constraints applied to this element. One use of this is to provide a name to different slices of the same element
538     * </p> 
539         */
540        public ElementDefinitionDt setName( String theString) {
541                myName = new StringDt(theString); 
542                return this; 
543        }
544
545 
546        /**
547         * Gets the value(s) for <b>label</b> ().
548         * creating it if it does
549         * not exist. Will not return <code>null</code>.
550         *
551     * <p>
552     * <b>Definition:</b>
553     * The text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
554     * </p> 
555         */
556        public StringDt getLabelElement() {  
557                if (myLabel == null) {
558                        myLabel = new StringDt();
559                }
560                return myLabel;
561        }
562
563        
564        /**
565         * Gets the value(s) for <b>label</b> ().
566         * creating it if it does
567         * not exist. Will not return <code>null</code>.
568         *
569     * <p>
570     * <b>Definition:</b>
571     * The text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
572     * </p> 
573         */
574        public String getLabel() {  
575                return getLabelElement().getValue();
576        }
577
578        /**
579         * Sets the value(s) for <b>label</b> ()
580         *
581     * <p>
582     * <b>Definition:</b>
583     * The text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
584     * </p> 
585         */
586        public ElementDefinitionDt setLabel(StringDt theValue) {
587                myLabel = theValue;
588                return this;
589        }
590        
591        
592
593        /**
594         * Sets the value for <b>label</b> ()
595         *
596     * <p>
597     * <b>Definition:</b>
598     * The text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.
599     * </p> 
600         */
601        public ElementDefinitionDt setLabel( String theString) {
602                myLabel = new StringDt(theString); 
603                return this; 
604        }
605
606 
607        /**
608         * Gets the value(s) for <b>code</b> ().
609         * creating it if it does
610         * not exist. Will not return <code>null</code>.
611         *
612     * <p>
613     * <b>Definition:</b>
614     * A code that provides the meaning for the element according to a particular terminology.
615     * </p> 
616         */
617        public java.util.List<CodingDt> getCode() {  
618                if (myCode == null) {
619                        myCode = new java.util.ArrayList<CodingDt>();
620                }
621                return myCode;
622        }
623
624        /**
625         * Sets the value(s) for <b>code</b> ()
626         *
627     * <p>
628     * <b>Definition:</b>
629     * A code that provides the meaning for the element according to a particular terminology.
630     * </p> 
631         */
632        public ElementDefinitionDt setCode(java.util.List<CodingDt> theValue) {
633                myCode = theValue;
634                return this;
635        }
636        
637        
638
639        /**
640         * Adds and returns a new value for <b>code</b> ()
641         *
642     * <p>
643     * <b>Definition:</b>
644     * A code that provides the meaning for the element according to a particular terminology.
645     * </p> 
646         */
647        public CodingDt addCode() {
648                CodingDt newType = new CodingDt();
649                getCode().add(newType);
650                return newType; 
651        }
652
653        /**
654         * Adds a given new value for <b>code</b> ()
655         *
656         * <p>
657         * <b>Definition:</b>
658         * A code that provides the meaning for the element according to a particular terminology.
659         * </p>
660         * @param theValue The code to add (must not be <code>null</code>)
661         */
662        public ElementDefinitionDt addCode(CodingDt theValue) {
663                if (theValue == null) {
664                        throw new NullPointerException("theValue must not be null");
665                }
666                getCode().add(theValue);
667                return this;
668        }
669
670        /**
671         * Gets the first repetition for <b>code</b> (),
672         * creating it if it does not already exist.
673         *
674     * <p>
675     * <b>Definition:</b>
676     * A code that provides the meaning for the element according to a particular terminology.
677     * </p> 
678         */
679        public CodingDt getCodeFirstRep() {
680                if (getCode().isEmpty()) {
681                        return addCode();
682                }
683                return getCode().get(0); 
684        }
685  
686        /**
687         * Gets the value(s) for <b>slicing</b> ().
688         * creating it if it does
689         * not exist. Will not return <code>null</code>.
690         *
691     * <p>
692     * <b>Definition:</b>
693     * 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)
694     * </p> 
695         */
696        public Slicing getSlicing() {  
697                if (mySlicing == null) {
698                        mySlicing = new Slicing();
699                }
700                return mySlicing;
701        }
702
703        /**
704         * Sets the value(s) for <b>slicing</b> ()
705         *
706     * <p>
707     * <b>Definition:</b>
708     * 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)
709     * </p> 
710         */
711        public ElementDefinitionDt setSlicing(Slicing theValue) {
712                mySlicing = theValue;
713                return this;
714        }
715        
716        
717
718  
719        /**
720         * Gets the value(s) for <b>short</b> ().
721         * creating it if it does
722         * not exist. Will not return <code>null</code>.
723         *
724     * <p>
725     * <b>Definition:</b>
726     * A concise description of what this element means (e.g. for use in autogenerated summaries)
727     * </p> 
728         */
729        public StringDt getShortElement() {  
730                if (myShort == null) {
731                        myShort = new StringDt();
732                }
733                return myShort;
734        }
735
736        
737        /**
738         * Gets the value(s) for <b>short</b> ().
739         * creating it if it does
740         * not exist. Will not return <code>null</code>.
741         *
742     * <p>
743     * <b>Definition:</b>
744     * A concise description of what this element means (e.g. for use in autogenerated summaries)
745     * </p> 
746         */
747        public String getShort() {  
748                return getShortElement().getValue();
749        }
750
751        /**
752         * Sets the value(s) for <b>short</b> ()
753         *
754     * <p>
755     * <b>Definition:</b>
756     * A concise description of what this element means (e.g. for use in autogenerated summaries)
757     * </p> 
758         */
759        public ElementDefinitionDt setShort(StringDt theValue) {
760                myShort = theValue;
761                return this;
762        }
763        
764        
765
766        /**
767         * Sets the value for <b>short</b> ()
768         *
769     * <p>
770     * <b>Definition:</b>
771     * A concise description of what this element means (e.g. for use in autogenerated summaries)
772     * </p> 
773         */
774        public ElementDefinitionDt setShort( String theString) {
775                myShort = new StringDt(theString); 
776                return this; 
777        }
778
779 
780        /**
781         * Gets the value(s) for <b>definition</b> ().
782         * creating it if it does
783         * not exist. Will not return <code>null</code>.
784         *
785     * <p>
786     * <b>Definition:</b>
787     * 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
788     * </p> 
789         */
790        public MarkdownDt getDefinitionElement() {  
791                if (myDefinition == null) {
792                        myDefinition = new MarkdownDt();
793                }
794                return myDefinition;
795        }
796
797        
798        /**
799         * Gets the value(s) for <b>definition</b> ().
800         * creating it if it does
801         * not exist. Will not return <code>null</code>.
802         *
803     * <p>
804     * <b>Definition:</b>
805     * 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
806     * </p> 
807         */
808        public String getDefinition() {  
809                return getDefinitionElement().getValue();
810        }
811
812        /**
813         * Sets the value(s) for <b>definition</b> ()
814         *
815     * <p>
816     * <b>Definition:</b>
817     * 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
818     * </p> 
819         */
820        public ElementDefinitionDt setDefinition(MarkdownDt theValue) {
821                myDefinition = theValue;
822                return this;
823        }
824        
825        
826
827  
828        /**
829         * Gets the value(s) for <b>comments</b> ().
830         * creating it if it does
831         * not exist. Will not return <code>null</code>.
832         *
833     * <p>
834     * <b>Definition:</b>
835     * Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc.
836     * </p> 
837         */
838        public MarkdownDt getCommentsElement() {  
839                if (myComments == null) {
840                        myComments = new MarkdownDt();
841                }
842                return myComments;
843        }
844
845        
846        /**
847         * Gets the value(s) for <b>comments</b> ().
848         * creating it if it does
849         * not exist. Will not return <code>null</code>.
850         *
851     * <p>
852     * <b>Definition:</b>
853     * Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc.
854     * </p> 
855         */
856        public String getComments() {  
857                return getCommentsElement().getValue();
858        }
859
860        /**
861         * Sets the value(s) for <b>comments</b> ()
862         *
863     * <p>
864     * <b>Definition:</b>
865     * Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc.
866     * </p> 
867         */
868        public ElementDefinitionDt setComments(MarkdownDt theValue) {
869                myComments = theValue;
870                return this;
871        }
872        
873        
874
875  
876        /**
877         * Gets the value(s) for <b>requirements</b> ().
878         * creating it if it does
879         * not exist. Will not return <code>null</code>.
880         *
881     * <p>
882     * <b>Definition:</b>
883     * 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.
884     * </p> 
885         */
886        public MarkdownDt getRequirementsElement() {  
887                if (myRequirements == null) {
888                        myRequirements = new MarkdownDt();
889                }
890                return myRequirements;
891        }
892
893        
894        /**
895         * Gets the value(s) for <b>requirements</b> ().
896         * creating it if it does
897         * not exist. Will not return <code>null</code>.
898         *
899     * <p>
900     * <b>Definition:</b>
901     * 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.
902     * </p> 
903         */
904        public String getRequirements() {  
905                return getRequirementsElement().getValue();
906        }
907
908        /**
909         * Sets the value(s) for <b>requirements</b> ()
910         *
911     * <p>
912     * <b>Definition:</b>
913     * 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.
914     * </p> 
915         */
916        public ElementDefinitionDt setRequirements(MarkdownDt theValue) {
917                myRequirements = theValue;
918                return this;
919        }
920        
921        
922
923  
924        /**
925         * Gets the value(s) for <b>alias</b> ().
926         * creating it if it does
927         * not exist. Will not return <code>null</code>.
928         *
929     * <p>
930     * <b>Definition:</b>
931     * Identifies additional names by which this element might also be known
932     * </p> 
933         */
934        public java.util.List<StringDt> getAlias() {  
935                if (myAlias == null) {
936                        myAlias = new java.util.ArrayList<StringDt>();
937                }
938                return myAlias;
939        }
940
941        /**
942         * Sets the value(s) for <b>alias</b> ()
943         *
944     * <p>
945     * <b>Definition:</b>
946     * Identifies additional names by which this element might also be known
947     * </p> 
948         */
949        public ElementDefinitionDt setAlias(java.util.List<StringDt> theValue) {
950                myAlias = theValue;
951                return this;
952        }
953        
954        
955
956        /**
957         * Adds and returns a new value for <b>alias</b> ()
958         *
959     * <p>
960     * <b>Definition:</b>
961     * Identifies additional names by which this element might also be known
962     * </p> 
963         */
964        public StringDt addAlias() {
965                StringDt newType = new StringDt();
966                getAlias().add(newType);
967                return newType; 
968        }
969
970        /**
971         * Adds a given new value for <b>alias</b> ()
972         *
973         * <p>
974         * <b>Definition:</b>
975         * Identifies additional names by which this element might also be known
976         * </p>
977         * @param theValue The alias to add (must not be <code>null</code>)
978         */
979        public ElementDefinitionDt addAlias(StringDt theValue) {
980                if (theValue == null) {
981                        throw new NullPointerException("theValue must not be null");
982                }
983                getAlias().add(theValue);
984                return this;
985        }
986
987        /**
988         * Gets the first repetition for <b>alias</b> (),
989         * creating it if it does not already exist.
990         *
991     * <p>
992     * <b>Definition:</b>
993     * Identifies additional names by which this element might also be known
994     * </p> 
995         */
996        public StringDt getAliasFirstRep() {
997                if (getAlias().isEmpty()) {
998                        return addAlias();
999                }
1000                return getAlias().get(0); 
1001        }
1002        /**
1003         * Adds a new value for <b>alias</b> ()
1004         *
1005     * <p>
1006     * <b>Definition:</b>
1007     * Identifies additional names by which this element might also be known
1008     * </p> 
1009     *
1010     * @return Returns a reference to this object, to allow for simple chaining.
1011         */
1012        public ElementDefinitionDt addAlias( String theString) {
1013                if (myAlias == null) {
1014                        myAlias = new java.util.ArrayList<StringDt>();
1015                }
1016                myAlias.add(new StringDt(theString));
1017                return this; 
1018        }
1019
1020 
1021        /**
1022         * Gets the value(s) for <b>min</b> ().
1023         * creating it if it does
1024         * not exist. Will not return <code>null</code>.
1025         *
1026     * <p>
1027     * <b>Definition:</b>
1028     * The minimum number of times this element SHALL appear in the instance
1029     * </p> 
1030         */
1031        public IntegerDt getMinElement() {  
1032                if (myMin == null) {
1033                        myMin = new IntegerDt();
1034                }
1035                return myMin;
1036        }
1037
1038        
1039        /**
1040         * Gets the value(s) for <b>min</b> ().
1041         * creating it if it does
1042         * not exist. Will not return <code>null</code>.
1043         *
1044     * <p>
1045     * <b>Definition:</b>
1046     * The minimum number of times this element SHALL appear in the instance
1047     * </p> 
1048         */
1049        public Integer getMin() {  
1050                return getMinElement().getValue();
1051        }
1052
1053        /**
1054         * Sets the value(s) for <b>min</b> ()
1055         *
1056     * <p>
1057     * <b>Definition:</b>
1058     * The minimum number of times this element SHALL appear in the instance
1059     * </p> 
1060         */
1061        public ElementDefinitionDt setMin(IntegerDt theValue) {
1062                myMin = theValue;
1063                return this;
1064        }
1065        
1066        
1067
1068        /**
1069         * Sets the value for <b>min</b> ()
1070         *
1071     * <p>
1072     * <b>Definition:</b>
1073     * The minimum number of times this element SHALL appear in the instance
1074     * </p> 
1075         */
1076        public ElementDefinitionDt setMin( int theInteger) {
1077                myMin = new IntegerDt(theInteger); 
1078                return this; 
1079        }
1080
1081 
1082        /**
1083         * Gets the value(s) for <b>max</b> ().
1084         * creating it if it does
1085         * not exist. Will not return <code>null</code>.
1086         *
1087     * <p>
1088     * <b>Definition:</b>
1089     * The maximum number of times this element is permitted to appear in the instance
1090     * </p> 
1091         */
1092        public StringDt getMaxElement() {  
1093                if (myMax == null) {
1094                        myMax = new StringDt();
1095                }
1096                return myMax;
1097        }
1098
1099        
1100        /**
1101         * Gets the value(s) for <b>max</b> ().
1102         * creating it if it does
1103         * not exist. Will not return <code>null</code>.
1104         *
1105     * <p>
1106     * <b>Definition:</b>
1107     * The maximum number of times this element is permitted to appear in the instance
1108     * </p> 
1109         */
1110        public String getMax() {  
1111                return getMaxElement().getValue();
1112        }
1113
1114        /**
1115         * Sets the value(s) for <b>max</b> ()
1116         *
1117     * <p>
1118     * <b>Definition:</b>
1119     * The maximum number of times this element is permitted to appear in the instance
1120     * </p> 
1121         */
1122        public ElementDefinitionDt setMax(StringDt theValue) {
1123                myMax = theValue;
1124                return this;
1125        }
1126        
1127        
1128
1129        /**
1130         * Sets the value for <b>max</b> ()
1131         *
1132     * <p>
1133     * <b>Definition:</b>
1134     * The maximum number of times this element is permitted to appear in the instance
1135     * </p> 
1136         */
1137        public ElementDefinitionDt setMax( String theString) {
1138                myMax = new StringDt(theString); 
1139                return this; 
1140        }
1141
1142 
1143        /**
1144         * Gets the value(s) for <b>base</b> ().
1145         * creating it if it does
1146         * not exist. Will not return <code>null</code>.
1147         *
1148     * <p>
1149     * <b>Definition:</b>
1150     * Information about the base definition of the element, provided to make it unncessary for tools to trace the deviation of the element through the derived and related profiles. This information is only provided where the element definition represents a constraint on another element definition, and must be present if there is a base element definition.
1151     * </p> 
1152         */
1153        public Base getBase() {  
1154                if (myBase == null) {
1155                        myBase = new Base();
1156                }
1157                return myBase;
1158        }
1159
1160        /**
1161         * Sets the value(s) for <b>base</b> ()
1162         *
1163     * <p>
1164     * <b>Definition:</b>
1165     * Information about the base definition of the element, provided to make it unncessary for tools to trace the deviation of the element through the derived and related profiles. This information is only provided where the element definition represents a constraint on another element definition, and must be present if there is a base element definition.
1166     * </p> 
1167         */
1168        public ElementDefinitionDt setBase(Base theValue) {
1169                myBase = theValue;
1170                return this;
1171        }
1172        
1173        
1174
1175  
1176        /**
1177         * Gets the value(s) for <b>type</b> ().
1178         * creating it if it does
1179         * not exist. Will not return <code>null</code>.
1180         *
1181     * <p>
1182     * <b>Definition:</b>
1183     * The data type or resource that the value of this element is permitted to be
1184     * </p> 
1185         */
1186        public java.util.List<Type> getType() {  
1187                if (myType == null) {
1188                        myType = new java.util.ArrayList<Type>();
1189                }
1190                return myType;
1191        }
1192
1193        /**
1194         * Sets the value(s) for <b>type</b> ()
1195         *
1196     * <p>
1197     * <b>Definition:</b>
1198     * The data type or resource that the value of this element is permitted to be
1199     * </p> 
1200         */
1201        public ElementDefinitionDt setType(java.util.List<Type> theValue) {
1202                myType = theValue;
1203                return this;
1204        }
1205        
1206        
1207
1208        /**
1209         * Adds and returns a new value for <b>type</b> ()
1210         *
1211     * <p>
1212     * <b>Definition:</b>
1213     * The data type or resource that the value of this element is permitted to be
1214     * </p> 
1215         */
1216        public Type addType() {
1217                Type newType = new Type();
1218                getType().add(newType);
1219                return newType; 
1220        }
1221
1222        /**
1223         * Adds a given new value for <b>type</b> ()
1224         *
1225         * <p>
1226         * <b>Definition:</b>
1227         * The data type or resource that the value of this element is permitted to be
1228         * </p>
1229         * @param theValue The type to add (must not be <code>null</code>)
1230         */
1231        public ElementDefinitionDt addType(Type theValue) {
1232                if (theValue == null) {
1233                        throw new NullPointerException("theValue must not be null");
1234                }
1235                getType().add(theValue);
1236                return this;
1237        }
1238
1239        /**
1240         * Gets the first repetition for <b>type</b> (),
1241         * creating it if it does not already exist.
1242         *
1243     * <p>
1244     * <b>Definition:</b>
1245     * The data type or resource that the value of this element is permitted to be
1246     * </p> 
1247         */
1248        public Type getTypeFirstRep() {
1249                if (getType().isEmpty()) {
1250                        return addType();
1251                }
1252                return getType().get(0); 
1253        }
1254  
1255        /**
1256         * Gets the value(s) for <b>nameReference</b> ().
1257         * creating it if it does
1258         * not exist. Will not return <code>null</code>.
1259         *
1260     * <p>
1261     * <b>Definition:</b>
1262     * Identifies the name of a slice defined elsewhere in the profile whose constraints should be applied to the current element
1263     * </p> 
1264         */
1265        public StringDt getNameReferenceElement() {  
1266                if (myNameReference == null) {
1267                        myNameReference = new StringDt();
1268                }
1269                return myNameReference;
1270        }
1271
1272        
1273        /**
1274         * Gets the value(s) for <b>nameReference</b> ().
1275         * creating it if it does
1276         * not exist. Will not return <code>null</code>.
1277         *
1278     * <p>
1279     * <b>Definition:</b>
1280     * Identifies the name of a slice defined elsewhere in the profile whose constraints should be applied to the current element
1281     * </p> 
1282         */
1283        public String getNameReference() {  
1284                return getNameReferenceElement().getValue();
1285        }
1286
1287        /**
1288         * Sets the value(s) for <b>nameReference</b> ()
1289         *
1290     * <p>
1291     * <b>Definition:</b>
1292     * Identifies the name of a slice defined elsewhere in the profile whose constraints should be applied to the current element
1293     * </p> 
1294         */
1295        public ElementDefinitionDt setNameReference(StringDt theValue) {
1296                myNameReference = theValue;
1297                return this;
1298        }
1299        
1300        
1301
1302        /**
1303         * Sets the value for <b>nameReference</b> ()
1304         *
1305     * <p>
1306     * <b>Definition:</b>
1307     * Identifies the name of a slice defined elsewhere in the profile whose constraints should be applied to the current element
1308     * </p> 
1309         */
1310        public ElementDefinitionDt setNameReference( String theString) {
1311                myNameReference = new StringDt(theString); 
1312                return this; 
1313        }
1314
1315 
1316        /**
1317         * Gets the value(s) for <b>defaultValue[x]</b> ().
1318         * creating it if it does
1319         * not exist. Will not return <code>null</code>.
1320         *
1321     * <p>
1322     * <b>Definition:</b>
1323     * 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')
1324     * </p> 
1325         */
1326        public IDatatype getDefaultValue() {  
1327                return myDefaultValue;
1328        }
1329
1330        /**
1331         * Sets the value(s) for <b>defaultValue[x]</b> ()
1332         *
1333     * <p>
1334     * <b>Definition:</b>
1335     * 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')
1336     * </p> 
1337         */
1338        public ElementDefinitionDt setDefaultValue(IDatatype theValue) {
1339                myDefaultValue = theValue;
1340                return this;
1341        }
1342        
1343        
1344
1345  
1346        /**
1347         * Gets the value(s) for <b>meaningWhenMissing</b> ().
1348         * creating it if it does
1349         * not exist. Will not return <code>null</code>.
1350         *
1351     * <p>
1352     * <b>Definition:</b>
1353     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing'
1354     * </p> 
1355         */
1356        public MarkdownDt getMeaningWhenMissingElement() {  
1357                if (myMeaningWhenMissing == null) {
1358                        myMeaningWhenMissing = new MarkdownDt();
1359                }
1360                return myMeaningWhenMissing;
1361        }
1362
1363        
1364        /**
1365         * Gets the value(s) for <b>meaningWhenMissing</b> ().
1366         * creating it if it does
1367         * not exist. Will not return <code>null</code>.
1368         *
1369     * <p>
1370     * <b>Definition:</b>
1371     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing'
1372     * </p> 
1373         */
1374        public String getMeaningWhenMissing() {  
1375                return getMeaningWhenMissingElement().getValue();
1376        }
1377
1378        /**
1379         * Sets the value(s) for <b>meaningWhenMissing</b> ()
1380         *
1381     * <p>
1382     * <b>Definition:</b>
1383     * The Implicit meaning that is to be understood when this element is missing (e.g. 'when this element is missing, the period is ongoing'
1384     * </p> 
1385         */
1386        public ElementDefinitionDt setMeaningWhenMissing(MarkdownDt theValue) {
1387                myMeaningWhenMissing = theValue;
1388                return this;
1389        }
1390        
1391        
1392
1393  
1394        /**
1395         * Gets the value(s) for <b>fixed[x]</b> ().
1396         * creating it if it does
1397         * not exist. Will not return <code>null</code>.
1398         *
1399     * <p>
1400     * <b>Definition:</b>
1401     * Specifies a value that SHALL be exactly the value  for this element in the instance. 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.
1402     * </p> 
1403         */
1404        public IDatatype getFixed() {  
1405                return myFixed;
1406        }
1407
1408        /**
1409         * Sets the value(s) for <b>fixed[x]</b> ()
1410         *
1411     * <p>
1412     * <b>Definition:</b>
1413     * Specifies a value that SHALL be exactly the value  for this element in the instance. 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.
1414     * </p> 
1415         */
1416        public ElementDefinitionDt setFixed(IDatatype theValue) {
1417                myFixed = theValue;
1418                return this;
1419        }
1420        
1421        
1422
1423  
1424        /**
1425         * Gets the value(s) for <b>pattern[x]</b> ().
1426         * creating it if it does
1427         * not exist. Will not return <code>null</code>.
1428         *
1429     * <p>
1430     * <b>Definition:</b>
1431     * Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
1432     * </p> 
1433         */
1434        public IDatatype getPattern() {  
1435                return myPattern;
1436        }
1437
1438        /**
1439         * Sets the value(s) for <b>pattern[x]</b> ()
1440         *
1441     * <p>
1442     * <b>Definition:</b>
1443     * Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example.  The values of elements present in the pattern must match exactly (case-sensitive, accent-sensitive, etc.).
1444     * </p> 
1445         */
1446        public ElementDefinitionDt setPattern(IDatatype theValue) {
1447                myPattern = theValue;
1448                return this;
1449        }
1450        
1451        
1452
1453  
1454        /**
1455         * Gets the value(s) for <b>example[x]</b> ().
1456         * creating it if it does
1457         * not exist. Will not return <code>null</code>.
1458         *
1459     * <p>
1460     * <b>Definition:</b>
1461     * A sample value for this element demonstrating the type of information that would typically be captured.
1462     * </p> 
1463         */
1464        public IDatatype getExample() {  
1465                return myExample;
1466        }
1467
1468        /**
1469         * Sets the value(s) for <b>example[x]</b> ()
1470         *
1471     * <p>
1472     * <b>Definition:</b>
1473     * A sample value for this element demonstrating the type of information that would typically be captured.
1474     * </p> 
1475         */
1476        public ElementDefinitionDt setExample(IDatatype theValue) {
1477                myExample = theValue;
1478                return this;
1479        }
1480        
1481        
1482
1483  
1484        /**
1485         * Gets the value(s) for <b>minValue[x]</b> ().
1486         * creating it if it does
1487         * not exist. Will not return <code>null</code>.
1488         *
1489     * <p>
1490     * <b>Definition:</b>
1491     * 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
1492     * </p> 
1493         */
1494        public IDatatype getMinValue() {  
1495                return myMinValue;
1496        }
1497
1498        /**
1499         * Sets the value(s) for <b>minValue[x]</b> ()
1500         *
1501     * <p>
1502     * <b>Definition:</b>
1503     * 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
1504     * </p> 
1505         */
1506        public ElementDefinitionDt setMinValue(IDatatype theValue) {
1507                myMinValue = theValue;
1508                return this;
1509        }
1510        
1511        
1512
1513  
1514        /**
1515         * Gets the value(s) for <b>maxValue[x]</b> ().
1516         * creating it if it does
1517         * not exist. Will not return <code>null</code>.
1518         *
1519     * <p>
1520     * <b>Definition:</b>
1521     * 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
1522     * </p> 
1523         */
1524        public IDatatype getMaxValue() {  
1525                return myMaxValue;
1526        }
1527
1528        /**
1529         * Sets the value(s) for <b>maxValue[x]</b> ()
1530         *
1531     * <p>
1532     * <b>Definition:</b>
1533     * 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
1534     * </p> 
1535         */
1536        public ElementDefinitionDt setMaxValue(IDatatype theValue) {
1537                myMaxValue = theValue;
1538                return this;
1539        }
1540        
1541        
1542
1543  
1544        /**
1545         * Gets the value(s) for <b>maxLength</b> ().
1546         * creating it if it does
1547         * not exist. Will not return <code>null</code>.
1548         *
1549     * <p>
1550     * <b>Definition:</b>
1551     * 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
1552     * </p> 
1553         */
1554        public IntegerDt getMaxLengthElement() {  
1555                if (myMaxLength == null) {
1556                        myMaxLength = new IntegerDt();
1557                }
1558                return myMaxLength;
1559        }
1560
1561        
1562        /**
1563         * Gets the value(s) for <b>maxLength</b> ().
1564         * creating it if it does
1565         * not exist. Will not return <code>null</code>.
1566         *
1567     * <p>
1568     * <b>Definition:</b>
1569     * 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
1570     * </p> 
1571         */
1572        public Integer getMaxLength() {  
1573                return getMaxLengthElement().getValue();
1574        }
1575
1576        /**
1577         * Sets the value(s) for <b>maxLength</b> ()
1578         *
1579     * <p>
1580     * <b>Definition:</b>
1581     * 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
1582     * </p> 
1583         */
1584        public ElementDefinitionDt setMaxLength(IntegerDt theValue) {
1585                myMaxLength = theValue;
1586                return this;
1587        }
1588        
1589        
1590
1591        /**
1592         * Sets the value for <b>maxLength</b> ()
1593         *
1594     * <p>
1595     * <b>Definition:</b>
1596     * 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
1597     * </p> 
1598         */
1599        public ElementDefinitionDt setMaxLength( int theInteger) {
1600                myMaxLength = new IntegerDt(theInteger); 
1601                return this; 
1602        }
1603
1604 
1605        /**
1606         * Gets the value(s) for <b>condition</b> ().
1607         * creating it if it does
1608         * not exist. Will not return <code>null</code>.
1609         *
1610     * <p>
1611     * <b>Definition:</b>
1612     * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1613     * </p> 
1614         */
1615        public java.util.List<IdDt> getCondition() {  
1616                if (myCondition == null) {
1617                        myCondition = new java.util.ArrayList<IdDt>();
1618                }
1619                return myCondition;
1620        }
1621
1622        /**
1623         * Sets the value(s) for <b>condition</b> ()
1624         *
1625     * <p>
1626     * <b>Definition:</b>
1627     * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1628     * </p> 
1629         */
1630        public ElementDefinitionDt setCondition(java.util.List<IdDt> theValue) {
1631                myCondition = theValue;
1632                return this;
1633        }
1634        
1635        
1636
1637        /**
1638         * Adds and returns a new value for <b>condition</b> ()
1639         *
1640     * <p>
1641     * <b>Definition:</b>
1642     * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1643     * </p> 
1644         */
1645        public IdDt addCondition() {
1646                IdDt newType = new IdDt();
1647                getCondition().add(newType);
1648                return newType; 
1649        }
1650
1651        /**
1652         * Adds a given new value for <b>condition</b> ()
1653         *
1654         * <p>
1655         * <b>Definition:</b>
1656         * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1657         * </p>
1658         * @param theValue The condition to add (must not be <code>null</code>)
1659         */
1660        public ElementDefinitionDt addCondition(IdDt theValue) {
1661                if (theValue == null) {
1662                        throw new NullPointerException("theValue must not be null");
1663                }
1664                getCondition().add(theValue);
1665                return this;
1666        }
1667
1668        /**
1669         * Gets the first repetition for <b>condition</b> (),
1670         * creating it if it does not already exist.
1671         *
1672     * <p>
1673     * <b>Definition:</b>
1674     * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1675     * </p> 
1676         */
1677        public IdDt getConditionFirstRep() {
1678                if (getCondition().isEmpty()) {
1679                        return addCondition();
1680                }
1681                return getCondition().get(0); 
1682        }
1683        /**
1684         * Adds a new value for <b>condition</b> ()
1685         *
1686     * <p>
1687     * <b>Definition:</b>
1688     * A reference to an invariant that may make additional statements about the cardinality or value in the instance
1689     * </p> 
1690     *
1691     * @return Returns a reference to this object, to allow for simple chaining.
1692         */
1693        public ElementDefinitionDt addCondition( String theId) {
1694                if (myCondition == null) {
1695                        myCondition = new java.util.ArrayList<IdDt>();
1696                }
1697                myCondition.add(new IdDt(theId));
1698                return this; 
1699        }
1700
1701 
1702        /**
1703         * Gets the value(s) for <b>constraint</b> ().
1704         * creating it if it does
1705         * not exist. Will not return <code>null</code>.
1706         *
1707     * <p>
1708     * <b>Definition:</b>
1709     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
1710     * </p> 
1711         */
1712        public java.util.List<Constraint> getConstraint() {  
1713                if (myConstraint == null) {
1714                        myConstraint = new java.util.ArrayList<Constraint>();
1715                }
1716                return myConstraint;
1717        }
1718
1719        /**
1720         * Sets the value(s) for <b>constraint</b> ()
1721         *
1722     * <p>
1723     * <b>Definition:</b>
1724     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
1725     * </p> 
1726         */
1727        public ElementDefinitionDt setConstraint(java.util.List<Constraint> theValue) {
1728                myConstraint = theValue;
1729                return this;
1730        }
1731        
1732        
1733
1734        /**
1735         * Adds and returns a new value for <b>constraint</b> ()
1736         *
1737     * <p>
1738     * <b>Definition:</b>
1739     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
1740     * </p> 
1741         */
1742        public Constraint addConstraint() {
1743                Constraint newType = new Constraint();
1744                getConstraint().add(newType);
1745                return newType; 
1746        }
1747
1748        /**
1749         * Adds a given new value for <b>constraint</b> ()
1750         *
1751         * <p>
1752         * <b>Definition:</b>
1753         * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
1754         * </p>
1755         * @param theValue The constraint to add (must not be <code>null</code>)
1756         */
1757        public ElementDefinitionDt addConstraint(Constraint theValue) {
1758                if (theValue == null) {
1759                        throw new NullPointerException("theValue must not be null");
1760                }
1761                getConstraint().add(theValue);
1762                return this;
1763        }
1764
1765        /**
1766         * Gets the first repetition for <b>constraint</b> (),
1767         * creating it if it does not already exist.
1768         *
1769     * <p>
1770     * <b>Definition:</b>
1771     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
1772     * </p> 
1773         */
1774        public Constraint getConstraintFirstRep() {
1775                if (getConstraint().isEmpty()) {
1776                        return addConstraint();
1777                }
1778                return getConstraint().get(0); 
1779        }
1780  
1781        /**
1782         * Gets the value(s) for <b>mustSupport</b> ().
1783         * creating it if it does
1784         * not exist. Will not return <code>null</code>.
1785         *
1786     * <p>
1787     * <b>Definition:</b>
1788     * If true, implementations that produce or consume resources SHALL provide \&quot;support\&quot; for the element in some meaningful way.  If false, the element may be ignored and not supported
1789     * </p> 
1790         */
1791        public BooleanDt getMustSupportElement() {  
1792                if (myMustSupport == null) {
1793                        myMustSupport = new BooleanDt();
1794                }
1795                return myMustSupport;
1796        }
1797
1798        
1799        /**
1800         * Gets the value(s) for <b>mustSupport</b> ().
1801         * creating it if it does
1802         * not exist. Will not return <code>null</code>.
1803         *
1804     * <p>
1805     * <b>Definition:</b>
1806     * If true, implementations that produce or consume resources SHALL provide \&quot;support\&quot; for the element in some meaningful way.  If false, the element may be ignored and not supported
1807     * </p> 
1808         */
1809        public Boolean getMustSupport() {  
1810                return getMustSupportElement().getValue();
1811        }
1812
1813        /**
1814         * Sets the value(s) for <b>mustSupport</b> ()
1815         *
1816     * <p>
1817     * <b>Definition:</b>
1818     * If true, implementations that produce or consume resources SHALL provide \&quot;support\&quot; for the element in some meaningful way.  If false, the element may be ignored and not supported
1819     * </p> 
1820         */
1821        public ElementDefinitionDt setMustSupport(BooleanDt theValue) {
1822                myMustSupport = theValue;
1823                return this;
1824        }
1825        
1826        
1827
1828        /**
1829         * Sets the value for <b>mustSupport</b> ()
1830         *
1831     * <p>
1832     * <b>Definition:</b>
1833     * If true, implementations that produce or consume resources SHALL provide \&quot;support\&quot; for the element in some meaningful way.  If false, the element may be ignored and not supported
1834     * </p> 
1835         */
1836        public ElementDefinitionDt setMustSupport( boolean theBoolean) {
1837                myMustSupport = new BooleanDt(theBoolean); 
1838                return this; 
1839        }
1840
1841 
1842        /**
1843         * Gets the value(s) for <b>isModifier</b> ().
1844         * creating it if it does
1845         * not exist. Will not return <code>null</code>.
1846         *
1847     * <p>
1848     * <b>Definition:</b>
1849     * 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.
1850     * </p> 
1851         */
1852        public BooleanDt getIsModifierElement() {  
1853                if (myIsModifier == null) {
1854                        myIsModifier = new BooleanDt();
1855                }
1856                return myIsModifier;
1857        }
1858
1859        
1860        /**
1861         * Gets the value(s) for <b>isModifier</b> ().
1862         * creating it if it does
1863         * not exist. Will not return <code>null</code>.
1864         *
1865     * <p>
1866     * <b>Definition:</b>
1867     * 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.
1868     * </p> 
1869         */
1870        public Boolean getIsModifier() {  
1871                return getIsModifierElement().getValue();
1872        }
1873
1874        /**
1875         * Sets the value(s) for <b>isModifier</b> ()
1876         *
1877     * <p>
1878     * <b>Definition:</b>
1879     * 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.
1880     * </p> 
1881         */
1882        public ElementDefinitionDt setIsModifier(BooleanDt theValue) {
1883                myIsModifier = theValue;
1884                return this;
1885        }
1886        
1887        
1888
1889        /**
1890         * Sets the value for <b>isModifier</b> ()
1891         *
1892     * <p>
1893     * <b>Definition:</b>
1894     * 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.
1895     * </p> 
1896         */
1897        public ElementDefinitionDt setIsModifier( boolean theBoolean) {
1898                myIsModifier = new BooleanDt(theBoolean); 
1899                return this; 
1900        }
1901
1902 
1903        /**
1904         * Gets the value(s) for <b>isSummary</b> ().
1905         * creating it if it does
1906         * not exist. Will not return <code>null</code>.
1907         *
1908     * <p>
1909     * <b>Definition:</b>
1910     * Whether the element should be included if a client requests a search with the parameter _summary=true
1911     * </p> 
1912         */
1913        public BooleanDt getIsSummaryElement() {  
1914                if (myIsSummary == null) {
1915                        myIsSummary = new BooleanDt();
1916                }
1917                return myIsSummary;
1918        }
1919
1920        
1921        /**
1922         * Gets the value(s) for <b>isSummary</b> ().
1923         * creating it if it does
1924         * not exist. Will not return <code>null</code>.
1925         *
1926     * <p>
1927     * <b>Definition:</b>
1928     * Whether the element should be included if a client requests a search with the parameter _summary=true
1929     * </p> 
1930         */
1931        public Boolean getIsSummary() {  
1932                return getIsSummaryElement().getValue();
1933        }
1934
1935        /**
1936         * Sets the value(s) for <b>isSummary</b> ()
1937         *
1938     * <p>
1939     * <b>Definition:</b>
1940     * Whether the element should be included if a client requests a search with the parameter _summary=true
1941     * </p> 
1942         */
1943        public ElementDefinitionDt setIsSummary(BooleanDt theValue) {
1944                myIsSummary = theValue;
1945                return this;
1946        }
1947        
1948        
1949
1950        /**
1951         * Sets the value for <b>isSummary</b> ()
1952         *
1953     * <p>
1954     * <b>Definition:</b>
1955     * Whether the element should be included if a client requests a search with the parameter _summary=true
1956     * </p> 
1957         */
1958        public ElementDefinitionDt setIsSummary( boolean theBoolean) {
1959                myIsSummary = new BooleanDt(theBoolean); 
1960                return this; 
1961        }
1962
1963 
1964        /**
1965         * Gets the value(s) for <b>binding</b> ().
1966         * creating it if it does
1967         * not exist. Will not return <code>null</code>.
1968         *
1969     * <p>
1970     * <b>Definition:</b>
1971     * Binds to a value set if this element is coded (code, Coding, CodeableConcept)
1972     * </p> 
1973         */
1974        public Binding getBinding() {  
1975                if (myBinding == null) {
1976                        myBinding = new Binding();
1977                }
1978                return myBinding;
1979        }
1980
1981        /**
1982         * Sets the value(s) for <b>binding</b> ()
1983         *
1984     * <p>
1985     * <b>Definition:</b>
1986     * Binds to a value set if this element is coded (code, Coding, CodeableConcept)
1987     * </p> 
1988         */
1989        public ElementDefinitionDt setBinding(Binding theValue) {
1990                myBinding = theValue;
1991                return this;
1992        }
1993        
1994        
1995
1996  
1997        /**
1998         * Gets the value(s) for <b>mapping</b> ().
1999         * creating it if it does
2000         * not exist. Will not return <code>null</code>.
2001         *
2002     * <p>
2003     * <b>Definition:</b>
2004     * Identifies a concept from an external specification that roughly corresponds to this element
2005     * </p> 
2006         */
2007        public java.util.List<Mapping> getMapping() {  
2008                if (myMapping == null) {
2009                        myMapping = new java.util.ArrayList<Mapping>();
2010                }
2011                return myMapping;
2012        }
2013
2014        /**
2015         * Sets the value(s) for <b>mapping</b> ()
2016         *
2017     * <p>
2018     * <b>Definition:</b>
2019     * Identifies a concept from an external specification that roughly corresponds to this element
2020     * </p> 
2021         */
2022        public ElementDefinitionDt setMapping(java.util.List<Mapping> theValue) {
2023                myMapping = theValue;
2024                return this;
2025        }
2026        
2027        
2028
2029        /**
2030         * Adds and returns a new value for <b>mapping</b> ()
2031         *
2032     * <p>
2033     * <b>Definition:</b>
2034     * Identifies a concept from an external specification that roughly corresponds to this element
2035     * </p> 
2036         */
2037        public Mapping addMapping() {
2038                Mapping newType = new Mapping();
2039                getMapping().add(newType);
2040                return newType; 
2041        }
2042
2043        /**
2044         * Adds a given new value for <b>mapping</b> ()
2045         *
2046         * <p>
2047         * <b>Definition:</b>
2048         * Identifies a concept from an external specification that roughly corresponds to this element
2049         * </p>
2050         * @param theValue The mapping to add (must not be <code>null</code>)
2051         */
2052        public ElementDefinitionDt addMapping(Mapping theValue) {
2053                if (theValue == null) {
2054                        throw new NullPointerException("theValue must not be null");
2055                }
2056                getMapping().add(theValue);
2057                return this;
2058        }
2059
2060        /**
2061         * Gets the first repetition for <b>mapping</b> (),
2062         * creating it if it does not already exist.
2063         *
2064     * <p>
2065     * <b>Definition:</b>
2066     * Identifies a concept from an external specification that roughly corresponds to this element
2067     * </p> 
2068         */
2069        public Mapping getMappingFirstRep() {
2070                if (getMapping().isEmpty()) {
2071                        return addMapping();
2072                }
2073                return getMapping().get(0); 
2074        }
2075  
2076        /**
2077         * Block class for child element: <b>ElementDefinition.slicing</b> ()
2078         *
2079     * <p>
2080     * <b>Definition:</b>
2081     * 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)
2082     * </p> 
2083         */
2084        @Block()        
2085        public static class Slicing 
2086            extends  BaseIdentifiableElement        implements IResourceBlock {
2087        
2088        @Child(name="discriminator", type=StringDt.class, order=0, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)        
2089        @Description(
2090                shortDefinition="",
2091                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"
2092        )
2093        private java.util.List<StringDt> myDiscriminator;
2094        
2095        @Child(name="description", type=StringDt.class, order=1, min=0, max=1, summary=true, modifier=false)    
2096        @Description(
2097                shortDefinition="",
2098                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"
2099        )
2100        private StringDt myDescription;
2101        
2102        @Child(name="ordered", type=BooleanDt.class, order=2, min=0, max=1, summary=true, modifier=false)       
2103        @Description(
2104                shortDefinition="",
2105                formalDefinition="If the matching elements have to occur in the same order as defined in the profile"
2106        )
2107        private BooleanDt myOrdered;
2108        
2109        @Child(name="rules", type=CodeDt.class, order=3, min=1, max=1, summary=true, modifier=false)    
2110        @Description(
2111                shortDefinition="",
2112                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"
2113        )
2114        private BoundCodeDt<SlicingRulesEnum> myRules;
2115        
2116
2117        @Override
2118        public boolean isEmpty() {
2119                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myDiscriminator,  myDescription,  myOrdered,  myRules);
2120        }
2121        
2122        @Override
2123        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
2124                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myDiscriminator, myDescription, myOrdered, myRules);
2125        }
2126
2127        /**
2128         * Gets the value(s) for <b>discriminator</b> ().
2129         * creating it if it does
2130         * not exist. Will not return <code>null</code>.
2131         *
2132     * <p>
2133     * <b>Definition:</b>
2134     * 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
2135     * </p> 
2136         */
2137        public java.util.List<StringDt> getDiscriminator() {  
2138                if (myDiscriminator == null) {
2139                        myDiscriminator = new java.util.ArrayList<StringDt>();
2140                }
2141                return myDiscriminator;
2142        }
2143
2144        /**
2145         * Sets the value(s) for <b>discriminator</b> ()
2146         *
2147     * <p>
2148     * <b>Definition:</b>
2149     * 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
2150     * </p> 
2151         */
2152        public Slicing setDiscriminator(java.util.List<StringDt> theValue) {
2153                myDiscriminator = theValue;
2154                return this;
2155        }
2156        
2157        
2158
2159        /**
2160         * Adds and returns a new value for <b>discriminator</b> ()
2161         *
2162     * <p>
2163     * <b>Definition:</b>
2164     * 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
2165     * </p> 
2166         */
2167        public StringDt addDiscriminator() {
2168                StringDt newType = new StringDt();
2169                getDiscriminator().add(newType);
2170                return newType; 
2171        }
2172
2173        /**
2174         * Adds a given new value for <b>discriminator</b> ()
2175         *
2176         * <p>
2177         * <b>Definition:</b>
2178         * 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
2179         * </p>
2180         * @param theValue The discriminator to add (must not be <code>null</code>)
2181         */
2182        public Slicing addDiscriminator(StringDt theValue) {
2183                if (theValue == null) {
2184                        throw new NullPointerException("theValue must not be null");
2185                }
2186                getDiscriminator().add(theValue);
2187                return this;
2188        }
2189
2190        /**
2191         * Gets the first repetition for <b>discriminator</b> (),
2192         * creating it if it does not already exist.
2193         *
2194     * <p>
2195     * <b>Definition:</b>
2196     * 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
2197     * </p> 
2198         */
2199        public StringDt getDiscriminatorFirstRep() {
2200                if (getDiscriminator().isEmpty()) {
2201                        return addDiscriminator();
2202                }
2203                return getDiscriminator().get(0); 
2204        }
2205        /**
2206         * Adds a new value for <b>discriminator</b> ()
2207         *
2208     * <p>
2209     * <b>Definition:</b>
2210     * 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
2211     * </p> 
2212     *
2213     * @return Returns a reference to this object, to allow for simple chaining.
2214         */
2215        public Slicing addDiscriminator( String theString) {
2216                if (myDiscriminator == null) {
2217                        myDiscriminator = new java.util.ArrayList<StringDt>();
2218                }
2219                myDiscriminator.add(new StringDt(theString));
2220                return this; 
2221        }
2222
2223 
2224        /**
2225         * Gets the value(s) for <b>description</b> ().
2226         * creating it if it does
2227         * not exist. Will not return <code>null</code>.
2228         *
2229     * <p>
2230     * <b>Definition:</b>
2231     * 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
2232     * </p> 
2233         */
2234        public StringDt getDescriptionElement() {  
2235                if (myDescription == null) {
2236                        myDescription = new StringDt();
2237                }
2238                return myDescription;
2239        }
2240
2241        
2242        /**
2243         * Gets the value(s) for <b>description</b> ().
2244         * creating it if it does
2245         * not exist. Will not return <code>null</code>.
2246         *
2247     * <p>
2248     * <b>Definition:</b>
2249     * 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
2250     * </p> 
2251         */
2252        public String getDescription() {  
2253                return getDescriptionElement().getValue();
2254        }
2255
2256        /**
2257         * Sets the value(s) for <b>description</b> ()
2258         *
2259     * <p>
2260     * <b>Definition:</b>
2261     * 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
2262     * </p> 
2263         */
2264        public Slicing setDescription(StringDt theValue) {
2265                myDescription = theValue;
2266                return this;
2267        }
2268        
2269        
2270
2271        /**
2272         * Sets the value for <b>description</b> ()
2273         *
2274     * <p>
2275     * <b>Definition:</b>
2276     * 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
2277     * </p> 
2278         */
2279        public Slicing setDescription( String theString) {
2280                myDescription = new StringDt(theString); 
2281                return this; 
2282        }
2283
2284 
2285        /**
2286         * Gets the value(s) for <b>ordered</b> ().
2287         * creating it if it does
2288         * not exist. Will not return <code>null</code>.
2289         *
2290     * <p>
2291     * <b>Definition:</b>
2292     * If the matching elements have to occur in the same order as defined in the profile
2293     * </p> 
2294         */
2295        public BooleanDt getOrderedElement() {  
2296                if (myOrdered == null) {
2297                        myOrdered = new BooleanDt();
2298                }
2299                return myOrdered;
2300        }
2301
2302        
2303        /**
2304         * Gets the value(s) for <b>ordered</b> ().
2305         * creating it if it does
2306         * not exist. Will not return <code>null</code>.
2307         *
2308     * <p>
2309     * <b>Definition:</b>
2310     * If the matching elements have to occur in the same order as defined in the profile
2311     * </p> 
2312         */
2313        public Boolean getOrdered() {  
2314                return getOrderedElement().getValue();
2315        }
2316
2317        /**
2318         * Sets the value(s) for <b>ordered</b> ()
2319         *
2320     * <p>
2321     * <b>Definition:</b>
2322     * If the matching elements have to occur in the same order as defined in the profile
2323     * </p> 
2324         */
2325        public Slicing setOrdered(BooleanDt theValue) {
2326                myOrdered = theValue;
2327                return this;
2328        }
2329        
2330        
2331
2332        /**
2333         * Sets the value for <b>ordered</b> ()
2334         *
2335     * <p>
2336     * <b>Definition:</b>
2337     * If the matching elements have to occur in the same order as defined in the profile
2338     * </p> 
2339         */
2340        public Slicing setOrdered( boolean theBoolean) {
2341                myOrdered = new BooleanDt(theBoolean); 
2342                return this; 
2343        }
2344
2345 
2346        /**
2347         * Gets the value(s) for <b>rules</b> ().
2348         * creating it if it does
2349         * not exist. Will not return <code>null</code>.
2350         *
2351     * <p>
2352     * <b>Definition:</b>
2353     * 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
2354     * </p> 
2355         */
2356        public BoundCodeDt<SlicingRulesEnum> getRulesElement() {  
2357                if (myRules == null) {
2358                        myRules = new BoundCodeDt<SlicingRulesEnum>(SlicingRulesEnum.VALUESET_BINDER);
2359                }
2360                return myRules;
2361        }
2362
2363        
2364        /**
2365         * Gets the value(s) for <b>rules</b> ().
2366         * creating it if it does
2367         * not exist. Will not return <code>null</code>.
2368         *
2369     * <p>
2370     * <b>Definition:</b>
2371     * 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
2372     * </p> 
2373         */
2374        public String getRules() {  
2375                return getRulesElement().getValue();
2376        }
2377
2378        /**
2379         * Sets the value(s) for <b>rules</b> ()
2380         *
2381     * <p>
2382     * <b>Definition:</b>
2383     * 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
2384     * </p> 
2385         */
2386        public Slicing setRules(BoundCodeDt<SlicingRulesEnum> theValue) {
2387                myRules = theValue;
2388                return this;
2389        }
2390        
2391        
2392
2393        /**
2394         * Sets the value(s) for <b>rules</b> ()
2395         *
2396     * <p>
2397     * <b>Definition:</b>
2398     * 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
2399     * </p> 
2400         */
2401        public Slicing setRules(SlicingRulesEnum theValue) {
2402                setRules(new BoundCodeDt<SlicingRulesEnum>(SlicingRulesEnum.VALUESET_BINDER, theValue));
2403                
2404/*
2405                getRulesElement().setValueAsEnum(theValue);
2406*/
2407                return this;
2408        }
2409
2410  
2411
2412
2413        }
2414
2415
2416        /**
2417         * Block class for child element: <b>ElementDefinition.base</b> ()
2418         *
2419     * <p>
2420     * <b>Definition:</b>
2421     * Information about the base definition of the element, provided to make it unncessary for tools to trace the deviation of the element through the derived and related profiles. This information is only provided where the element definition represents a constraint on another element definition, and must be present if there is a base element definition.
2422     * </p> 
2423         */
2424        @Block()        
2425        public static class Base 
2426            extends  BaseIdentifiableElement        implements IResourceBlock {
2427        
2428        @Child(name="path", type=StringDt.class, order=0, min=1, max=1, summary=true, modifier=false)   
2429        @Description(
2430                shortDefinition="",
2431                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]]] without a StructureDefinition.base"
2432        )
2433        private StringDt myPath;
2434        
2435        @Child(name="min", type=IntegerDt.class, order=1, min=1, max=1, summary=true, modifier=false)   
2436        @Description(
2437                shortDefinition="",
2438                formalDefinition="Minimum cardinality of the base element identified by the path"
2439        )
2440        private IntegerDt myMin;
2441        
2442        @Child(name="max", type=StringDt.class, order=2, min=1, max=1, summary=true, modifier=false)    
2443        @Description(
2444                shortDefinition="",
2445                formalDefinition="Maximum cardinality of the base element identified by the path"
2446        )
2447        private StringDt myMax;
2448        
2449
2450        @Override
2451        public boolean isEmpty() {
2452                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myPath,  myMin,  myMax);
2453        }
2454        
2455        @Override
2456        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
2457                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myPath, myMin, myMax);
2458        }
2459
2460        /**
2461         * Gets the value(s) for <b>path</b> ().
2462         * creating it if it does
2463         * not exist. Will not return <code>null</code>.
2464         *
2465     * <p>
2466     * <b>Definition:</b>
2467     * 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]]] without a StructureDefinition.base
2468     * </p> 
2469         */
2470        public StringDt getPathElement() {  
2471                if (myPath == null) {
2472                        myPath = new StringDt();
2473                }
2474                return myPath;
2475        }
2476
2477        
2478        /**
2479         * Gets the value(s) for <b>path</b> ().
2480         * creating it if it does
2481         * not exist. Will not return <code>null</code>.
2482         *
2483     * <p>
2484     * <b>Definition:</b>
2485     * 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]]] without a StructureDefinition.base
2486     * </p> 
2487         */
2488        public String getPath() {  
2489                return getPathElement().getValue();
2490        }
2491
2492        /**
2493         * Sets the value(s) for <b>path</b> ()
2494         *
2495     * <p>
2496     * <b>Definition:</b>
2497     * 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]]] without a StructureDefinition.base
2498     * </p> 
2499         */
2500        public Base setPath(StringDt theValue) {
2501                myPath = theValue;
2502                return this;
2503        }
2504        
2505        
2506
2507        /**
2508         * Sets the value for <b>path</b> ()
2509         *
2510     * <p>
2511     * <b>Definition:</b>
2512     * 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]]] without a StructureDefinition.base
2513     * </p> 
2514         */
2515        public Base setPath( String theString) {
2516                myPath = new StringDt(theString); 
2517                return this; 
2518        }
2519
2520 
2521        /**
2522         * Gets the value(s) for <b>min</b> ().
2523         * creating it if it does
2524         * not exist. Will not return <code>null</code>.
2525         *
2526     * <p>
2527     * <b>Definition:</b>
2528     * Minimum cardinality of the base element identified by the path
2529     * </p> 
2530         */
2531        public IntegerDt getMinElement() {  
2532                if (myMin == null) {
2533                        myMin = new IntegerDt();
2534                }
2535                return myMin;
2536        }
2537
2538        
2539        /**
2540         * Gets the value(s) for <b>min</b> ().
2541         * creating it if it does
2542         * not exist. Will not return <code>null</code>.
2543         *
2544     * <p>
2545     * <b>Definition:</b>
2546     * Minimum cardinality of the base element identified by the path
2547     * </p> 
2548         */
2549        public Integer getMin() {  
2550                return getMinElement().getValue();
2551        }
2552
2553        /**
2554         * Sets the value(s) for <b>min</b> ()
2555         *
2556     * <p>
2557     * <b>Definition:</b>
2558     * Minimum cardinality of the base element identified by the path
2559     * </p> 
2560         */
2561        public Base setMin(IntegerDt theValue) {
2562                myMin = theValue;
2563                return this;
2564        }
2565        
2566        
2567
2568        /**
2569         * Sets the value for <b>min</b> ()
2570         *
2571     * <p>
2572     * <b>Definition:</b>
2573     * Minimum cardinality of the base element identified by the path
2574     * </p> 
2575         */
2576        public Base setMin( int theInteger) {
2577                myMin = new IntegerDt(theInteger); 
2578                return this; 
2579        }
2580
2581 
2582        /**
2583         * Gets the value(s) for <b>max</b> ().
2584         * creating it if it does
2585         * not exist. Will not return <code>null</code>.
2586         *
2587     * <p>
2588     * <b>Definition:</b>
2589     * Maximum cardinality of the base element identified by the path
2590     * </p> 
2591         */
2592        public StringDt getMaxElement() {  
2593                if (myMax == null) {
2594                        myMax = new StringDt();
2595                }
2596                return myMax;
2597        }
2598
2599        
2600        /**
2601         * Gets the value(s) for <b>max</b> ().
2602         * creating it if it does
2603         * not exist. Will not return <code>null</code>.
2604         *
2605     * <p>
2606     * <b>Definition:</b>
2607     * Maximum cardinality of the base element identified by the path
2608     * </p> 
2609         */
2610        public String getMax() {  
2611                return getMaxElement().getValue();
2612        }
2613
2614        /**
2615         * Sets the value(s) for <b>max</b> ()
2616         *
2617     * <p>
2618     * <b>Definition:</b>
2619     * Maximum cardinality of the base element identified by the path
2620     * </p> 
2621         */
2622        public Base setMax(StringDt theValue) {
2623                myMax = theValue;
2624                return this;
2625        }
2626        
2627        
2628
2629        /**
2630         * Sets the value for <b>max</b> ()
2631         *
2632     * <p>
2633     * <b>Definition:</b>
2634     * Maximum cardinality of the base element identified by the path
2635     * </p> 
2636         */
2637        public Base setMax( String theString) {
2638                myMax = new StringDt(theString); 
2639                return this; 
2640        }
2641
2642 
2643
2644
2645        }
2646
2647
2648        /**
2649         * Block class for child element: <b>ElementDefinition.type</b> ()
2650         *
2651     * <p>
2652     * <b>Definition:</b>
2653     * The data type or resource that the value of this element is permitted to be
2654     * </p> 
2655         */
2656        @Block()        
2657        public static class Type 
2658            extends  BaseIdentifiableElement        implements IResourceBlock {
2659        
2660        @Child(name="code", type=CodeDt.class, order=0, min=1, max=1, summary=true, modifier=false)     
2661        @Description(
2662                shortDefinition="",
2663                formalDefinition="Name of Data type or Resource that is a(or the) type used for this element"
2664        )
2665        private CodeDt myCode;
2666        
2667        @Child(name="profile", type=UriDt.class, order=1, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false) 
2668        @Description(
2669                shortDefinition="",
2670                formalDefinition="Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide"
2671        )
2672        private java.util.List<UriDt> myProfile;
2673        
2674        @Child(name="aggregation", type=CodeDt.class, order=2, min=0, max=Child.MAX_UNLIMITED, summary=true, modifier=false)    
2675        @Description(
2676                shortDefinition="",
2677                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."
2678        )
2679        private java.util.List<BoundCodeDt<AggregationModeEnum>> myAggregation;
2680        
2681
2682        @Override
2683        public boolean isEmpty() {
2684                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myCode,  myProfile,  myAggregation);
2685        }
2686        
2687        @Override
2688        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
2689                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myCode, myProfile, myAggregation);
2690        }
2691
2692        /**
2693         * Gets the value(s) for <b>code</b> ().
2694         * creating it if it does
2695         * not exist. Will not return <code>null</code>.
2696         *
2697     * <p>
2698     * <b>Definition:</b>
2699     * Name of Data type or Resource that is a(or the) type used for this element
2700     * </p> 
2701         */
2702        public CodeDt getCodeElement() {  
2703                if (myCode == null) {
2704                        myCode = new CodeDt();
2705                }
2706                return myCode;
2707        }
2708
2709        
2710        /**
2711         * Gets the value(s) for <b>code</b> ().
2712         * creating it if it does
2713         * not exist. Will not return <code>null</code>.
2714         *
2715     * <p>
2716     * <b>Definition:</b>
2717     * Name of Data type or Resource that is a(or the) type used for this element
2718     * </p> 
2719         */
2720        public String getCode() {  
2721                return getCodeElement().getValue();
2722        }
2723
2724        /**
2725         * Sets the value(s) for <b>code</b> ()
2726         *
2727     * <p>
2728     * <b>Definition:</b>
2729     * Name of Data type or Resource that is a(or the) type used for this element
2730     * </p> 
2731         */
2732        public Type setCode(CodeDt theValue) {
2733                myCode = theValue;
2734                return this;
2735        }
2736        
2737        
2738
2739        /**
2740         * Sets the value for <b>code</b> ()
2741         *
2742     * <p>
2743     * <b>Definition:</b>
2744     * Name of Data type or Resource that is a(or the) type used for this element
2745     * </p> 
2746         */
2747        public Type setCode( String theCode) {
2748                myCode = new CodeDt(theCode); 
2749                return this; 
2750        }
2751
2752 
2753        /**
2754         * Gets the value(s) for <b>profile</b> ().
2755         * creating it if it does
2756         * not exist. Will not return <code>null</code>.
2757         *
2758     * <p>
2759     * <b>Definition:</b>
2760     * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2761     * </p> 
2762         */
2763        public java.util.List<UriDt> getProfile() {  
2764                if (myProfile == null) {
2765                        myProfile = new java.util.ArrayList<UriDt>();
2766                }
2767                return myProfile;
2768        }
2769
2770        /**
2771         * Sets the value(s) for <b>profile</b> ()
2772         *
2773     * <p>
2774     * <b>Definition:</b>
2775     * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2776     * </p> 
2777         */
2778        public Type setProfile(java.util.List<UriDt> theValue) {
2779                myProfile = theValue;
2780                return this;
2781        }
2782        
2783        
2784
2785        /**
2786         * Adds and returns a new value for <b>profile</b> ()
2787         *
2788     * <p>
2789     * <b>Definition:</b>
2790     * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2791     * </p> 
2792         */
2793        public UriDt addProfile() {
2794                UriDt newType = new UriDt();
2795                getProfile().add(newType);
2796                return newType; 
2797        }
2798
2799        /**
2800         * Adds a given new value for <b>profile</b> ()
2801         *
2802         * <p>
2803         * <b>Definition:</b>
2804         * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2805         * </p>
2806         * @param theValue The profile to add (must not be <code>null</code>)
2807         */
2808        public Type addProfile(UriDt theValue) {
2809                if (theValue == null) {
2810                        throw new NullPointerException("theValue must not be null");
2811                }
2812                getProfile().add(theValue);
2813                return this;
2814        }
2815
2816        /**
2817         * Gets the first repetition for <b>profile</b> (),
2818         * creating it if it does not already exist.
2819         *
2820     * <p>
2821     * <b>Definition:</b>
2822     * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2823     * </p> 
2824         */
2825        public UriDt getProfileFirstRep() {
2826                if (getProfile().isEmpty()) {
2827                        return addProfile();
2828                }
2829                return getProfile().get(0); 
2830        }
2831        /**
2832         * Adds a new value for <b>profile</b> ()
2833         *
2834     * <p>
2835     * <b>Definition:</b>
2836     * Identifies a profile structure or implementation Guide that SHALL hold for resources or datatypes referenced as the type of this element. Can be a local reference - to another structure in this profile, or a reference to a structure in another profile. When more than one profile is specified, the content must conform to all of them. When an implementation guide is specified, the resource SHALL conform to at least one profile defined in the implementation guide
2837     * </p> 
2838     *
2839     * @return Returns a reference to this object, to allow for simple chaining.
2840         */
2841        public Type addProfile( String theUri) {
2842                if (myProfile == null) {
2843                        myProfile = new java.util.ArrayList<UriDt>();
2844                }
2845                myProfile.add(new UriDt(theUri));
2846                return this; 
2847        }
2848
2849 
2850        /**
2851         * Gets the value(s) for <b>aggregation</b> ().
2852         * creating it if it does
2853         * not exist. Will not return <code>null</code>.
2854         *
2855     * <p>
2856     * <b>Definition:</b>
2857     * 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.
2858     * </p> 
2859         */
2860        public java.util.List<BoundCodeDt<AggregationModeEnum>> getAggregation() {  
2861                if (myAggregation == null) {
2862                        myAggregation = new java.util.ArrayList<BoundCodeDt<AggregationModeEnum>>();
2863                }
2864                return myAggregation;
2865        }
2866
2867        /**
2868         * Sets the value(s) for <b>aggregation</b> ()
2869         *
2870     * <p>
2871     * <b>Definition:</b>
2872     * 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.
2873     * </p> 
2874         */
2875        public Type setAggregation(java.util.List<BoundCodeDt<AggregationModeEnum>> theValue) {
2876                myAggregation = theValue;
2877                return this;
2878        }
2879        
2880        
2881
2882        /**
2883         * Add a value for <b>aggregation</b> () using an enumerated type. This
2884         * is intended as a convenience method for situations where the FHIR defined ValueSets are mandatory
2885         * or contain the desirable codes. If you wish to use codes other than those which are built-in, 
2886         * you may also use the {@link #addAggregation()} method.
2887         *
2888     * <p>
2889     * <b>Definition:</b>
2890     * 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.
2891     * </p> 
2892         */
2893        public BoundCodeDt<AggregationModeEnum> addAggregation(AggregationModeEnum theValue) {
2894                BoundCodeDt<AggregationModeEnum> retVal = new BoundCodeDt<AggregationModeEnum>(AggregationModeEnum.VALUESET_BINDER, theValue);
2895                getAggregation().add(retVal);
2896                return retVal;
2897        }
2898
2899        /**
2900         * Gets the first repetition for <b>aggregation</b> (),
2901         * creating it if it does not already exist.
2902         *
2903     * <p>
2904     * <b>Definition:</b>
2905     * 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.
2906     * </p> 
2907         */
2908        public BoundCodeDt<AggregationModeEnum> getAggregationFirstRep() {
2909                if (getAggregation().size() == 0) {
2910                        addAggregation();
2911                }
2912                return getAggregation().get(0);
2913        }
2914
2915        /**
2916         * Add a value for <b>aggregation</b> ()
2917         *
2918     * <p>
2919     * <b>Definition:</b>
2920     * 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.
2921     * </p> 
2922         */
2923        public BoundCodeDt<AggregationModeEnum> addAggregation() {
2924                BoundCodeDt<AggregationModeEnum> retVal = new BoundCodeDt<AggregationModeEnum>(AggregationModeEnum.VALUESET_BINDER);
2925                getAggregation().add(retVal);
2926                return retVal;
2927        }
2928
2929        /**
2930         * Sets the value(s), and clears any existing value(s) for <b>aggregation</b> ()
2931         *
2932     * <p>
2933     * <b>Definition:</b>
2934     * 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.
2935     * </p> 
2936         */
2937        public Type setAggregation(AggregationModeEnum theValue) {
2938                getAggregation().clear();
2939                addAggregation(theValue);
2940                return this;
2941        }
2942
2943  
2944
2945
2946        }
2947
2948
2949        /**
2950         * Block class for child element: <b>ElementDefinition.constraint</b> ()
2951         *
2952     * <p>
2953     * <b>Definition:</b>
2954     * Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance
2955     * </p> 
2956         */
2957        @Block()        
2958        public static class Constraint 
2959            extends  BaseIdentifiableElement        implements IResourceBlock {
2960        
2961        @Child(name="key", type=IdDt.class, order=0, min=1, max=1, summary=true, modifier=false)        
2962        @Description(
2963                shortDefinition="",
2964                formalDefinition="Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality"
2965        )
2966        private IdDt myKey;
2967        
2968        @Child(name="requirements", type=StringDt.class, order=1, min=0, max=1, summary=true, modifier=false)   
2969        @Description(
2970                shortDefinition="",
2971                formalDefinition="Description of why this constraint is necessary or appropriate"
2972        )
2973        private StringDt myRequirements;
2974        
2975        @Child(name="severity", type=CodeDt.class, order=2, min=1, max=1, summary=true, modifier=false) 
2976        @Description(
2977                shortDefinition="",
2978                formalDefinition="Identifies the impact constraint violation has on the conformance of the instance"
2979        )
2980        private BoundCodeDt<ConstraintSeverityEnum> mySeverity;
2981        
2982        @Child(name="human", type=StringDt.class, order=3, min=1, max=1, summary=true, modifier=false)  
2983        @Description(
2984                shortDefinition="",
2985                formalDefinition="Text that can be used to describe the constraint in messages identifying that the constraint has been violated"
2986        )
2987        private StringDt myHuman;
2988        
2989        @Child(name="xpath", type=StringDt.class, order=4, min=1, max=1, summary=true, modifier=false)  
2990        @Description(
2991                shortDefinition="",
2992                formalDefinition="An XPath expression of constraint that can be executed to see if this constraint is met"
2993        )
2994        private StringDt myXpath;
2995        
2996
2997        @Override
2998        public boolean isEmpty() {
2999                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myKey,  myRequirements,  mySeverity,  myHuman,  myXpath);
3000        }
3001        
3002        @Override
3003        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
3004                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myKey, myRequirements, mySeverity, myHuman, myXpath);
3005        }
3006
3007        /**
3008         * Gets the value(s) for <b>key</b> ().
3009         * creating it if it does
3010         * not exist. Will not return <code>null</code>.
3011         *
3012     * <p>
3013     * <b>Definition:</b>
3014     * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality
3015     * </p> 
3016         */
3017        public IdDt getKeyElement() {  
3018                if (myKey == null) {
3019                        myKey = new IdDt();
3020                }
3021                return myKey;
3022        }
3023
3024        
3025        /**
3026         * Gets the value(s) for <b>key</b> ().
3027         * creating it if it does
3028         * not exist. Will not return <code>null</code>.
3029         *
3030     * <p>
3031     * <b>Definition:</b>
3032     * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality
3033     * </p> 
3034         */
3035        public String getKey() {  
3036                return getKeyElement().getValue();
3037        }
3038
3039        /**
3040         * Sets the value(s) for <b>key</b> ()
3041         *
3042     * <p>
3043     * <b>Definition:</b>
3044     * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality
3045     * </p> 
3046         */
3047        public Constraint setKey(IdDt theValue) {
3048                myKey = theValue;
3049                return this;
3050        }
3051        
3052        
3053
3054        /**
3055         * Sets the value for <b>key</b> ()
3056         *
3057     * <p>
3058     * <b>Definition:</b>
3059     * Allows identification of which elements have their cardinalities impacted by the constraint.  Will not be referenced for constraints that do not affect cardinality
3060     * </p> 
3061         */
3062        public Constraint setKey( String theId) {
3063                myKey = new IdDt(theId); 
3064                return this; 
3065        }
3066
3067 
3068        /**
3069         * Gets the value(s) for <b>requirements</b> ().
3070         * creating it if it does
3071         * not exist. Will not return <code>null</code>.
3072         *
3073     * <p>
3074     * <b>Definition:</b>
3075     * Description of why this constraint is necessary or appropriate
3076     * </p> 
3077         */
3078        public StringDt getRequirementsElement() {  
3079                if (myRequirements == null) {
3080                        myRequirements = new StringDt();
3081                }
3082                return myRequirements;
3083        }
3084
3085        
3086        /**
3087         * Gets the value(s) for <b>requirements</b> ().
3088         * creating it if it does
3089         * not exist. Will not return <code>null</code>.
3090         *
3091     * <p>
3092     * <b>Definition:</b>
3093     * Description of why this constraint is necessary or appropriate
3094     * </p> 
3095         */
3096        public String getRequirements() {  
3097                return getRequirementsElement().getValue();
3098        }
3099
3100        /**
3101         * Sets the value(s) for <b>requirements</b> ()
3102         *
3103     * <p>
3104     * <b>Definition:</b>
3105     * Description of why this constraint is necessary or appropriate
3106     * </p> 
3107         */
3108        public Constraint setRequirements(StringDt theValue) {
3109                myRequirements = theValue;
3110                return this;
3111        }
3112        
3113        
3114
3115        /**
3116         * Sets the value for <b>requirements</b> ()
3117         *
3118     * <p>
3119     * <b>Definition:</b>
3120     * Description of why this constraint is necessary or appropriate
3121     * </p> 
3122         */
3123        public Constraint setRequirements( String theString) {
3124                myRequirements = new StringDt(theString); 
3125                return this; 
3126        }
3127
3128 
3129        /**
3130         * Gets the value(s) for <b>severity</b> ().
3131         * creating it if it does
3132         * not exist. Will not return <code>null</code>.
3133         *
3134     * <p>
3135     * <b>Definition:</b>
3136     * Identifies the impact constraint violation has on the conformance of the instance
3137     * </p> 
3138         */
3139        public BoundCodeDt<ConstraintSeverityEnum> getSeverityElement() {  
3140                if (mySeverity == null) {
3141                        mySeverity = new BoundCodeDt<ConstraintSeverityEnum>(ConstraintSeverityEnum.VALUESET_BINDER);
3142                }
3143                return mySeverity;
3144        }
3145
3146        
3147        /**
3148         * Gets the value(s) for <b>severity</b> ().
3149         * creating it if it does
3150         * not exist. Will not return <code>null</code>.
3151         *
3152     * <p>
3153     * <b>Definition:</b>
3154     * Identifies the impact constraint violation has on the conformance of the instance
3155     * </p> 
3156         */
3157        public String getSeverity() {  
3158                return getSeverityElement().getValue();
3159        }
3160
3161        /**
3162         * Sets the value(s) for <b>severity</b> ()
3163         *
3164     * <p>
3165     * <b>Definition:</b>
3166     * Identifies the impact constraint violation has on the conformance of the instance
3167     * </p> 
3168         */
3169        public Constraint setSeverity(BoundCodeDt<ConstraintSeverityEnum> theValue) {
3170                mySeverity = theValue;
3171                return this;
3172        }
3173        
3174        
3175
3176        /**
3177         * Sets the value(s) for <b>severity</b> ()
3178         *
3179     * <p>
3180     * <b>Definition:</b>
3181     * Identifies the impact constraint violation has on the conformance of the instance
3182     * </p> 
3183         */
3184        public Constraint setSeverity(ConstraintSeverityEnum theValue) {
3185                setSeverity(new BoundCodeDt<ConstraintSeverityEnum>(ConstraintSeverityEnum.VALUESET_BINDER, theValue));
3186                
3187/*
3188                getSeverityElement().setValueAsEnum(theValue);
3189*/
3190                return this;
3191        }
3192
3193  
3194        /**
3195         * Gets the value(s) for <b>human</b> ().
3196         * creating it if it does
3197         * not exist. Will not return <code>null</code>.
3198         *
3199     * <p>
3200     * <b>Definition:</b>
3201     * Text that can be used to describe the constraint in messages identifying that the constraint has been violated
3202     * </p> 
3203         */
3204        public StringDt getHumanElement() {  
3205                if (myHuman == null) {
3206                        myHuman = new StringDt();
3207                }
3208                return myHuman;
3209        }
3210
3211        
3212        /**
3213         * Gets the value(s) for <b>human</b> ().
3214         * creating it if it does
3215         * not exist. Will not return <code>null</code>.
3216         *
3217     * <p>
3218     * <b>Definition:</b>
3219     * Text that can be used to describe the constraint in messages identifying that the constraint has been violated
3220     * </p> 
3221         */
3222        public String getHuman() {  
3223                return getHumanElement().getValue();
3224        }
3225
3226        /**
3227         * Sets the value(s) for <b>human</b> ()
3228         *
3229     * <p>
3230     * <b>Definition:</b>
3231     * Text that can be used to describe the constraint in messages identifying that the constraint has been violated
3232     * </p> 
3233         */
3234        public Constraint setHuman(StringDt theValue) {
3235                myHuman = theValue;
3236                return this;
3237        }
3238        
3239        
3240
3241        /**
3242         * Sets the value for <b>human</b> ()
3243         *
3244     * <p>
3245     * <b>Definition:</b>
3246     * Text that can be used to describe the constraint in messages identifying that the constraint has been violated
3247     * </p> 
3248         */
3249        public Constraint setHuman( String theString) {
3250                myHuman = new StringDt(theString); 
3251                return this; 
3252        }
3253
3254 
3255        /**
3256         * Gets the value(s) for <b>xpath</b> ().
3257         * creating it if it does
3258         * not exist. Will not return <code>null</code>.
3259         *
3260     * <p>
3261     * <b>Definition:</b>
3262     * An XPath expression of constraint that can be executed to see if this constraint is met
3263     * </p> 
3264         */
3265        public StringDt getXpathElement() {  
3266                if (myXpath == null) {
3267                        myXpath = new StringDt();
3268                }
3269                return myXpath;
3270        }
3271
3272        
3273        /**
3274         * Gets the value(s) for <b>xpath</b> ().
3275         * creating it if it does
3276         * not exist. Will not return <code>null</code>.
3277         *
3278     * <p>
3279     * <b>Definition:</b>
3280     * An XPath expression of constraint that can be executed to see if this constraint is met
3281     * </p> 
3282         */
3283        public String getXpath() {  
3284                return getXpathElement().getValue();
3285        }
3286
3287        /**
3288         * Sets the value(s) for <b>xpath</b> ()
3289         *
3290     * <p>
3291     * <b>Definition:</b>
3292     * An XPath expression of constraint that can be executed to see if this constraint is met
3293     * </p> 
3294         */
3295        public Constraint setXpath(StringDt theValue) {
3296                myXpath = theValue;
3297                return this;
3298        }
3299        
3300        
3301
3302        /**
3303         * Sets the value for <b>xpath</b> ()
3304         *
3305     * <p>
3306     * <b>Definition:</b>
3307     * An XPath expression of constraint that can be executed to see if this constraint is met
3308     * </p> 
3309         */
3310        public Constraint setXpath( String theString) {
3311                myXpath = new StringDt(theString); 
3312                return this; 
3313        }
3314
3315 
3316
3317
3318        }
3319
3320
3321        /**
3322         * Block class for child element: <b>ElementDefinition.binding</b> ()
3323         *
3324     * <p>
3325     * <b>Definition:</b>
3326     * Binds to a value set if this element is coded (code, Coding, CodeableConcept)
3327     * </p> 
3328         */
3329        @Block()        
3330        public static class Binding 
3331            extends  BaseIdentifiableElement        implements IResourceBlock {
3332        
3333        @Child(name="strength", type=CodeDt.class, order=0, min=1, max=1, summary=true, modifier=false) 
3334        @Description(
3335                shortDefinition="",
3336                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"
3337        )
3338        private BoundCodeDt<BindingStrengthEnum> myStrength;
3339        
3340        @Child(name="description", type=StringDt.class, order=1, min=0, max=1, summary=true, modifier=false)    
3341        @Description(
3342                shortDefinition="",
3343                formalDefinition="Describes the intended use of this particular set of codes"
3344        )
3345        private StringDt myDescription;
3346        
3347        @Child(name="valueSet", order=2, min=0, max=1, summary=true, modifier=false, type={
3348                UriDt.class,            ValueSet.class  })
3349        @Description(
3350                shortDefinition="",
3351                formalDefinition="Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used"
3352        )
3353        private IDatatype myValueSet;
3354        
3355
3356        @Override
3357        public boolean isEmpty() {
3358                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myStrength,  myDescription,  myValueSet);
3359        }
3360        
3361        @Override
3362        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
3363                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myStrength, myDescription, myValueSet);
3364        }
3365
3366        /**
3367         * Gets the value(s) for <b>strength</b> ().
3368         * creating it if it does
3369         * not exist. Will not return <code>null</code>.
3370         *
3371     * <p>
3372     * <b>Definition:</b>
3373     * 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
3374     * </p> 
3375         */
3376        public BoundCodeDt<BindingStrengthEnum> getStrengthElement() {  
3377                if (myStrength == null) {
3378                        myStrength = new BoundCodeDt<BindingStrengthEnum>(BindingStrengthEnum.VALUESET_BINDER);
3379                }
3380                return myStrength;
3381        }
3382
3383        
3384        /**
3385         * Gets the value(s) for <b>strength</b> ().
3386         * creating it if it does
3387         * not exist. Will not return <code>null</code>.
3388         *
3389     * <p>
3390     * <b>Definition:</b>
3391     * 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
3392     * </p> 
3393         */
3394        public String getStrength() {  
3395                return getStrengthElement().getValue();
3396        }
3397
3398        /**
3399         * Sets the value(s) for <b>strength</b> ()
3400         *
3401     * <p>
3402     * <b>Definition:</b>
3403     * 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
3404     * </p> 
3405         */
3406        public Binding setStrength(BoundCodeDt<BindingStrengthEnum> theValue) {
3407                myStrength = theValue;
3408                return this;
3409        }
3410        
3411        
3412
3413        /**
3414         * Sets the value(s) for <b>strength</b> ()
3415         *
3416     * <p>
3417     * <b>Definition:</b>
3418     * 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
3419     * </p> 
3420         */
3421        public Binding setStrength(BindingStrengthEnum theValue) {
3422                setStrength(new BoundCodeDt<BindingStrengthEnum>(BindingStrengthEnum.VALUESET_BINDER, theValue));
3423                
3424/*
3425                getStrengthElement().setValueAsEnum(theValue);
3426*/
3427                return this;
3428        }
3429
3430  
3431        /**
3432         * Gets the value(s) for <b>description</b> ().
3433         * creating it if it does
3434         * not exist. Will not return <code>null</code>.
3435         *
3436     * <p>
3437     * <b>Definition:</b>
3438     * Describes the intended use of this particular set of codes
3439     * </p> 
3440         */
3441        public StringDt getDescriptionElement() {  
3442                if (myDescription == null) {
3443                        myDescription = new StringDt();
3444                }
3445                return myDescription;
3446        }
3447
3448        
3449        /**
3450         * Gets the value(s) for <b>description</b> ().
3451         * creating it if it does
3452         * not exist. Will not return <code>null</code>.
3453         *
3454     * <p>
3455     * <b>Definition:</b>
3456     * Describes the intended use of this particular set of codes
3457     * </p> 
3458         */
3459        public String getDescription() {  
3460                return getDescriptionElement().getValue();
3461        }
3462
3463        /**
3464         * Sets the value(s) for <b>description</b> ()
3465         *
3466     * <p>
3467     * <b>Definition:</b>
3468     * Describes the intended use of this particular set of codes
3469     * </p> 
3470         */
3471        public Binding setDescription(StringDt theValue) {
3472                myDescription = theValue;
3473                return this;
3474        }
3475        
3476        
3477
3478        /**
3479         * Sets the value for <b>description</b> ()
3480         *
3481     * <p>
3482     * <b>Definition:</b>
3483     * Describes the intended use of this particular set of codes
3484     * </p> 
3485         */
3486        public Binding setDescription( String theString) {
3487                myDescription = new StringDt(theString); 
3488                return this; 
3489        }
3490
3491 
3492        /**
3493         * Gets the value(s) for <b>valueSet[x]</b> ().
3494         * creating it if it does
3495         * not exist. Will not return <code>null</code>.
3496         *
3497     * <p>
3498     * <b>Definition:</b>
3499     * Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used
3500     * </p> 
3501         */
3502        public IDatatype getValueSet() {  
3503                return myValueSet;
3504        }
3505
3506        /**
3507         * Sets the value(s) for <b>valueSet[x]</b> ()
3508         *
3509     * <p>
3510     * <b>Definition:</b>
3511     * Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used
3512     * </p> 
3513         */
3514        public Binding setValueSet(IDatatype theValue) {
3515                myValueSet = theValue;
3516                return this;
3517        }
3518        
3519        
3520
3521  
3522
3523
3524        }
3525
3526
3527        /**
3528         * Block class for child element: <b>ElementDefinition.mapping</b> ()
3529         *
3530     * <p>
3531     * <b>Definition:</b>
3532     * Identifies a concept from an external specification that roughly corresponds to this element
3533     * </p> 
3534         */
3535        @Block()        
3536        public static class Mapping 
3537            extends  BaseIdentifiableElement        implements IResourceBlock {
3538        
3539        @Child(name="identity", type=IdDt.class, order=0, min=1, max=1, summary=true, modifier=false)   
3540        @Description(
3541                shortDefinition="",
3542                formalDefinition="An internal reference to the definition of a mapping"
3543        )
3544        private IdDt myIdentity;
3545        
3546        @Child(name="language", type=CodeDt.class, order=1, min=0, max=1, summary=true, modifier=false) 
3547        @Description(
3548                shortDefinition="",
3549                formalDefinition="Identifies the computable language in which mapping.map is expressed."
3550        )
3551        private CodeDt myLanguage;
3552        
3553        @Child(name="map", type=StringDt.class, order=2, min=1, max=1, summary=true, modifier=false)    
3554        @Description(
3555                shortDefinition="",
3556                formalDefinition="Expresses what part of the target specification corresponds to this element"
3557        )
3558        private StringDt myMap;
3559        
3560
3561        @Override
3562        public boolean isEmpty() {
3563                return super.isBaseEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(  myIdentity,  myLanguage,  myMap);
3564        }
3565        
3566        @Override
3567        public <T extends IElement> List<T> getAllPopulatedChildElementsOfType(Class<T> theType) {
3568                return ca.uhn.fhir.util.ElementUtil.allPopulatedChildElements(theType, myIdentity, myLanguage, myMap);
3569        }
3570
3571        /**
3572         * Gets the value(s) for <b>identity</b> ().
3573         * creating it if it does
3574         * not exist. Will not return <code>null</code>.
3575         *
3576     * <p>
3577     * <b>Definition:</b>
3578     * An internal reference to the definition of a mapping
3579     * </p> 
3580         */
3581        public IdDt getIdentityElement() {  
3582                if (myIdentity == null) {
3583                        myIdentity = new IdDt();
3584                }
3585                return myIdentity;
3586        }
3587
3588        
3589        /**
3590         * Gets the value(s) for <b>identity</b> ().
3591         * creating it if it does
3592         * not exist. Will not return <code>null</code>.
3593         *
3594     * <p>
3595     * <b>Definition:</b>
3596     * An internal reference to the definition of a mapping
3597     * </p> 
3598         */
3599        public String getIdentity() {  
3600                return getIdentityElement().getValue();
3601        }
3602
3603        /**
3604         * Sets the value(s) for <b>identity</b> ()
3605         *
3606     * <p>
3607     * <b>Definition:</b>
3608     * An internal reference to the definition of a mapping
3609     * </p> 
3610         */
3611        public Mapping setIdentity(IdDt theValue) {
3612                myIdentity = theValue;
3613                return this;
3614        }
3615        
3616        
3617
3618        /**
3619         * Sets the value for <b>identity</b> ()
3620         *
3621     * <p>
3622     * <b>Definition:</b>
3623     * An internal reference to the definition of a mapping
3624     * </p> 
3625         */
3626        public Mapping setIdentity( String theId) {
3627                myIdentity = new IdDt(theId); 
3628                return this; 
3629        }
3630
3631 
3632        /**
3633         * Gets the value(s) for <b>language</b> ().
3634         * creating it if it does
3635         * not exist. Will not return <code>null</code>.
3636         *
3637     * <p>
3638     * <b>Definition:</b>
3639     * Identifies the computable language in which mapping.map is expressed.
3640     * </p> 
3641         */
3642        public CodeDt getLanguageElement() {  
3643                if (myLanguage == null) {
3644                        myLanguage = new CodeDt();
3645                }
3646                return myLanguage;
3647        }
3648
3649        
3650        /**
3651         * Gets the value(s) for <b>language</b> ().
3652         * creating it if it does
3653         * not exist. Will not return <code>null</code>.
3654         *
3655     * <p>
3656     * <b>Definition:</b>
3657     * Identifies the computable language in which mapping.map is expressed.
3658     * </p> 
3659         */
3660        public String getLanguage() {  
3661                return getLanguageElement().getValue();
3662        }
3663
3664        /**
3665         * Sets the value(s) for <b>language</b> ()
3666         *
3667     * <p>
3668     * <b>Definition:</b>
3669     * Identifies the computable language in which mapping.map is expressed.
3670     * </p> 
3671         */
3672        public Mapping setLanguage(CodeDt theValue) {
3673                myLanguage = theValue;
3674                return this;
3675        }
3676        
3677        
3678
3679        /**
3680         * Sets the value for <b>language</b> ()
3681         *
3682     * <p>
3683     * <b>Definition:</b>
3684     * Identifies the computable language in which mapping.map is expressed.
3685     * </p> 
3686         */
3687        public Mapping setLanguage( String theCode) {
3688                myLanguage = new CodeDt(theCode); 
3689                return this; 
3690        }
3691
3692 
3693        /**
3694         * Gets the value(s) for <b>map</b> ().
3695         * creating it if it does
3696         * not exist. Will not return <code>null</code>.
3697         *
3698     * <p>
3699     * <b>Definition:</b>
3700     * Expresses what part of the target specification corresponds to this element
3701     * </p> 
3702         */
3703        public StringDt getMapElement() {  
3704                if (myMap == null) {
3705                        myMap = new StringDt();
3706                }
3707                return myMap;
3708        }
3709
3710        
3711        /**
3712         * Gets the value(s) for <b>map</b> ().
3713         * creating it if it does
3714         * not exist. Will not return <code>null</code>.
3715         *
3716     * <p>
3717     * <b>Definition:</b>
3718     * Expresses what part of the target specification corresponds to this element
3719     * </p> 
3720         */
3721        public String getMap() {  
3722                return getMapElement().getValue();
3723        }
3724
3725        /**
3726         * Sets the value(s) for <b>map</b> ()
3727         *
3728     * <p>
3729     * <b>Definition:</b>
3730     * Expresses what part of the target specification corresponds to this element
3731     * </p> 
3732         */
3733        public Mapping setMap(StringDt theValue) {
3734                myMap = theValue;
3735                return this;
3736        }
3737        
3738        
3739
3740        /**
3741         * Sets the value for <b>map</b> ()
3742         *
3743     * <p>
3744     * <b>Definition:</b>
3745     * Expresses what part of the target specification corresponds to this element
3746     * </p> 
3747         */
3748        public Mapping setMap( String theString) {
3749                myMap = new StringDt(theString); 
3750                return this; 
3751        }
3752
3753 
3754
3755
3756        }
3757
3758
3759
3760
3761}