001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A group of related requests that can be used to capture intended activities that have inter-dependencies such as "give this medication after that one".
052 */
053@ResourceDef(name="RequestGroup", profile="http://hl7.org/fhir/StructureDefinition/RequestGroup")
054public class RequestGroup extends DomainResource {
055
056    @Block()
057    public static class RequestGroupActionComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.
060         */
061        @Child(name = "linkId", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
062        @Description(shortDefinition="Pointer to specific item from the PlanDefinition", formalDefinition="The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource." )
063        protected StringType linkId;
064
065        /**
066         * A user-visible prefix for the action. For example a section or item numbering such as 1. or A.
067         */
068        @Child(name = "prefix", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
069        @Description(shortDefinition="User-visible prefix for the action (e.g. 1. or A.)", formalDefinition="A user-visible prefix for the action. For example a section or item numbering such as 1. or A." )
070        protected StringType prefix;
071
072        /**
073         * The title of the action displayed to a user.
074         */
075        @Child(name = "title", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
076        @Description(shortDefinition="User-visible title", formalDefinition="The title of the action displayed to a user." )
077        protected StringType title;
078
079        /**
080         * A short description of the action used to provide a summary to display to the user.
081         */
082        @Child(name = "description", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
083        @Description(shortDefinition="Short description of the action", formalDefinition="A short description of the action used to provide a summary to display to the user." )
084        protected StringType description;
085
086        /**
087         * A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.
088         */
089        @Child(name = "textEquivalent", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
090        @Description(shortDefinition="Static text equivalent of the action, used if the dynamic aspects cannot be interpreted by the receiving system", formalDefinition="A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically." )
091        protected StringType textEquivalent;
092
093        /**
094         * Indicates how quickly the action should be addressed with respect to other actions.
095         */
096        @Child(name = "priority", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
097        @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Indicates how quickly the action should be addressed with respect to other actions." )
098        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
099        protected Enumeration<RequestPriority> priority;
100
101        /**
102         * A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.
103         */
104        @Child(name = "code", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
105        @Description(shortDefinition="Code representing the meaning of the action or sub-actions", formalDefinition="A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template." )
106        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-code")
107        protected List<CodeableConcept> code;
108
109        /**
110         * Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.
111         */
112        @Child(name = "documentation", type = {RelatedArtifact.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
113        @Description(shortDefinition="Supporting documentation for the intended performer of the action", formalDefinition="Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources." )
114        protected List<RelatedArtifact> documentation;
115
116        /**
117         * Goals that are intended to be achieved by following the requests in this action.
118         */
119        @Child(name = "goal", type = {Goal.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
120        @Description(shortDefinition="What goals", formalDefinition="Goals that are intended to be achieved by following the requests in this action." )
121        protected List<Reference> goal;
122
123        /**
124         * An expression that describes applicability criteria, or start/stop conditions for the action.
125         */
126        @Child(name = "condition", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
127        @Description(shortDefinition="Whether or not the action is applicable", formalDefinition="An expression that describes applicability criteria, or start/stop conditions for the action." )
128        protected List<RequestGroupActionConditionComponent> condition;
129
130        /**
131         * A relationship to another action such as "before" or "30-60 minutes after start of".
132         */
133        @Child(name = "relatedAction", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
134        @Description(shortDefinition="Relationship to another action", formalDefinition="A relationship to another action such as \"before\" or \"30-60 minutes after start of\"." )
135        protected List<RequestGroupActionRelatedActionComponent> relatedAction;
136
137        /**
138         * An optional value describing when the action should be performed.
139         */
140        @Child(name = "timing", type = {DateTimeType.class, Age.class, Period.class, Duration.class, Range.class, Timing.class}, order=12, min=0, max=1, modifier=false, summary=false)
141        @Description(shortDefinition="When the action should take place", formalDefinition="An optional value describing when the action should be performed." )
142        protected DataType timing;
143
144        /**
145         * Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc.
146         */
147        @Child(name = "location", type = {CodeableReference.class}, order=13, min=0, max=1, modifier=false, summary=false)
148        @Description(shortDefinition="Where it should happen", formalDefinition="Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc." )
149        protected CodeableReference location;
150
151        /**
152         * The participant that should perform or be responsible for this action.
153         */
154        @Child(name = "participant", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
155        @Description(shortDefinition="Who should perform the action", formalDefinition="The participant that should perform or be responsible for this action." )
156        protected List<RequestGroupActionParticipantComponent> participant;
157
158        /**
159         * The type of action to perform (create, update, remove).
160         */
161        @Child(name = "type", type = {CodeableConcept.class}, order=15, min=0, max=1, modifier=false, summary=false)
162        @Description(shortDefinition="create | update | remove | fire-event", formalDefinition="The type of action to perform (create, update, remove)." )
163        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-type")
164        protected CodeableConcept type;
165
166        /**
167         * Defines the grouping behavior for the action and its children.
168         */
169        @Child(name = "groupingBehavior", type = {CodeType.class}, order=16, min=0, max=1, modifier=false, summary=false)
170        @Description(shortDefinition="visual-group | logical-group | sentence-group", formalDefinition="Defines the grouping behavior for the action and its children." )
171        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-grouping-behavior")
172        protected Enumeration<ActionGroupingBehavior> groupingBehavior;
173
174        /**
175         * Defines the selection behavior for the action and its children.
176         */
177        @Child(name = "selectionBehavior", type = {CodeType.class}, order=17, min=0, max=1, modifier=false, summary=false)
178        @Description(shortDefinition="any | all | all-or-none | exactly-one | at-most-one | one-or-more", formalDefinition="Defines the selection behavior for the action and its children." )
179        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-selection-behavior")
180        protected Enumeration<ActionSelectionBehavior> selectionBehavior;
181
182        /**
183         * Defines expectations around whether an action is required.
184         */
185        @Child(name = "requiredBehavior", type = {CodeType.class}, order=18, min=0, max=1, modifier=false, summary=false)
186        @Description(shortDefinition="must | could | must-unless-documented", formalDefinition="Defines expectations around whether an action is required." )
187        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-required-behavior")
188        protected Enumeration<ActionRequiredBehavior> requiredBehavior;
189
190        /**
191         * Defines whether the action should usually be preselected.
192         */
193        @Child(name = "precheckBehavior", type = {CodeType.class}, order=19, min=0, max=1, modifier=false, summary=false)
194        @Description(shortDefinition="yes | no", formalDefinition="Defines whether the action should usually be preselected." )
195        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-precheck-behavior")
196        protected Enumeration<ActionPrecheckBehavior> precheckBehavior;
197
198        /**
199         * Defines whether the action can be selected multiple times.
200         */
201        @Child(name = "cardinalityBehavior", type = {CodeType.class}, order=20, min=0, max=1, modifier=false, summary=false)
202        @Description(shortDefinition="single | multiple", formalDefinition="Defines whether the action can be selected multiple times." )
203        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-cardinality-behavior")
204        protected Enumeration<ActionCardinalityBehavior> cardinalityBehavior;
205
206        /**
207         * The resource that is the target of the action (e.g. CommunicationRequest).
208         */
209        @Child(name = "resource", type = {Reference.class}, order=21, min=0, max=1, modifier=false, summary=false)
210        @Description(shortDefinition="The target of the action", formalDefinition="The resource that is the target of the action (e.g. CommunicationRequest)." )
211        protected Reference resource;
212
213        /**
214         * Sub actions.
215         */
216        @Child(name = "action", type = {RequestGroupActionComponent.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
217        @Description(shortDefinition="Sub action", formalDefinition="Sub actions." )
218        protected List<RequestGroupActionComponent> action;
219
220        private static final long serialVersionUID = 969411112L;
221
222    /**
223     * Constructor
224     */
225      public RequestGroupActionComponent() {
226        super();
227      }
228
229        /**
230         * @return {@link #linkId} (The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
231         */
232        public StringType getLinkIdElement() { 
233          if (this.linkId == null)
234            if (Configuration.errorOnAutoCreate())
235              throw new Error("Attempt to auto-create RequestGroupActionComponent.linkId");
236            else if (Configuration.doAutoCreate())
237              this.linkId = new StringType(); // bb
238          return this.linkId;
239        }
240
241        public boolean hasLinkIdElement() { 
242          return this.linkId != null && !this.linkId.isEmpty();
243        }
244
245        public boolean hasLinkId() { 
246          return this.linkId != null && !this.linkId.isEmpty();
247        }
248
249        /**
250         * @param value {@link #linkId} (The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.). This is the underlying object with id, value and extensions. The accessor "getLinkId" gives direct access to the value
251         */
252        public RequestGroupActionComponent setLinkIdElement(StringType value) { 
253          this.linkId = value;
254          return this;
255        }
256
257        /**
258         * @return The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.
259         */
260        public String getLinkId() { 
261          return this.linkId == null ? null : this.linkId.getValue();
262        }
263
264        /**
265         * @param value The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.
266         */
267        public RequestGroupActionComponent setLinkId(String value) { 
268          if (Utilities.noString(value))
269            this.linkId = null;
270          else {
271            if (this.linkId == null)
272              this.linkId = new StringType();
273            this.linkId.setValue(value);
274          }
275          return this;
276        }
277
278        /**
279         * @return {@link #prefix} (A user-visible prefix for the action. For example a section or item numbering such as 1. or A.). This is the underlying object with id, value and extensions. The accessor "getPrefix" gives direct access to the value
280         */
281        public StringType getPrefixElement() { 
282          if (this.prefix == null)
283            if (Configuration.errorOnAutoCreate())
284              throw new Error("Attempt to auto-create RequestGroupActionComponent.prefix");
285            else if (Configuration.doAutoCreate())
286              this.prefix = new StringType(); // bb
287          return this.prefix;
288        }
289
290        public boolean hasPrefixElement() { 
291          return this.prefix != null && !this.prefix.isEmpty();
292        }
293
294        public boolean hasPrefix() { 
295          return this.prefix != null && !this.prefix.isEmpty();
296        }
297
298        /**
299         * @param value {@link #prefix} (A user-visible prefix for the action. For example a section or item numbering such as 1. or A.). This is the underlying object with id, value and extensions. The accessor "getPrefix" gives direct access to the value
300         */
301        public RequestGroupActionComponent setPrefixElement(StringType value) { 
302          this.prefix = value;
303          return this;
304        }
305
306        /**
307         * @return A user-visible prefix for the action. For example a section or item numbering such as 1. or A.
308         */
309        public String getPrefix() { 
310          return this.prefix == null ? null : this.prefix.getValue();
311        }
312
313        /**
314         * @param value A user-visible prefix for the action. For example a section or item numbering such as 1. or A.
315         */
316        public RequestGroupActionComponent setPrefix(String value) { 
317          if (Utilities.noString(value))
318            this.prefix = null;
319          else {
320            if (this.prefix == null)
321              this.prefix = new StringType();
322            this.prefix.setValue(value);
323          }
324          return this;
325        }
326
327        /**
328         * @return {@link #title} (The title of the action displayed to a user.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
329         */
330        public StringType getTitleElement() { 
331          if (this.title == null)
332            if (Configuration.errorOnAutoCreate())
333              throw new Error("Attempt to auto-create RequestGroupActionComponent.title");
334            else if (Configuration.doAutoCreate())
335              this.title = new StringType(); // bb
336          return this.title;
337        }
338
339        public boolean hasTitleElement() { 
340          return this.title != null && !this.title.isEmpty();
341        }
342
343        public boolean hasTitle() { 
344          return this.title != null && !this.title.isEmpty();
345        }
346
347        /**
348         * @param value {@link #title} (The title of the action displayed to a user.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
349         */
350        public RequestGroupActionComponent setTitleElement(StringType value) { 
351          this.title = value;
352          return this;
353        }
354
355        /**
356         * @return The title of the action displayed to a user.
357         */
358        public String getTitle() { 
359          return this.title == null ? null : this.title.getValue();
360        }
361
362        /**
363         * @param value The title of the action displayed to a user.
364         */
365        public RequestGroupActionComponent setTitle(String value) { 
366          if (Utilities.noString(value))
367            this.title = null;
368          else {
369            if (this.title == null)
370              this.title = new StringType();
371            this.title.setValue(value);
372          }
373          return this;
374        }
375
376        /**
377         * @return {@link #description} (A short description of the action used to provide a summary to display to the user.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
378         */
379        public StringType getDescriptionElement() { 
380          if (this.description == null)
381            if (Configuration.errorOnAutoCreate())
382              throw new Error("Attempt to auto-create RequestGroupActionComponent.description");
383            else if (Configuration.doAutoCreate())
384              this.description = new StringType(); // bb
385          return this.description;
386        }
387
388        public boolean hasDescriptionElement() { 
389          return this.description != null && !this.description.isEmpty();
390        }
391
392        public boolean hasDescription() { 
393          return this.description != null && !this.description.isEmpty();
394        }
395
396        /**
397         * @param value {@link #description} (A short description of the action used to provide a summary to display to the user.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
398         */
399        public RequestGroupActionComponent setDescriptionElement(StringType value) { 
400          this.description = value;
401          return this;
402        }
403
404        /**
405         * @return A short description of the action used to provide a summary to display to the user.
406         */
407        public String getDescription() { 
408          return this.description == null ? null : this.description.getValue();
409        }
410
411        /**
412         * @param value A short description of the action used to provide a summary to display to the user.
413         */
414        public RequestGroupActionComponent setDescription(String value) { 
415          if (Utilities.noString(value))
416            this.description = null;
417          else {
418            if (this.description == null)
419              this.description = new StringType();
420            this.description.setValue(value);
421          }
422          return this;
423        }
424
425        /**
426         * @return {@link #textEquivalent} (A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.). This is the underlying object with id, value and extensions. The accessor "getTextEquivalent" gives direct access to the value
427         */
428        public StringType getTextEquivalentElement() { 
429          if (this.textEquivalent == null)
430            if (Configuration.errorOnAutoCreate())
431              throw new Error("Attempt to auto-create RequestGroupActionComponent.textEquivalent");
432            else if (Configuration.doAutoCreate())
433              this.textEquivalent = new StringType(); // bb
434          return this.textEquivalent;
435        }
436
437        public boolean hasTextEquivalentElement() { 
438          return this.textEquivalent != null && !this.textEquivalent.isEmpty();
439        }
440
441        public boolean hasTextEquivalent() { 
442          return this.textEquivalent != null && !this.textEquivalent.isEmpty();
443        }
444
445        /**
446         * @param value {@link #textEquivalent} (A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.). This is the underlying object with id, value and extensions. The accessor "getTextEquivalent" gives direct access to the value
447         */
448        public RequestGroupActionComponent setTextEquivalentElement(StringType value) { 
449          this.textEquivalent = value;
450          return this;
451        }
452
453        /**
454         * @return A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.
455         */
456        public String getTextEquivalent() { 
457          return this.textEquivalent == null ? null : this.textEquivalent.getValue();
458        }
459
460        /**
461         * @param value A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.
462         */
463        public RequestGroupActionComponent setTextEquivalent(String value) { 
464          if (Utilities.noString(value))
465            this.textEquivalent = null;
466          else {
467            if (this.textEquivalent == null)
468              this.textEquivalent = new StringType();
469            this.textEquivalent.setValue(value);
470          }
471          return this;
472        }
473
474        /**
475         * @return {@link #priority} (Indicates how quickly the action should be addressed with respect to other actions.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
476         */
477        public Enumeration<RequestPriority> getPriorityElement() { 
478          if (this.priority == null)
479            if (Configuration.errorOnAutoCreate())
480              throw new Error("Attempt to auto-create RequestGroupActionComponent.priority");
481            else if (Configuration.doAutoCreate())
482              this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
483          return this.priority;
484        }
485
486        public boolean hasPriorityElement() { 
487          return this.priority != null && !this.priority.isEmpty();
488        }
489
490        public boolean hasPriority() { 
491          return this.priority != null && !this.priority.isEmpty();
492        }
493
494        /**
495         * @param value {@link #priority} (Indicates how quickly the action should be addressed with respect to other actions.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
496         */
497        public RequestGroupActionComponent setPriorityElement(Enumeration<RequestPriority> value) { 
498          this.priority = value;
499          return this;
500        }
501
502        /**
503         * @return Indicates how quickly the action should be addressed with respect to other actions.
504         */
505        public RequestPriority getPriority() { 
506          return this.priority == null ? null : this.priority.getValue();
507        }
508
509        /**
510         * @param value Indicates how quickly the action should be addressed with respect to other actions.
511         */
512        public RequestGroupActionComponent setPriority(RequestPriority value) { 
513          if (value == null)
514            this.priority = null;
515          else {
516            if (this.priority == null)
517              this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
518            this.priority.setValue(value);
519          }
520          return this;
521        }
522
523        /**
524         * @return {@link #code} (A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.)
525         */
526        public List<CodeableConcept> getCode() { 
527          if (this.code == null)
528            this.code = new ArrayList<CodeableConcept>();
529          return this.code;
530        }
531
532        /**
533         * @return Returns a reference to <code>this</code> for easy method chaining
534         */
535        public RequestGroupActionComponent setCode(List<CodeableConcept> theCode) { 
536          this.code = theCode;
537          return this;
538        }
539
540        public boolean hasCode() { 
541          if (this.code == null)
542            return false;
543          for (CodeableConcept item : this.code)
544            if (!item.isEmpty())
545              return true;
546          return false;
547        }
548
549        public CodeableConcept addCode() { //3
550          CodeableConcept t = new CodeableConcept();
551          if (this.code == null)
552            this.code = new ArrayList<CodeableConcept>();
553          this.code.add(t);
554          return t;
555        }
556
557        public RequestGroupActionComponent addCode(CodeableConcept t) { //3
558          if (t == null)
559            return this;
560          if (this.code == null)
561            this.code = new ArrayList<CodeableConcept>();
562          this.code.add(t);
563          return this;
564        }
565
566        /**
567         * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
568         */
569        public CodeableConcept getCodeFirstRep() { 
570          if (getCode().isEmpty()) {
571            addCode();
572          }
573          return getCode().get(0);
574        }
575
576        /**
577         * @return {@link #documentation} (Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.)
578         */
579        public List<RelatedArtifact> getDocumentation() { 
580          if (this.documentation == null)
581            this.documentation = new ArrayList<RelatedArtifact>();
582          return this.documentation;
583        }
584
585        /**
586         * @return Returns a reference to <code>this</code> for easy method chaining
587         */
588        public RequestGroupActionComponent setDocumentation(List<RelatedArtifact> theDocumentation) { 
589          this.documentation = theDocumentation;
590          return this;
591        }
592
593        public boolean hasDocumentation() { 
594          if (this.documentation == null)
595            return false;
596          for (RelatedArtifact item : this.documentation)
597            if (!item.isEmpty())
598              return true;
599          return false;
600        }
601
602        public RelatedArtifact addDocumentation() { //3
603          RelatedArtifact t = new RelatedArtifact();
604          if (this.documentation == null)
605            this.documentation = new ArrayList<RelatedArtifact>();
606          this.documentation.add(t);
607          return t;
608        }
609
610        public RequestGroupActionComponent addDocumentation(RelatedArtifact t) { //3
611          if (t == null)
612            return this;
613          if (this.documentation == null)
614            this.documentation = new ArrayList<RelatedArtifact>();
615          this.documentation.add(t);
616          return this;
617        }
618
619        /**
620         * @return The first repetition of repeating field {@link #documentation}, creating it if it does not already exist {3}
621         */
622        public RelatedArtifact getDocumentationFirstRep() { 
623          if (getDocumentation().isEmpty()) {
624            addDocumentation();
625          }
626          return getDocumentation().get(0);
627        }
628
629        /**
630         * @return {@link #goal} (Goals that are intended to be achieved by following the requests in this action.)
631         */
632        public List<Reference> getGoal() { 
633          if (this.goal == null)
634            this.goal = new ArrayList<Reference>();
635          return this.goal;
636        }
637
638        /**
639         * @return Returns a reference to <code>this</code> for easy method chaining
640         */
641        public RequestGroupActionComponent setGoal(List<Reference> theGoal) { 
642          this.goal = theGoal;
643          return this;
644        }
645
646        public boolean hasGoal() { 
647          if (this.goal == null)
648            return false;
649          for (Reference item : this.goal)
650            if (!item.isEmpty())
651              return true;
652          return false;
653        }
654
655        public Reference addGoal() { //3
656          Reference t = new Reference();
657          if (this.goal == null)
658            this.goal = new ArrayList<Reference>();
659          this.goal.add(t);
660          return t;
661        }
662
663        public RequestGroupActionComponent addGoal(Reference t) { //3
664          if (t == null)
665            return this;
666          if (this.goal == null)
667            this.goal = new ArrayList<Reference>();
668          this.goal.add(t);
669          return this;
670        }
671
672        /**
673         * @return The first repetition of repeating field {@link #goal}, creating it if it does not already exist {3}
674         */
675        public Reference getGoalFirstRep() { 
676          if (getGoal().isEmpty()) {
677            addGoal();
678          }
679          return getGoal().get(0);
680        }
681
682        /**
683         * @return {@link #condition} (An expression that describes applicability criteria, or start/stop conditions for the action.)
684         */
685        public List<RequestGroupActionConditionComponent> getCondition() { 
686          if (this.condition == null)
687            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
688          return this.condition;
689        }
690
691        /**
692         * @return Returns a reference to <code>this</code> for easy method chaining
693         */
694        public RequestGroupActionComponent setCondition(List<RequestGroupActionConditionComponent> theCondition) { 
695          this.condition = theCondition;
696          return this;
697        }
698
699        public boolean hasCondition() { 
700          if (this.condition == null)
701            return false;
702          for (RequestGroupActionConditionComponent item : this.condition)
703            if (!item.isEmpty())
704              return true;
705          return false;
706        }
707
708        public RequestGroupActionConditionComponent addCondition() { //3
709          RequestGroupActionConditionComponent t = new RequestGroupActionConditionComponent();
710          if (this.condition == null)
711            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
712          this.condition.add(t);
713          return t;
714        }
715
716        public RequestGroupActionComponent addCondition(RequestGroupActionConditionComponent t) { //3
717          if (t == null)
718            return this;
719          if (this.condition == null)
720            this.condition = new ArrayList<RequestGroupActionConditionComponent>();
721          this.condition.add(t);
722          return this;
723        }
724
725        /**
726         * @return The first repetition of repeating field {@link #condition}, creating it if it does not already exist {3}
727         */
728        public RequestGroupActionConditionComponent getConditionFirstRep() { 
729          if (getCondition().isEmpty()) {
730            addCondition();
731          }
732          return getCondition().get(0);
733        }
734
735        /**
736         * @return {@link #relatedAction} (A relationship to another action such as "before" or "30-60 minutes after start of".)
737         */
738        public List<RequestGroupActionRelatedActionComponent> getRelatedAction() { 
739          if (this.relatedAction == null)
740            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
741          return this.relatedAction;
742        }
743
744        /**
745         * @return Returns a reference to <code>this</code> for easy method chaining
746         */
747        public RequestGroupActionComponent setRelatedAction(List<RequestGroupActionRelatedActionComponent> theRelatedAction) { 
748          this.relatedAction = theRelatedAction;
749          return this;
750        }
751
752        public boolean hasRelatedAction() { 
753          if (this.relatedAction == null)
754            return false;
755          for (RequestGroupActionRelatedActionComponent item : this.relatedAction)
756            if (!item.isEmpty())
757              return true;
758          return false;
759        }
760
761        public RequestGroupActionRelatedActionComponent addRelatedAction() { //3
762          RequestGroupActionRelatedActionComponent t = new RequestGroupActionRelatedActionComponent();
763          if (this.relatedAction == null)
764            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
765          this.relatedAction.add(t);
766          return t;
767        }
768
769        public RequestGroupActionComponent addRelatedAction(RequestGroupActionRelatedActionComponent t) { //3
770          if (t == null)
771            return this;
772          if (this.relatedAction == null)
773            this.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
774          this.relatedAction.add(t);
775          return this;
776        }
777
778        /**
779         * @return The first repetition of repeating field {@link #relatedAction}, creating it if it does not already exist {3}
780         */
781        public RequestGroupActionRelatedActionComponent getRelatedActionFirstRep() { 
782          if (getRelatedAction().isEmpty()) {
783            addRelatedAction();
784          }
785          return getRelatedAction().get(0);
786        }
787
788        /**
789         * @return {@link #timing} (An optional value describing when the action should be performed.)
790         */
791        public DataType getTiming() { 
792          return this.timing;
793        }
794
795        /**
796         * @return {@link #timing} (An optional value describing when the action should be performed.)
797         */
798        public DateTimeType getTimingDateTimeType() throws FHIRException { 
799          if (this.timing == null)
800            this.timing = new DateTimeType();
801          if (!(this.timing instanceof DateTimeType))
802            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.timing.getClass().getName()+" was encountered");
803          return (DateTimeType) this.timing;
804        }
805
806        public boolean hasTimingDateTimeType() { 
807          return this != null && this.timing instanceof DateTimeType;
808        }
809
810        /**
811         * @return {@link #timing} (An optional value describing when the action should be performed.)
812         */
813        public Age getTimingAge() throws FHIRException { 
814          if (this.timing == null)
815            this.timing = new Age();
816          if (!(this.timing instanceof Age))
817            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.timing.getClass().getName()+" was encountered");
818          return (Age) this.timing;
819        }
820
821        public boolean hasTimingAge() { 
822          return this != null && this.timing instanceof Age;
823        }
824
825        /**
826         * @return {@link #timing} (An optional value describing when the action should be performed.)
827         */
828        public Period getTimingPeriod() throws FHIRException { 
829          if (this.timing == null)
830            this.timing = new Period();
831          if (!(this.timing instanceof Period))
832            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.timing.getClass().getName()+" was encountered");
833          return (Period) this.timing;
834        }
835
836        public boolean hasTimingPeriod() { 
837          return this != null && this.timing instanceof Period;
838        }
839
840        /**
841         * @return {@link #timing} (An optional value describing when the action should be performed.)
842         */
843        public Duration getTimingDuration() throws FHIRException { 
844          if (this.timing == null)
845            this.timing = new Duration();
846          if (!(this.timing instanceof Duration))
847            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.timing.getClass().getName()+" was encountered");
848          return (Duration) this.timing;
849        }
850
851        public boolean hasTimingDuration() { 
852          return this != null && this.timing instanceof Duration;
853        }
854
855        /**
856         * @return {@link #timing} (An optional value describing when the action should be performed.)
857         */
858        public Range getTimingRange() throws FHIRException { 
859          if (this.timing == null)
860            this.timing = new Range();
861          if (!(this.timing instanceof Range))
862            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.timing.getClass().getName()+" was encountered");
863          return (Range) this.timing;
864        }
865
866        public boolean hasTimingRange() { 
867          return this != null && this.timing instanceof Range;
868        }
869
870        /**
871         * @return {@link #timing} (An optional value describing when the action should be performed.)
872         */
873        public Timing getTimingTiming() throws FHIRException { 
874          if (this.timing == null)
875            this.timing = new Timing();
876          if (!(this.timing instanceof Timing))
877            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.timing.getClass().getName()+" was encountered");
878          return (Timing) this.timing;
879        }
880
881        public boolean hasTimingTiming() { 
882          return this != null && this.timing instanceof Timing;
883        }
884
885        public boolean hasTiming() { 
886          return this.timing != null && !this.timing.isEmpty();
887        }
888
889        /**
890         * @param value {@link #timing} (An optional value describing when the action should be performed.)
891         */
892        public RequestGroupActionComponent setTiming(DataType value) { 
893          if (value != null && !(value instanceof DateTimeType || value instanceof Age || value instanceof Period || value instanceof Duration || value instanceof Range || value instanceof Timing))
894            throw new Error("Not the right type for RequestGroup.action.timing[x]: "+value.fhirType());
895          this.timing = value;
896          return this;
897        }
898
899        /**
900         * @return {@link #location} (Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc.)
901         */
902        public CodeableReference getLocation() { 
903          if (this.location == null)
904            if (Configuration.errorOnAutoCreate())
905              throw new Error("Attempt to auto-create RequestGroupActionComponent.location");
906            else if (Configuration.doAutoCreate())
907              this.location = new CodeableReference(); // cc
908          return this.location;
909        }
910
911        public boolean hasLocation() { 
912          return this.location != null && !this.location.isEmpty();
913        }
914
915        /**
916         * @param value {@link #location} (Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc.)
917         */
918        public RequestGroupActionComponent setLocation(CodeableReference value) { 
919          this.location = value;
920          return this;
921        }
922
923        /**
924         * @return {@link #participant} (The participant that should perform or be responsible for this action.)
925         */
926        public List<RequestGroupActionParticipantComponent> getParticipant() { 
927          if (this.participant == null)
928            this.participant = new ArrayList<RequestGroupActionParticipantComponent>();
929          return this.participant;
930        }
931
932        /**
933         * @return Returns a reference to <code>this</code> for easy method chaining
934         */
935        public RequestGroupActionComponent setParticipant(List<RequestGroupActionParticipantComponent> theParticipant) { 
936          this.participant = theParticipant;
937          return this;
938        }
939
940        public boolean hasParticipant() { 
941          if (this.participant == null)
942            return false;
943          for (RequestGroupActionParticipantComponent item : this.participant)
944            if (!item.isEmpty())
945              return true;
946          return false;
947        }
948
949        public RequestGroupActionParticipantComponent addParticipant() { //3
950          RequestGroupActionParticipantComponent t = new RequestGroupActionParticipantComponent();
951          if (this.participant == null)
952            this.participant = new ArrayList<RequestGroupActionParticipantComponent>();
953          this.participant.add(t);
954          return t;
955        }
956
957        public RequestGroupActionComponent addParticipant(RequestGroupActionParticipantComponent t) { //3
958          if (t == null)
959            return this;
960          if (this.participant == null)
961            this.participant = new ArrayList<RequestGroupActionParticipantComponent>();
962          this.participant.add(t);
963          return this;
964        }
965
966        /**
967         * @return The first repetition of repeating field {@link #participant}, creating it if it does not already exist {3}
968         */
969        public RequestGroupActionParticipantComponent getParticipantFirstRep() { 
970          if (getParticipant().isEmpty()) {
971            addParticipant();
972          }
973          return getParticipant().get(0);
974        }
975
976        /**
977         * @return {@link #type} (The type of action to perform (create, update, remove).)
978         */
979        public CodeableConcept getType() { 
980          if (this.type == null)
981            if (Configuration.errorOnAutoCreate())
982              throw new Error("Attempt to auto-create RequestGroupActionComponent.type");
983            else if (Configuration.doAutoCreate())
984              this.type = new CodeableConcept(); // cc
985          return this.type;
986        }
987
988        public boolean hasType() { 
989          return this.type != null && !this.type.isEmpty();
990        }
991
992        /**
993         * @param value {@link #type} (The type of action to perform (create, update, remove).)
994         */
995        public RequestGroupActionComponent setType(CodeableConcept value) { 
996          this.type = value;
997          return this;
998        }
999
1000        /**
1001         * @return {@link #groupingBehavior} (Defines the grouping behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getGroupingBehavior" gives direct access to the value
1002         */
1003        public Enumeration<ActionGroupingBehavior> getGroupingBehaviorElement() { 
1004          if (this.groupingBehavior == null)
1005            if (Configuration.errorOnAutoCreate())
1006              throw new Error("Attempt to auto-create RequestGroupActionComponent.groupingBehavior");
1007            else if (Configuration.doAutoCreate())
1008              this.groupingBehavior = new Enumeration<ActionGroupingBehavior>(new ActionGroupingBehaviorEnumFactory()); // bb
1009          return this.groupingBehavior;
1010        }
1011
1012        public boolean hasGroupingBehaviorElement() { 
1013          return this.groupingBehavior != null && !this.groupingBehavior.isEmpty();
1014        }
1015
1016        public boolean hasGroupingBehavior() { 
1017          return this.groupingBehavior != null && !this.groupingBehavior.isEmpty();
1018        }
1019
1020        /**
1021         * @param value {@link #groupingBehavior} (Defines the grouping behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getGroupingBehavior" gives direct access to the value
1022         */
1023        public RequestGroupActionComponent setGroupingBehaviorElement(Enumeration<ActionGroupingBehavior> value) { 
1024          this.groupingBehavior = value;
1025          return this;
1026        }
1027
1028        /**
1029         * @return Defines the grouping behavior for the action and its children.
1030         */
1031        public ActionGroupingBehavior getGroupingBehavior() { 
1032          return this.groupingBehavior == null ? null : this.groupingBehavior.getValue();
1033        }
1034
1035        /**
1036         * @param value Defines the grouping behavior for the action and its children.
1037         */
1038        public RequestGroupActionComponent setGroupingBehavior(ActionGroupingBehavior value) { 
1039          if (value == null)
1040            this.groupingBehavior = null;
1041          else {
1042            if (this.groupingBehavior == null)
1043              this.groupingBehavior = new Enumeration<ActionGroupingBehavior>(new ActionGroupingBehaviorEnumFactory());
1044            this.groupingBehavior.setValue(value);
1045          }
1046          return this;
1047        }
1048
1049        /**
1050         * @return {@link #selectionBehavior} (Defines the selection behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getSelectionBehavior" gives direct access to the value
1051         */
1052        public Enumeration<ActionSelectionBehavior> getSelectionBehaviorElement() { 
1053          if (this.selectionBehavior == null)
1054            if (Configuration.errorOnAutoCreate())
1055              throw new Error("Attempt to auto-create RequestGroupActionComponent.selectionBehavior");
1056            else if (Configuration.doAutoCreate())
1057              this.selectionBehavior = new Enumeration<ActionSelectionBehavior>(new ActionSelectionBehaviorEnumFactory()); // bb
1058          return this.selectionBehavior;
1059        }
1060
1061        public boolean hasSelectionBehaviorElement() { 
1062          return this.selectionBehavior != null && !this.selectionBehavior.isEmpty();
1063        }
1064
1065        public boolean hasSelectionBehavior() { 
1066          return this.selectionBehavior != null && !this.selectionBehavior.isEmpty();
1067        }
1068
1069        /**
1070         * @param value {@link #selectionBehavior} (Defines the selection behavior for the action and its children.). This is the underlying object with id, value and extensions. The accessor "getSelectionBehavior" gives direct access to the value
1071         */
1072        public RequestGroupActionComponent setSelectionBehaviorElement(Enumeration<ActionSelectionBehavior> value) { 
1073          this.selectionBehavior = value;
1074          return this;
1075        }
1076
1077        /**
1078         * @return Defines the selection behavior for the action and its children.
1079         */
1080        public ActionSelectionBehavior getSelectionBehavior() { 
1081          return this.selectionBehavior == null ? null : this.selectionBehavior.getValue();
1082        }
1083
1084        /**
1085         * @param value Defines the selection behavior for the action and its children.
1086         */
1087        public RequestGroupActionComponent setSelectionBehavior(ActionSelectionBehavior value) { 
1088          if (value == null)
1089            this.selectionBehavior = null;
1090          else {
1091            if (this.selectionBehavior == null)
1092              this.selectionBehavior = new Enumeration<ActionSelectionBehavior>(new ActionSelectionBehaviorEnumFactory());
1093            this.selectionBehavior.setValue(value);
1094          }
1095          return this;
1096        }
1097
1098        /**
1099         * @return {@link #requiredBehavior} (Defines expectations around whether an action is required.). This is the underlying object with id, value and extensions. The accessor "getRequiredBehavior" gives direct access to the value
1100         */
1101        public Enumeration<ActionRequiredBehavior> getRequiredBehaviorElement() { 
1102          if (this.requiredBehavior == null)
1103            if (Configuration.errorOnAutoCreate())
1104              throw new Error("Attempt to auto-create RequestGroupActionComponent.requiredBehavior");
1105            else if (Configuration.doAutoCreate())
1106              this.requiredBehavior = new Enumeration<ActionRequiredBehavior>(new ActionRequiredBehaviorEnumFactory()); // bb
1107          return this.requiredBehavior;
1108        }
1109
1110        public boolean hasRequiredBehaviorElement() { 
1111          return this.requiredBehavior != null && !this.requiredBehavior.isEmpty();
1112        }
1113
1114        public boolean hasRequiredBehavior() { 
1115          return this.requiredBehavior != null && !this.requiredBehavior.isEmpty();
1116        }
1117
1118        /**
1119         * @param value {@link #requiredBehavior} (Defines expectations around whether an action is required.). This is the underlying object with id, value and extensions. The accessor "getRequiredBehavior" gives direct access to the value
1120         */
1121        public RequestGroupActionComponent setRequiredBehaviorElement(Enumeration<ActionRequiredBehavior> value) { 
1122          this.requiredBehavior = value;
1123          return this;
1124        }
1125
1126        /**
1127         * @return Defines expectations around whether an action is required.
1128         */
1129        public ActionRequiredBehavior getRequiredBehavior() { 
1130          return this.requiredBehavior == null ? null : this.requiredBehavior.getValue();
1131        }
1132
1133        /**
1134         * @param value Defines expectations around whether an action is required.
1135         */
1136        public RequestGroupActionComponent setRequiredBehavior(ActionRequiredBehavior value) { 
1137          if (value == null)
1138            this.requiredBehavior = null;
1139          else {
1140            if (this.requiredBehavior == null)
1141              this.requiredBehavior = new Enumeration<ActionRequiredBehavior>(new ActionRequiredBehaviorEnumFactory());
1142            this.requiredBehavior.setValue(value);
1143          }
1144          return this;
1145        }
1146
1147        /**
1148         * @return {@link #precheckBehavior} (Defines whether the action should usually be preselected.). This is the underlying object with id, value and extensions. The accessor "getPrecheckBehavior" gives direct access to the value
1149         */
1150        public Enumeration<ActionPrecheckBehavior> getPrecheckBehaviorElement() { 
1151          if (this.precheckBehavior == null)
1152            if (Configuration.errorOnAutoCreate())
1153              throw new Error("Attempt to auto-create RequestGroupActionComponent.precheckBehavior");
1154            else if (Configuration.doAutoCreate())
1155              this.precheckBehavior = new Enumeration<ActionPrecheckBehavior>(new ActionPrecheckBehaviorEnumFactory()); // bb
1156          return this.precheckBehavior;
1157        }
1158
1159        public boolean hasPrecheckBehaviorElement() { 
1160          return this.precheckBehavior != null && !this.precheckBehavior.isEmpty();
1161        }
1162
1163        public boolean hasPrecheckBehavior() { 
1164          return this.precheckBehavior != null && !this.precheckBehavior.isEmpty();
1165        }
1166
1167        /**
1168         * @param value {@link #precheckBehavior} (Defines whether the action should usually be preselected.). This is the underlying object with id, value and extensions. The accessor "getPrecheckBehavior" gives direct access to the value
1169         */
1170        public RequestGroupActionComponent setPrecheckBehaviorElement(Enumeration<ActionPrecheckBehavior> value) { 
1171          this.precheckBehavior = value;
1172          return this;
1173        }
1174
1175        /**
1176         * @return Defines whether the action should usually be preselected.
1177         */
1178        public ActionPrecheckBehavior getPrecheckBehavior() { 
1179          return this.precheckBehavior == null ? null : this.precheckBehavior.getValue();
1180        }
1181
1182        /**
1183         * @param value Defines whether the action should usually be preselected.
1184         */
1185        public RequestGroupActionComponent setPrecheckBehavior(ActionPrecheckBehavior value) { 
1186          if (value == null)
1187            this.precheckBehavior = null;
1188          else {
1189            if (this.precheckBehavior == null)
1190              this.precheckBehavior = new Enumeration<ActionPrecheckBehavior>(new ActionPrecheckBehaviorEnumFactory());
1191            this.precheckBehavior.setValue(value);
1192          }
1193          return this;
1194        }
1195
1196        /**
1197         * @return {@link #cardinalityBehavior} (Defines whether the action can be selected multiple times.). This is the underlying object with id, value and extensions. The accessor "getCardinalityBehavior" gives direct access to the value
1198         */
1199        public Enumeration<ActionCardinalityBehavior> getCardinalityBehaviorElement() { 
1200          if (this.cardinalityBehavior == null)
1201            if (Configuration.errorOnAutoCreate())
1202              throw new Error("Attempt to auto-create RequestGroupActionComponent.cardinalityBehavior");
1203            else if (Configuration.doAutoCreate())
1204              this.cardinalityBehavior = new Enumeration<ActionCardinalityBehavior>(new ActionCardinalityBehaviorEnumFactory()); // bb
1205          return this.cardinalityBehavior;
1206        }
1207
1208        public boolean hasCardinalityBehaviorElement() { 
1209          return this.cardinalityBehavior != null && !this.cardinalityBehavior.isEmpty();
1210        }
1211
1212        public boolean hasCardinalityBehavior() { 
1213          return this.cardinalityBehavior != null && !this.cardinalityBehavior.isEmpty();
1214        }
1215
1216        /**
1217         * @param value {@link #cardinalityBehavior} (Defines whether the action can be selected multiple times.). This is the underlying object with id, value and extensions. The accessor "getCardinalityBehavior" gives direct access to the value
1218         */
1219        public RequestGroupActionComponent setCardinalityBehaviorElement(Enumeration<ActionCardinalityBehavior> value) { 
1220          this.cardinalityBehavior = value;
1221          return this;
1222        }
1223
1224        /**
1225         * @return Defines whether the action can be selected multiple times.
1226         */
1227        public ActionCardinalityBehavior getCardinalityBehavior() { 
1228          return this.cardinalityBehavior == null ? null : this.cardinalityBehavior.getValue();
1229        }
1230
1231        /**
1232         * @param value Defines whether the action can be selected multiple times.
1233         */
1234        public RequestGroupActionComponent setCardinalityBehavior(ActionCardinalityBehavior value) { 
1235          if (value == null)
1236            this.cardinalityBehavior = null;
1237          else {
1238            if (this.cardinalityBehavior == null)
1239              this.cardinalityBehavior = new Enumeration<ActionCardinalityBehavior>(new ActionCardinalityBehaviorEnumFactory());
1240            this.cardinalityBehavior.setValue(value);
1241          }
1242          return this;
1243        }
1244
1245        /**
1246         * @return {@link #resource} (The resource that is the target of the action (e.g. CommunicationRequest).)
1247         */
1248        public Reference getResource() { 
1249          if (this.resource == null)
1250            if (Configuration.errorOnAutoCreate())
1251              throw new Error("Attempt to auto-create RequestGroupActionComponent.resource");
1252            else if (Configuration.doAutoCreate())
1253              this.resource = new Reference(); // cc
1254          return this.resource;
1255        }
1256
1257        public boolean hasResource() { 
1258          return this.resource != null && !this.resource.isEmpty();
1259        }
1260
1261        /**
1262         * @param value {@link #resource} (The resource that is the target of the action (e.g. CommunicationRequest).)
1263         */
1264        public RequestGroupActionComponent setResource(Reference value) { 
1265          this.resource = value;
1266          return this;
1267        }
1268
1269        /**
1270         * @return {@link #action} (Sub actions.)
1271         */
1272        public List<RequestGroupActionComponent> getAction() { 
1273          if (this.action == null)
1274            this.action = new ArrayList<RequestGroupActionComponent>();
1275          return this.action;
1276        }
1277
1278        /**
1279         * @return Returns a reference to <code>this</code> for easy method chaining
1280         */
1281        public RequestGroupActionComponent setAction(List<RequestGroupActionComponent> theAction) { 
1282          this.action = theAction;
1283          return this;
1284        }
1285
1286        public boolean hasAction() { 
1287          if (this.action == null)
1288            return false;
1289          for (RequestGroupActionComponent item : this.action)
1290            if (!item.isEmpty())
1291              return true;
1292          return false;
1293        }
1294
1295        public RequestGroupActionComponent addAction() { //3
1296          RequestGroupActionComponent t = new RequestGroupActionComponent();
1297          if (this.action == null)
1298            this.action = new ArrayList<RequestGroupActionComponent>();
1299          this.action.add(t);
1300          return t;
1301        }
1302
1303        public RequestGroupActionComponent addAction(RequestGroupActionComponent t) { //3
1304          if (t == null)
1305            return this;
1306          if (this.action == null)
1307            this.action = new ArrayList<RequestGroupActionComponent>();
1308          this.action.add(t);
1309          return this;
1310        }
1311
1312        /**
1313         * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist {3}
1314         */
1315        public RequestGroupActionComponent getActionFirstRep() { 
1316          if (getAction().isEmpty()) {
1317            addAction();
1318          }
1319          return getAction().get(0);
1320        }
1321
1322        protected void listChildren(List<Property> children) {
1323          super.listChildren(children);
1324          children.add(new Property("linkId", "string", "The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.", 0, 1, linkId));
1325          children.add(new Property("prefix", "string", "A user-visible prefix for the action. For example a section or item numbering such as 1. or A.", 0, 1, prefix));
1326          children.add(new Property("title", "string", "The title of the action displayed to a user.", 0, 1, title));
1327          children.add(new Property("description", "string", "A short description of the action used to provide a summary to display to the user.", 0, 1, description));
1328          children.add(new Property("textEquivalent", "string", "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.", 0, 1, textEquivalent));
1329          children.add(new Property("priority", "code", "Indicates how quickly the action should be addressed with respect to other actions.", 0, 1, priority));
1330          children.add(new Property("code", "CodeableConcept", "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.", 0, java.lang.Integer.MAX_VALUE, code));
1331          children.add(new Property("documentation", "RelatedArtifact", "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", 0, java.lang.Integer.MAX_VALUE, documentation));
1332          children.add(new Property("goal", "Reference(Goal)", "Goals that are intended to be achieved by following the requests in this action.", 0, java.lang.Integer.MAX_VALUE, goal));
1333          children.add(new Property("condition", "", "An expression that describes applicability criteria, or start/stop conditions for the action.", 0, java.lang.Integer.MAX_VALUE, condition));
1334          children.add(new Property("relatedAction", "", "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", 0, java.lang.Integer.MAX_VALUE, relatedAction));
1335          children.add(new Property("timing[x]", "dateTime|Age|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing));
1336          children.add(new Property("location", "CodeableReference(Location)", "Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc.", 0, 1, location));
1337          children.add(new Property("participant", "", "The participant that should perform or be responsible for this action.", 0, java.lang.Integer.MAX_VALUE, participant));
1338          children.add(new Property("type", "CodeableConcept", "The type of action to perform (create, update, remove).", 0, 1, type));
1339          children.add(new Property("groupingBehavior", "code", "Defines the grouping behavior for the action and its children.", 0, 1, groupingBehavior));
1340          children.add(new Property("selectionBehavior", "code", "Defines the selection behavior for the action and its children.", 0, 1, selectionBehavior));
1341          children.add(new Property("requiredBehavior", "code", "Defines expectations around whether an action is required.", 0, 1, requiredBehavior));
1342          children.add(new Property("precheckBehavior", "code", "Defines whether the action should usually be preselected.", 0, 1, precheckBehavior));
1343          children.add(new Property("cardinalityBehavior", "code", "Defines whether the action can be selected multiple times.", 0, 1, cardinalityBehavior));
1344          children.add(new Property("resource", "Reference(Any)", "The resource that is the target of the action (e.g. CommunicationRequest).", 0, 1, resource));
1345          children.add(new Property("action", "@RequestGroup.action", "Sub actions.", 0, java.lang.Integer.MAX_VALUE, action));
1346        }
1347
1348        @Override
1349        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1350          switch (_hash) {
1351          case -1102667083: /*linkId*/  return new Property("linkId", "string", "The linkId of the action from the PlanDefinition that corresponds to this action in the RequestGroup resource.", 0, 1, linkId);
1352          case -980110702: /*prefix*/  return new Property("prefix", "string", "A user-visible prefix for the action. For example a section or item numbering such as 1. or A.", 0, 1, prefix);
1353          case 110371416: /*title*/  return new Property("title", "string", "The title of the action displayed to a user.", 0, 1, title);
1354          case -1724546052: /*description*/  return new Property("description", "string", "A short description of the action used to provide a summary to display to the user.", 0, 1, description);
1355          case -900391049: /*textEquivalent*/  return new Property("textEquivalent", "string", "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.", 0, 1, textEquivalent);
1356          case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the action should be addressed with respect to other actions.", 0, 1, priority);
1357          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.", 0, java.lang.Integer.MAX_VALUE, code);
1358          case 1587405498: /*documentation*/  return new Property("documentation", "RelatedArtifact", "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", 0, java.lang.Integer.MAX_VALUE, documentation);
1359          case 3178259: /*goal*/  return new Property("goal", "Reference(Goal)", "Goals that are intended to be achieved by following the requests in this action.", 0, java.lang.Integer.MAX_VALUE, goal);
1360          case -861311717: /*condition*/  return new Property("condition", "", "An expression that describes applicability criteria, or start/stop conditions for the action.", 0, java.lang.Integer.MAX_VALUE, condition);
1361          case -384107967: /*relatedAction*/  return new Property("relatedAction", "", "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", 0, java.lang.Integer.MAX_VALUE, relatedAction);
1362          case 164632566: /*timing[x]*/  return new Property("timing[x]", "dateTime|Age|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
1363          case -873664438: /*timing*/  return new Property("timing[x]", "dateTime|Age|Period|Duration|Range|Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
1364          case -1837458939: /*timingDateTime*/  return new Property("timing[x]", "dateTime", "An optional value describing when the action should be performed.", 0, 1, timing);
1365          case 164607061: /*timingAge*/  return new Property("timing[x]", "Age", "An optional value describing when the action should be performed.", 0, 1, timing);
1366          case -615615829: /*timingPeriod*/  return new Property("timing[x]", "Period", "An optional value describing when the action should be performed.", 0, 1, timing);
1367          case -1327253506: /*timingDuration*/  return new Property("timing[x]", "Duration", "An optional value describing when the action should be performed.", 0, 1, timing);
1368          case -710871277: /*timingRange*/  return new Property("timing[x]", "Range", "An optional value describing when the action should be performed.", 0, 1, timing);
1369          case -497554124: /*timingTiming*/  return new Property("timing[x]", "Timing", "An optional value describing when the action should be performed.", 0, 1, timing);
1370          case 1901043637: /*location*/  return new Property("location", "CodeableReference(Location)", "Identifies the facility where the action will occur; e.g. home, hospital, specific clinic, etc.", 0, 1, location);
1371          case 767422259: /*participant*/  return new Property("participant", "", "The participant that should perform or be responsible for this action.", 0, java.lang.Integer.MAX_VALUE, participant);
1372          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of action to perform (create, update, remove).", 0, 1, type);
1373          case 586678389: /*groupingBehavior*/  return new Property("groupingBehavior", "code", "Defines the grouping behavior for the action and its children.", 0, 1, groupingBehavior);
1374          case 168639486: /*selectionBehavior*/  return new Property("selectionBehavior", "code", "Defines the selection behavior for the action and its children.", 0, 1, selectionBehavior);
1375          case -1163906287: /*requiredBehavior*/  return new Property("requiredBehavior", "code", "Defines expectations around whether an action is required.", 0, 1, requiredBehavior);
1376          case -1174249033: /*precheckBehavior*/  return new Property("precheckBehavior", "code", "Defines whether the action should usually be preselected.", 0, 1, precheckBehavior);
1377          case -922577408: /*cardinalityBehavior*/  return new Property("cardinalityBehavior", "code", "Defines whether the action can be selected multiple times.", 0, 1, cardinalityBehavior);
1378          case -341064690: /*resource*/  return new Property("resource", "Reference(Any)", "The resource that is the target of the action (e.g. CommunicationRequest).", 0, 1, resource);
1379          case -1422950858: /*action*/  return new Property("action", "@RequestGroup.action", "Sub actions.", 0, java.lang.Integer.MAX_VALUE, action);
1380          default: return super.getNamedProperty(_hash, _name, _checkValid);
1381          }
1382
1383        }
1384
1385      @Override
1386      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1387        switch (hash) {
1388        case -1102667083: /*linkId*/ return this.linkId == null ? new Base[0] : new Base[] {this.linkId}; // StringType
1389        case -980110702: /*prefix*/ return this.prefix == null ? new Base[0] : new Base[] {this.prefix}; // StringType
1390        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1391        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1392        case -900391049: /*textEquivalent*/ return this.textEquivalent == null ? new Base[0] : new Base[] {this.textEquivalent}; // StringType
1393        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
1394        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
1395        case 1587405498: /*documentation*/ return this.documentation == null ? new Base[0] : this.documentation.toArray(new Base[this.documentation.size()]); // RelatedArtifact
1396        case 3178259: /*goal*/ return this.goal == null ? new Base[0] : this.goal.toArray(new Base[this.goal.size()]); // Reference
1397        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // RequestGroupActionConditionComponent
1398        case -384107967: /*relatedAction*/ return this.relatedAction == null ? new Base[0] : this.relatedAction.toArray(new Base[this.relatedAction.size()]); // RequestGroupActionRelatedActionComponent
1399        case -873664438: /*timing*/ return this.timing == null ? new Base[0] : new Base[] {this.timing}; // DataType
1400        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // CodeableReference
1401        case 767422259: /*participant*/ return this.participant == null ? new Base[0] : this.participant.toArray(new Base[this.participant.size()]); // RequestGroupActionParticipantComponent
1402        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1403        case 586678389: /*groupingBehavior*/ return this.groupingBehavior == null ? new Base[0] : new Base[] {this.groupingBehavior}; // Enumeration<ActionGroupingBehavior>
1404        case 168639486: /*selectionBehavior*/ return this.selectionBehavior == null ? new Base[0] : new Base[] {this.selectionBehavior}; // Enumeration<ActionSelectionBehavior>
1405        case -1163906287: /*requiredBehavior*/ return this.requiredBehavior == null ? new Base[0] : new Base[] {this.requiredBehavior}; // Enumeration<ActionRequiredBehavior>
1406        case -1174249033: /*precheckBehavior*/ return this.precheckBehavior == null ? new Base[0] : new Base[] {this.precheckBehavior}; // Enumeration<ActionPrecheckBehavior>
1407        case -922577408: /*cardinalityBehavior*/ return this.cardinalityBehavior == null ? new Base[0] : new Base[] {this.cardinalityBehavior}; // Enumeration<ActionCardinalityBehavior>
1408        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // Reference
1409        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // RequestGroupActionComponent
1410        default: return super.getProperty(hash, name, checkValid);
1411        }
1412
1413      }
1414
1415      @Override
1416      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1417        switch (hash) {
1418        case -1102667083: // linkId
1419          this.linkId = TypeConvertor.castToString(value); // StringType
1420          return value;
1421        case -980110702: // prefix
1422          this.prefix = TypeConvertor.castToString(value); // StringType
1423          return value;
1424        case 110371416: // title
1425          this.title = TypeConvertor.castToString(value); // StringType
1426          return value;
1427        case -1724546052: // description
1428          this.description = TypeConvertor.castToString(value); // StringType
1429          return value;
1430        case -900391049: // textEquivalent
1431          this.textEquivalent = TypeConvertor.castToString(value); // StringType
1432          return value;
1433        case -1165461084: // priority
1434          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
1435          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
1436          return value;
1437        case 3059181: // code
1438          this.getCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1439          return value;
1440        case 1587405498: // documentation
1441          this.getDocumentation().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
1442          return value;
1443        case 3178259: // goal
1444          this.getGoal().add(TypeConvertor.castToReference(value)); // Reference
1445          return value;
1446        case -861311717: // condition
1447          this.getCondition().add((RequestGroupActionConditionComponent) value); // RequestGroupActionConditionComponent
1448          return value;
1449        case -384107967: // relatedAction
1450          this.getRelatedAction().add((RequestGroupActionRelatedActionComponent) value); // RequestGroupActionRelatedActionComponent
1451          return value;
1452        case -873664438: // timing
1453          this.timing = TypeConvertor.castToType(value); // DataType
1454          return value;
1455        case 1901043637: // location
1456          this.location = TypeConvertor.castToCodeableReference(value); // CodeableReference
1457          return value;
1458        case 767422259: // participant
1459          this.getParticipant().add((RequestGroupActionParticipantComponent) value); // RequestGroupActionParticipantComponent
1460          return value;
1461        case 3575610: // type
1462          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1463          return value;
1464        case 586678389: // groupingBehavior
1465          value = new ActionGroupingBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1466          this.groupingBehavior = (Enumeration) value; // Enumeration<ActionGroupingBehavior>
1467          return value;
1468        case 168639486: // selectionBehavior
1469          value = new ActionSelectionBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1470          this.selectionBehavior = (Enumeration) value; // Enumeration<ActionSelectionBehavior>
1471          return value;
1472        case -1163906287: // requiredBehavior
1473          value = new ActionRequiredBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1474          this.requiredBehavior = (Enumeration) value; // Enumeration<ActionRequiredBehavior>
1475          return value;
1476        case -1174249033: // precheckBehavior
1477          value = new ActionPrecheckBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1478          this.precheckBehavior = (Enumeration) value; // Enumeration<ActionPrecheckBehavior>
1479          return value;
1480        case -922577408: // cardinalityBehavior
1481          value = new ActionCardinalityBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1482          this.cardinalityBehavior = (Enumeration) value; // Enumeration<ActionCardinalityBehavior>
1483          return value;
1484        case -341064690: // resource
1485          this.resource = TypeConvertor.castToReference(value); // Reference
1486          return value;
1487        case -1422950858: // action
1488          this.getAction().add((RequestGroupActionComponent) value); // RequestGroupActionComponent
1489          return value;
1490        default: return super.setProperty(hash, name, value);
1491        }
1492
1493      }
1494
1495      @Override
1496      public Base setProperty(String name, Base value) throws FHIRException {
1497        if (name.equals("linkId")) {
1498          this.linkId = TypeConvertor.castToString(value); // StringType
1499        } else if (name.equals("prefix")) {
1500          this.prefix = TypeConvertor.castToString(value); // StringType
1501        } else if (name.equals("title")) {
1502          this.title = TypeConvertor.castToString(value); // StringType
1503        } else if (name.equals("description")) {
1504          this.description = TypeConvertor.castToString(value); // StringType
1505        } else if (name.equals("textEquivalent")) {
1506          this.textEquivalent = TypeConvertor.castToString(value); // StringType
1507        } else if (name.equals("priority")) {
1508          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
1509          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
1510        } else if (name.equals("code")) {
1511          this.getCode().add(TypeConvertor.castToCodeableConcept(value));
1512        } else if (name.equals("documentation")) {
1513          this.getDocumentation().add(TypeConvertor.castToRelatedArtifact(value));
1514        } else if (name.equals("goal")) {
1515          this.getGoal().add(TypeConvertor.castToReference(value));
1516        } else if (name.equals("condition")) {
1517          this.getCondition().add((RequestGroupActionConditionComponent) value);
1518        } else if (name.equals("relatedAction")) {
1519          this.getRelatedAction().add((RequestGroupActionRelatedActionComponent) value);
1520        } else if (name.equals("timing[x]")) {
1521          this.timing = TypeConvertor.castToType(value); // DataType
1522        } else if (name.equals("location")) {
1523          this.location = TypeConvertor.castToCodeableReference(value); // CodeableReference
1524        } else if (name.equals("participant")) {
1525          this.getParticipant().add((RequestGroupActionParticipantComponent) value);
1526        } else if (name.equals("type")) {
1527          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1528        } else if (name.equals("groupingBehavior")) {
1529          value = new ActionGroupingBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1530          this.groupingBehavior = (Enumeration) value; // Enumeration<ActionGroupingBehavior>
1531        } else if (name.equals("selectionBehavior")) {
1532          value = new ActionSelectionBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1533          this.selectionBehavior = (Enumeration) value; // Enumeration<ActionSelectionBehavior>
1534        } else if (name.equals("requiredBehavior")) {
1535          value = new ActionRequiredBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1536          this.requiredBehavior = (Enumeration) value; // Enumeration<ActionRequiredBehavior>
1537        } else if (name.equals("precheckBehavior")) {
1538          value = new ActionPrecheckBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1539          this.precheckBehavior = (Enumeration) value; // Enumeration<ActionPrecheckBehavior>
1540        } else if (name.equals("cardinalityBehavior")) {
1541          value = new ActionCardinalityBehaviorEnumFactory().fromType(TypeConvertor.castToCode(value));
1542          this.cardinalityBehavior = (Enumeration) value; // Enumeration<ActionCardinalityBehavior>
1543        } else if (name.equals("resource")) {
1544          this.resource = TypeConvertor.castToReference(value); // Reference
1545        } else if (name.equals("action")) {
1546          this.getAction().add((RequestGroupActionComponent) value);
1547        } else
1548          return super.setProperty(name, value);
1549        return value;
1550      }
1551
1552      @Override
1553      public Base makeProperty(int hash, String name) throws FHIRException {
1554        switch (hash) {
1555        case -1102667083:  return getLinkIdElement();
1556        case -980110702:  return getPrefixElement();
1557        case 110371416:  return getTitleElement();
1558        case -1724546052:  return getDescriptionElement();
1559        case -900391049:  return getTextEquivalentElement();
1560        case -1165461084:  return getPriorityElement();
1561        case 3059181:  return addCode(); 
1562        case 1587405498:  return addDocumentation(); 
1563        case 3178259:  return addGoal(); 
1564        case -861311717:  return addCondition(); 
1565        case -384107967:  return addRelatedAction(); 
1566        case 164632566:  return getTiming();
1567        case -873664438:  return getTiming();
1568        case 1901043637:  return getLocation();
1569        case 767422259:  return addParticipant(); 
1570        case 3575610:  return getType();
1571        case 586678389:  return getGroupingBehaviorElement();
1572        case 168639486:  return getSelectionBehaviorElement();
1573        case -1163906287:  return getRequiredBehaviorElement();
1574        case -1174249033:  return getPrecheckBehaviorElement();
1575        case -922577408:  return getCardinalityBehaviorElement();
1576        case -341064690:  return getResource();
1577        case -1422950858:  return addAction(); 
1578        default: return super.makeProperty(hash, name);
1579        }
1580
1581      }
1582
1583      @Override
1584      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1585        switch (hash) {
1586        case -1102667083: /*linkId*/ return new String[] {"string"};
1587        case -980110702: /*prefix*/ return new String[] {"string"};
1588        case 110371416: /*title*/ return new String[] {"string"};
1589        case -1724546052: /*description*/ return new String[] {"string"};
1590        case -900391049: /*textEquivalent*/ return new String[] {"string"};
1591        case -1165461084: /*priority*/ return new String[] {"code"};
1592        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1593        case 1587405498: /*documentation*/ return new String[] {"RelatedArtifact"};
1594        case 3178259: /*goal*/ return new String[] {"Reference"};
1595        case -861311717: /*condition*/ return new String[] {};
1596        case -384107967: /*relatedAction*/ return new String[] {};
1597        case -873664438: /*timing*/ return new String[] {"dateTime", "Age", "Period", "Duration", "Range", "Timing"};
1598        case 1901043637: /*location*/ return new String[] {"CodeableReference"};
1599        case 767422259: /*participant*/ return new String[] {};
1600        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1601        case 586678389: /*groupingBehavior*/ return new String[] {"code"};
1602        case 168639486: /*selectionBehavior*/ return new String[] {"code"};
1603        case -1163906287: /*requiredBehavior*/ return new String[] {"code"};
1604        case -1174249033: /*precheckBehavior*/ return new String[] {"code"};
1605        case -922577408: /*cardinalityBehavior*/ return new String[] {"code"};
1606        case -341064690: /*resource*/ return new String[] {"Reference"};
1607        case -1422950858: /*action*/ return new String[] {"@RequestGroup.action"};
1608        default: return super.getTypesForProperty(hash, name);
1609        }
1610
1611      }
1612
1613      @Override
1614      public Base addChild(String name) throws FHIRException {
1615        if (name.equals("linkId")) {
1616          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.linkId");
1617        }
1618        else if (name.equals("prefix")) {
1619          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.prefix");
1620        }
1621        else if (name.equals("title")) {
1622          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.title");
1623        }
1624        else if (name.equals("description")) {
1625          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.description");
1626        }
1627        else if (name.equals("textEquivalent")) {
1628          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.textEquivalent");
1629        }
1630        else if (name.equals("priority")) {
1631          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.priority");
1632        }
1633        else if (name.equals("code")) {
1634          return addCode();
1635        }
1636        else if (name.equals("documentation")) {
1637          return addDocumentation();
1638        }
1639        else if (name.equals("goal")) {
1640          return addGoal();
1641        }
1642        else if (name.equals("condition")) {
1643          return addCondition();
1644        }
1645        else if (name.equals("relatedAction")) {
1646          return addRelatedAction();
1647        }
1648        else if (name.equals("timingDateTime")) {
1649          this.timing = new DateTimeType();
1650          return this.timing;
1651        }
1652        else if (name.equals("timingAge")) {
1653          this.timing = new Age();
1654          return this.timing;
1655        }
1656        else if (name.equals("timingPeriod")) {
1657          this.timing = new Period();
1658          return this.timing;
1659        }
1660        else if (name.equals("timingDuration")) {
1661          this.timing = new Duration();
1662          return this.timing;
1663        }
1664        else if (name.equals("timingRange")) {
1665          this.timing = new Range();
1666          return this.timing;
1667        }
1668        else if (name.equals("timingTiming")) {
1669          this.timing = new Timing();
1670          return this.timing;
1671        }
1672        else if (name.equals("location")) {
1673          this.location = new CodeableReference();
1674          return this.location;
1675        }
1676        else if (name.equals("participant")) {
1677          return addParticipant();
1678        }
1679        else if (name.equals("type")) {
1680          this.type = new CodeableConcept();
1681          return this.type;
1682        }
1683        else if (name.equals("groupingBehavior")) {
1684          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.groupingBehavior");
1685        }
1686        else if (name.equals("selectionBehavior")) {
1687          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.selectionBehavior");
1688        }
1689        else if (name.equals("requiredBehavior")) {
1690          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.requiredBehavior");
1691        }
1692        else if (name.equals("precheckBehavior")) {
1693          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.precheckBehavior");
1694        }
1695        else if (name.equals("cardinalityBehavior")) {
1696          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.cardinalityBehavior");
1697        }
1698        else if (name.equals("resource")) {
1699          this.resource = new Reference();
1700          return this.resource;
1701        }
1702        else if (name.equals("action")) {
1703          return addAction();
1704        }
1705        else
1706          return super.addChild(name);
1707      }
1708
1709      public RequestGroupActionComponent copy() {
1710        RequestGroupActionComponent dst = new RequestGroupActionComponent();
1711        copyValues(dst);
1712        return dst;
1713      }
1714
1715      public void copyValues(RequestGroupActionComponent dst) {
1716        super.copyValues(dst);
1717        dst.linkId = linkId == null ? null : linkId.copy();
1718        dst.prefix = prefix == null ? null : prefix.copy();
1719        dst.title = title == null ? null : title.copy();
1720        dst.description = description == null ? null : description.copy();
1721        dst.textEquivalent = textEquivalent == null ? null : textEquivalent.copy();
1722        dst.priority = priority == null ? null : priority.copy();
1723        if (code != null) {
1724          dst.code = new ArrayList<CodeableConcept>();
1725          for (CodeableConcept i : code)
1726            dst.code.add(i.copy());
1727        };
1728        if (documentation != null) {
1729          dst.documentation = new ArrayList<RelatedArtifact>();
1730          for (RelatedArtifact i : documentation)
1731            dst.documentation.add(i.copy());
1732        };
1733        if (goal != null) {
1734          dst.goal = new ArrayList<Reference>();
1735          for (Reference i : goal)
1736            dst.goal.add(i.copy());
1737        };
1738        if (condition != null) {
1739          dst.condition = new ArrayList<RequestGroupActionConditionComponent>();
1740          for (RequestGroupActionConditionComponent i : condition)
1741            dst.condition.add(i.copy());
1742        };
1743        if (relatedAction != null) {
1744          dst.relatedAction = new ArrayList<RequestGroupActionRelatedActionComponent>();
1745          for (RequestGroupActionRelatedActionComponent i : relatedAction)
1746            dst.relatedAction.add(i.copy());
1747        };
1748        dst.timing = timing == null ? null : timing.copy();
1749        dst.location = location == null ? null : location.copy();
1750        if (participant != null) {
1751          dst.participant = new ArrayList<RequestGroupActionParticipantComponent>();
1752          for (RequestGroupActionParticipantComponent i : participant)
1753            dst.participant.add(i.copy());
1754        };
1755        dst.type = type == null ? null : type.copy();
1756        dst.groupingBehavior = groupingBehavior == null ? null : groupingBehavior.copy();
1757        dst.selectionBehavior = selectionBehavior == null ? null : selectionBehavior.copy();
1758        dst.requiredBehavior = requiredBehavior == null ? null : requiredBehavior.copy();
1759        dst.precheckBehavior = precheckBehavior == null ? null : precheckBehavior.copy();
1760        dst.cardinalityBehavior = cardinalityBehavior == null ? null : cardinalityBehavior.copy();
1761        dst.resource = resource == null ? null : resource.copy();
1762        if (action != null) {
1763          dst.action = new ArrayList<RequestGroupActionComponent>();
1764          for (RequestGroupActionComponent i : action)
1765            dst.action.add(i.copy());
1766        };
1767      }
1768
1769      @Override
1770      public boolean equalsDeep(Base other_) {
1771        if (!super.equalsDeep(other_))
1772          return false;
1773        if (!(other_ instanceof RequestGroupActionComponent))
1774          return false;
1775        RequestGroupActionComponent o = (RequestGroupActionComponent) other_;
1776        return compareDeep(linkId, o.linkId, true) && compareDeep(prefix, o.prefix, true) && compareDeep(title, o.title, true)
1777           && compareDeep(description, o.description, true) && compareDeep(textEquivalent, o.textEquivalent, true)
1778           && compareDeep(priority, o.priority, true) && compareDeep(code, o.code, true) && compareDeep(documentation, o.documentation, true)
1779           && compareDeep(goal, o.goal, true) && compareDeep(condition, o.condition, true) && compareDeep(relatedAction, o.relatedAction, true)
1780           && compareDeep(timing, o.timing, true) && compareDeep(location, o.location, true) && compareDeep(participant, o.participant, true)
1781           && compareDeep(type, o.type, true) && compareDeep(groupingBehavior, o.groupingBehavior, true) && compareDeep(selectionBehavior, o.selectionBehavior, true)
1782           && compareDeep(requiredBehavior, o.requiredBehavior, true) && compareDeep(precheckBehavior, o.precheckBehavior, true)
1783           && compareDeep(cardinalityBehavior, o.cardinalityBehavior, true) && compareDeep(resource, o.resource, true)
1784           && compareDeep(action, o.action, true);
1785      }
1786
1787      @Override
1788      public boolean equalsShallow(Base other_) {
1789        if (!super.equalsShallow(other_))
1790          return false;
1791        if (!(other_ instanceof RequestGroupActionComponent))
1792          return false;
1793        RequestGroupActionComponent o = (RequestGroupActionComponent) other_;
1794        return compareValues(linkId, o.linkId, true) && compareValues(prefix, o.prefix, true) && compareValues(title, o.title, true)
1795           && compareValues(description, o.description, true) && compareValues(textEquivalent, o.textEquivalent, true)
1796           && compareValues(priority, o.priority, true) && compareValues(groupingBehavior, o.groupingBehavior, true)
1797           && compareValues(selectionBehavior, o.selectionBehavior, true) && compareValues(requiredBehavior, o.requiredBehavior, true)
1798           && compareValues(precheckBehavior, o.precheckBehavior, true) && compareValues(cardinalityBehavior, o.cardinalityBehavior, true)
1799          ;
1800      }
1801
1802      public boolean isEmpty() {
1803        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(linkId, prefix, title, description
1804          , textEquivalent, priority, code, documentation, goal, condition, relatedAction
1805          , timing, location, participant, type, groupingBehavior, selectionBehavior, requiredBehavior
1806          , precheckBehavior, cardinalityBehavior, resource, action);
1807      }
1808
1809  public String fhirType() {
1810    return "RequestGroup.action";
1811
1812  }
1813
1814  }
1815
1816    @Block()
1817    public static class RequestGroupActionConditionComponent extends BackboneElement implements IBaseBackboneElement {
1818        /**
1819         * The kind of condition.
1820         */
1821        @Child(name = "kind", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1822        @Description(shortDefinition="applicability | start | stop", formalDefinition="The kind of condition." )
1823        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-condition-kind")
1824        protected Enumeration<ActionConditionKind> kind;
1825
1826        /**
1827         * An expression that returns true or false, indicating whether or not the condition is satisfied.
1828         */
1829        @Child(name = "expression", type = {Expression.class}, order=2, min=0, max=1, modifier=false, summary=false)
1830        @Description(shortDefinition="Boolean-valued expression", formalDefinition="An expression that returns true or false, indicating whether or not the condition is satisfied." )
1831        protected Expression expression;
1832
1833        private static final long serialVersionUID = -455150438L;
1834
1835    /**
1836     * Constructor
1837     */
1838      public RequestGroupActionConditionComponent() {
1839        super();
1840      }
1841
1842    /**
1843     * Constructor
1844     */
1845      public RequestGroupActionConditionComponent(ActionConditionKind kind) {
1846        super();
1847        this.setKind(kind);
1848      }
1849
1850        /**
1851         * @return {@link #kind} (The kind of condition.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
1852         */
1853        public Enumeration<ActionConditionKind> getKindElement() { 
1854          if (this.kind == null)
1855            if (Configuration.errorOnAutoCreate())
1856              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.kind");
1857            else if (Configuration.doAutoCreate())
1858              this.kind = new Enumeration<ActionConditionKind>(new ActionConditionKindEnumFactory()); // bb
1859          return this.kind;
1860        }
1861
1862        public boolean hasKindElement() { 
1863          return this.kind != null && !this.kind.isEmpty();
1864        }
1865
1866        public boolean hasKind() { 
1867          return this.kind != null && !this.kind.isEmpty();
1868        }
1869
1870        /**
1871         * @param value {@link #kind} (The kind of condition.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
1872         */
1873        public RequestGroupActionConditionComponent setKindElement(Enumeration<ActionConditionKind> value) { 
1874          this.kind = value;
1875          return this;
1876        }
1877
1878        /**
1879         * @return The kind of condition.
1880         */
1881        public ActionConditionKind getKind() { 
1882          return this.kind == null ? null : this.kind.getValue();
1883        }
1884
1885        /**
1886         * @param value The kind of condition.
1887         */
1888        public RequestGroupActionConditionComponent setKind(ActionConditionKind value) { 
1889            if (this.kind == null)
1890              this.kind = new Enumeration<ActionConditionKind>(new ActionConditionKindEnumFactory());
1891            this.kind.setValue(value);
1892          return this;
1893        }
1894
1895        /**
1896         * @return {@link #expression} (An expression that returns true or false, indicating whether or not the condition is satisfied.)
1897         */
1898        public Expression getExpression() { 
1899          if (this.expression == null)
1900            if (Configuration.errorOnAutoCreate())
1901              throw new Error("Attempt to auto-create RequestGroupActionConditionComponent.expression");
1902            else if (Configuration.doAutoCreate())
1903              this.expression = new Expression(); // cc
1904          return this.expression;
1905        }
1906
1907        public boolean hasExpression() { 
1908          return this.expression != null && !this.expression.isEmpty();
1909        }
1910
1911        /**
1912         * @param value {@link #expression} (An expression that returns true or false, indicating whether or not the condition is satisfied.)
1913         */
1914        public RequestGroupActionConditionComponent setExpression(Expression value) { 
1915          this.expression = value;
1916          return this;
1917        }
1918
1919        protected void listChildren(List<Property> children) {
1920          super.listChildren(children);
1921          children.add(new Property("kind", "code", "The kind of condition.", 0, 1, kind));
1922          children.add(new Property("expression", "Expression", "An expression that returns true or false, indicating whether or not the condition is satisfied.", 0, 1, expression));
1923        }
1924
1925        @Override
1926        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1927          switch (_hash) {
1928          case 3292052: /*kind*/  return new Property("kind", "code", "The kind of condition.", 0, 1, kind);
1929          case -1795452264: /*expression*/  return new Property("expression", "Expression", "An expression that returns true or false, indicating whether or not the condition is satisfied.", 0, 1, expression);
1930          default: return super.getNamedProperty(_hash, _name, _checkValid);
1931          }
1932
1933        }
1934
1935      @Override
1936      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1937        switch (hash) {
1938        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<ActionConditionKind>
1939        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // Expression
1940        default: return super.getProperty(hash, name, checkValid);
1941        }
1942
1943      }
1944
1945      @Override
1946      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1947        switch (hash) {
1948        case 3292052: // kind
1949          value = new ActionConditionKindEnumFactory().fromType(TypeConvertor.castToCode(value));
1950          this.kind = (Enumeration) value; // Enumeration<ActionConditionKind>
1951          return value;
1952        case -1795452264: // expression
1953          this.expression = TypeConvertor.castToExpression(value); // Expression
1954          return value;
1955        default: return super.setProperty(hash, name, value);
1956        }
1957
1958      }
1959
1960      @Override
1961      public Base setProperty(String name, Base value) throws FHIRException {
1962        if (name.equals("kind")) {
1963          value = new ActionConditionKindEnumFactory().fromType(TypeConvertor.castToCode(value));
1964          this.kind = (Enumeration) value; // Enumeration<ActionConditionKind>
1965        } else if (name.equals("expression")) {
1966          this.expression = TypeConvertor.castToExpression(value); // Expression
1967        } else
1968          return super.setProperty(name, value);
1969        return value;
1970      }
1971
1972      @Override
1973      public Base makeProperty(int hash, String name) throws FHIRException {
1974        switch (hash) {
1975        case 3292052:  return getKindElement();
1976        case -1795452264:  return getExpression();
1977        default: return super.makeProperty(hash, name);
1978        }
1979
1980      }
1981
1982      @Override
1983      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1984        switch (hash) {
1985        case 3292052: /*kind*/ return new String[] {"code"};
1986        case -1795452264: /*expression*/ return new String[] {"Expression"};
1987        default: return super.getTypesForProperty(hash, name);
1988        }
1989
1990      }
1991
1992      @Override
1993      public Base addChild(String name) throws FHIRException {
1994        if (name.equals("kind")) {
1995          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.condition.kind");
1996        }
1997        else if (name.equals("expression")) {
1998          this.expression = new Expression();
1999          return this.expression;
2000        }
2001        else
2002          return super.addChild(name);
2003      }
2004
2005      public RequestGroupActionConditionComponent copy() {
2006        RequestGroupActionConditionComponent dst = new RequestGroupActionConditionComponent();
2007        copyValues(dst);
2008        return dst;
2009      }
2010
2011      public void copyValues(RequestGroupActionConditionComponent dst) {
2012        super.copyValues(dst);
2013        dst.kind = kind == null ? null : kind.copy();
2014        dst.expression = expression == null ? null : expression.copy();
2015      }
2016
2017      @Override
2018      public boolean equalsDeep(Base other_) {
2019        if (!super.equalsDeep(other_))
2020          return false;
2021        if (!(other_ instanceof RequestGroupActionConditionComponent))
2022          return false;
2023        RequestGroupActionConditionComponent o = (RequestGroupActionConditionComponent) other_;
2024        return compareDeep(kind, o.kind, true) && compareDeep(expression, o.expression, true);
2025      }
2026
2027      @Override
2028      public boolean equalsShallow(Base other_) {
2029        if (!super.equalsShallow(other_))
2030          return false;
2031        if (!(other_ instanceof RequestGroupActionConditionComponent))
2032          return false;
2033        RequestGroupActionConditionComponent o = (RequestGroupActionConditionComponent) other_;
2034        return compareValues(kind, o.kind, true);
2035      }
2036
2037      public boolean isEmpty() {
2038        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(kind, expression);
2039      }
2040
2041  public String fhirType() {
2042    return "RequestGroup.action.condition";
2043
2044  }
2045
2046  }
2047
2048    @Block()
2049    public static class RequestGroupActionRelatedActionComponent extends BackboneElement implements IBaseBackboneElement {
2050        /**
2051         * The element id of the target related action.
2052         */
2053        @Child(name = "targetId", type = {IdType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2054        @Description(shortDefinition="What action this is related to", formalDefinition="The element id of the target related action." )
2055        protected IdType targetId;
2056
2057        /**
2058         * The relationship of this action to the related action.
2059         */
2060        @Child(name = "relationship", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2061        @Description(shortDefinition="before-start | before | before-end | concurrent-with-start | concurrent | concurrent-with-end | after-start | after | after-end", formalDefinition="The relationship of this action to the related action." )
2062        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-relationship-type")
2063        protected Enumeration<ActionRelationshipType> relationship;
2064
2065        /**
2066         * A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.
2067         */
2068        @Child(name = "offset", type = {Duration.class, Range.class}, order=3, min=0, max=1, modifier=false, summary=false)
2069        @Description(shortDefinition="Time offset for the relationship", formalDefinition="A duration or range of durations to apply to the relationship. For example, 30-60 minutes before." )
2070        protected DataType offset;
2071
2072        private static final long serialVersionUID = -462773513L;
2073
2074    /**
2075     * Constructor
2076     */
2077      public RequestGroupActionRelatedActionComponent() {
2078        super();
2079      }
2080
2081    /**
2082     * Constructor
2083     */
2084      public RequestGroupActionRelatedActionComponent(String targetId, ActionRelationshipType relationship) {
2085        super();
2086        this.setTargetId(targetId);
2087        this.setRelationship(relationship);
2088      }
2089
2090        /**
2091         * @return {@link #targetId} (The element id of the target related action.). This is the underlying object with id, value and extensions. The accessor "getTargetId" gives direct access to the value
2092         */
2093        public IdType getTargetIdElement() { 
2094          if (this.targetId == null)
2095            if (Configuration.errorOnAutoCreate())
2096              throw new Error("Attempt to auto-create RequestGroupActionRelatedActionComponent.targetId");
2097            else if (Configuration.doAutoCreate())
2098              this.targetId = new IdType(); // bb
2099          return this.targetId;
2100        }
2101
2102        public boolean hasTargetIdElement() { 
2103          return this.targetId != null && !this.targetId.isEmpty();
2104        }
2105
2106        public boolean hasTargetId() { 
2107          return this.targetId != null && !this.targetId.isEmpty();
2108        }
2109
2110        /**
2111         * @param value {@link #targetId} (The element id of the target related action.). This is the underlying object with id, value and extensions. The accessor "getTargetId" gives direct access to the value
2112         */
2113        public RequestGroupActionRelatedActionComponent setTargetIdElement(IdType value) { 
2114          this.targetId = value;
2115          return this;
2116        }
2117
2118        /**
2119         * @return The element id of the target related action.
2120         */
2121        public String getTargetId() { 
2122          return this.targetId == null ? null : this.targetId.getValue();
2123        }
2124
2125        /**
2126         * @param value The element id of the target related action.
2127         */
2128        public RequestGroupActionRelatedActionComponent setTargetId(String value) { 
2129            if (this.targetId == null)
2130              this.targetId = new IdType();
2131            this.targetId.setValue(value);
2132          return this;
2133        }
2134
2135        /**
2136         * @return {@link #relationship} (The relationship of this action to the related action.). This is the underlying object with id, value and extensions. The accessor "getRelationship" gives direct access to the value
2137         */
2138        public Enumeration<ActionRelationshipType> getRelationshipElement() { 
2139          if (this.relationship == null)
2140            if (Configuration.errorOnAutoCreate())
2141              throw new Error("Attempt to auto-create RequestGroupActionRelatedActionComponent.relationship");
2142            else if (Configuration.doAutoCreate())
2143              this.relationship = new Enumeration<ActionRelationshipType>(new ActionRelationshipTypeEnumFactory()); // bb
2144          return this.relationship;
2145        }
2146
2147        public boolean hasRelationshipElement() { 
2148          return this.relationship != null && !this.relationship.isEmpty();
2149        }
2150
2151        public boolean hasRelationship() { 
2152          return this.relationship != null && !this.relationship.isEmpty();
2153        }
2154
2155        /**
2156         * @param value {@link #relationship} (The relationship of this action to the related action.). This is the underlying object with id, value and extensions. The accessor "getRelationship" gives direct access to the value
2157         */
2158        public RequestGroupActionRelatedActionComponent setRelationshipElement(Enumeration<ActionRelationshipType> value) { 
2159          this.relationship = value;
2160          return this;
2161        }
2162
2163        /**
2164         * @return The relationship of this action to the related action.
2165         */
2166        public ActionRelationshipType getRelationship() { 
2167          return this.relationship == null ? null : this.relationship.getValue();
2168        }
2169
2170        /**
2171         * @param value The relationship of this action to the related action.
2172         */
2173        public RequestGroupActionRelatedActionComponent setRelationship(ActionRelationshipType value) { 
2174            if (this.relationship == null)
2175              this.relationship = new Enumeration<ActionRelationshipType>(new ActionRelationshipTypeEnumFactory());
2176            this.relationship.setValue(value);
2177          return this;
2178        }
2179
2180        /**
2181         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
2182         */
2183        public DataType getOffset() { 
2184          return this.offset;
2185        }
2186
2187        /**
2188         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
2189         */
2190        public Duration getOffsetDuration() throws FHIRException { 
2191          if (this.offset == null)
2192            this.offset = new Duration();
2193          if (!(this.offset instanceof Duration))
2194            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.offset.getClass().getName()+" was encountered");
2195          return (Duration) this.offset;
2196        }
2197
2198        public boolean hasOffsetDuration() { 
2199          return this != null && this.offset instanceof Duration;
2200        }
2201
2202        /**
2203         * @return {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
2204         */
2205        public Range getOffsetRange() throws FHIRException { 
2206          if (this.offset == null)
2207            this.offset = new Range();
2208          if (!(this.offset instanceof Range))
2209            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.offset.getClass().getName()+" was encountered");
2210          return (Range) this.offset;
2211        }
2212
2213        public boolean hasOffsetRange() { 
2214          return this != null && this.offset instanceof Range;
2215        }
2216
2217        public boolean hasOffset() { 
2218          return this.offset != null && !this.offset.isEmpty();
2219        }
2220
2221        /**
2222         * @param value {@link #offset} (A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.)
2223         */
2224        public RequestGroupActionRelatedActionComponent setOffset(DataType value) { 
2225          if (value != null && !(value instanceof Duration || value instanceof Range))
2226            throw new Error("Not the right type for RequestGroup.action.relatedAction.offset[x]: "+value.fhirType());
2227          this.offset = value;
2228          return this;
2229        }
2230
2231        protected void listChildren(List<Property> children) {
2232          super.listChildren(children);
2233          children.add(new Property("targetId", "id", "The element id of the target related action.", 0, 1, targetId));
2234          children.add(new Property("relationship", "code", "The relationship of this action to the related action.", 0, 1, relationship));
2235          children.add(new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset));
2236        }
2237
2238        @Override
2239        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2240          switch (_hash) {
2241          case -441951604: /*targetId*/  return new Property("targetId", "id", "The element id of the target related action.", 0, 1, targetId);
2242          case -261851592: /*relationship*/  return new Property("relationship", "code", "The relationship of this action to the related action.", 0, 1, relationship);
2243          case -1960684787: /*offset[x]*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
2244          case -1019779949: /*offset*/  return new Property("offset[x]", "Duration|Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
2245          case 134075207: /*offsetDuration*/  return new Property("offset[x]", "Duration", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
2246          case 1263585386: /*offsetRange*/  return new Property("offset[x]", "Range", "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", 0, 1, offset);
2247          default: return super.getNamedProperty(_hash, _name, _checkValid);
2248          }
2249
2250        }
2251
2252      @Override
2253      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2254        switch (hash) {
2255        case -441951604: /*targetId*/ return this.targetId == null ? new Base[0] : new Base[] {this.targetId}; // IdType
2256        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : new Base[] {this.relationship}; // Enumeration<ActionRelationshipType>
2257        case -1019779949: /*offset*/ return this.offset == null ? new Base[0] : new Base[] {this.offset}; // DataType
2258        default: return super.getProperty(hash, name, checkValid);
2259        }
2260
2261      }
2262
2263      @Override
2264      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2265        switch (hash) {
2266        case -441951604: // targetId
2267          this.targetId = TypeConvertor.castToId(value); // IdType
2268          return value;
2269        case -261851592: // relationship
2270          value = new ActionRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
2271          this.relationship = (Enumeration) value; // Enumeration<ActionRelationshipType>
2272          return value;
2273        case -1019779949: // offset
2274          this.offset = TypeConvertor.castToType(value); // DataType
2275          return value;
2276        default: return super.setProperty(hash, name, value);
2277        }
2278
2279      }
2280
2281      @Override
2282      public Base setProperty(String name, Base value) throws FHIRException {
2283        if (name.equals("targetId")) {
2284          this.targetId = TypeConvertor.castToId(value); // IdType
2285        } else if (name.equals("relationship")) {
2286          value = new ActionRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
2287          this.relationship = (Enumeration) value; // Enumeration<ActionRelationshipType>
2288        } else if (name.equals("offset[x]")) {
2289          this.offset = TypeConvertor.castToType(value); // DataType
2290        } else
2291          return super.setProperty(name, value);
2292        return value;
2293      }
2294
2295      @Override
2296      public Base makeProperty(int hash, String name) throws FHIRException {
2297        switch (hash) {
2298        case -441951604:  return getTargetIdElement();
2299        case -261851592:  return getRelationshipElement();
2300        case -1960684787:  return getOffset();
2301        case -1019779949:  return getOffset();
2302        default: return super.makeProperty(hash, name);
2303        }
2304
2305      }
2306
2307      @Override
2308      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2309        switch (hash) {
2310        case -441951604: /*targetId*/ return new String[] {"id"};
2311        case -261851592: /*relationship*/ return new String[] {"code"};
2312        case -1019779949: /*offset*/ return new String[] {"Duration", "Range"};
2313        default: return super.getTypesForProperty(hash, name);
2314        }
2315
2316      }
2317
2318      @Override
2319      public Base addChild(String name) throws FHIRException {
2320        if (name.equals("targetId")) {
2321          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.relatedAction.targetId");
2322        }
2323        else if (name.equals("relationship")) {
2324          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.relatedAction.relationship");
2325        }
2326        else if (name.equals("offsetDuration")) {
2327          this.offset = new Duration();
2328          return this.offset;
2329        }
2330        else if (name.equals("offsetRange")) {
2331          this.offset = new Range();
2332          return this.offset;
2333        }
2334        else
2335          return super.addChild(name);
2336      }
2337
2338      public RequestGroupActionRelatedActionComponent copy() {
2339        RequestGroupActionRelatedActionComponent dst = new RequestGroupActionRelatedActionComponent();
2340        copyValues(dst);
2341        return dst;
2342      }
2343
2344      public void copyValues(RequestGroupActionRelatedActionComponent dst) {
2345        super.copyValues(dst);
2346        dst.targetId = targetId == null ? null : targetId.copy();
2347        dst.relationship = relationship == null ? null : relationship.copy();
2348        dst.offset = offset == null ? null : offset.copy();
2349      }
2350
2351      @Override
2352      public boolean equalsDeep(Base other_) {
2353        if (!super.equalsDeep(other_))
2354          return false;
2355        if (!(other_ instanceof RequestGroupActionRelatedActionComponent))
2356          return false;
2357        RequestGroupActionRelatedActionComponent o = (RequestGroupActionRelatedActionComponent) other_;
2358        return compareDeep(targetId, o.targetId, true) && compareDeep(relationship, o.relationship, true)
2359           && compareDeep(offset, o.offset, true);
2360      }
2361
2362      @Override
2363      public boolean equalsShallow(Base other_) {
2364        if (!super.equalsShallow(other_))
2365          return false;
2366        if (!(other_ instanceof RequestGroupActionRelatedActionComponent))
2367          return false;
2368        RequestGroupActionRelatedActionComponent o = (RequestGroupActionRelatedActionComponent) other_;
2369        return compareValues(targetId, o.targetId, true) && compareValues(relationship, o.relationship, true)
2370          ;
2371      }
2372
2373      public boolean isEmpty() {
2374        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(targetId, relationship, offset
2375          );
2376      }
2377
2378  public String fhirType() {
2379    return "RequestGroup.action.relatedAction";
2380
2381  }
2382
2383  }
2384
2385    @Block()
2386    public static class RequestGroupActionParticipantComponent extends BackboneElement implements IBaseBackboneElement {
2387        /**
2388         * The type of participant in the action.
2389         */
2390        @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2391        @Description(shortDefinition="careteam | device | group | healthcareservice | location | organization | patient | practitioner | practitionerrole | relatedperson", formalDefinition="The type of participant in the action." )
2392        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-participant-type")
2393        protected Enumeration<ActionParticipantType> type;
2394
2395        /**
2396         * The type of participant in the action.
2397         */
2398        @Child(name = "typeReference", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=2, min=0, max=1, modifier=false, summary=false)
2399        @Description(shortDefinition="Who or what can participate", formalDefinition="The type of participant in the action." )
2400        protected Reference typeReference;
2401
2402        /**
2403         * The role the participant should play in performing the described action.
2404         */
2405        @Child(name = "role", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
2406        @Description(shortDefinition="E.g. Nurse, Surgeon, Parent, etc.", formalDefinition="The role the participant should play in performing the described action." )
2407        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/action-participant-role")
2408        protected CodeableConcept role;
2409
2410        /**
2411         * Indicates how the actor will be involved in the action - author, reviewer, witness, etc.
2412         */
2413        @Child(name = "function", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
2414        @Description(shortDefinition="E.g. Author, Reviewer, Witness, etc.", formalDefinition="Indicates how the actor will be involved in the action - author, reviewer, witness, etc." )
2415        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-participant-function")
2416        protected CodeableConcept function;
2417
2418        /**
2419         * A reference to the actual participant.
2420         */
2421        @Child(name = "actor", type = {CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=5, min=0, max=1, modifier=false, summary=false)
2422        @Description(shortDefinition="Who/what is participating?", formalDefinition="A reference to the actual participant." )
2423        protected Reference actor;
2424
2425        private static final long serialVersionUID = -2026277374L;
2426
2427    /**
2428     * Constructor
2429     */
2430      public RequestGroupActionParticipantComponent() {
2431        super();
2432      }
2433
2434        /**
2435         * @return {@link #type} (The type of participant in the action.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2436         */
2437        public Enumeration<ActionParticipantType> getTypeElement() { 
2438          if (this.type == null)
2439            if (Configuration.errorOnAutoCreate())
2440              throw new Error("Attempt to auto-create RequestGroupActionParticipantComponent.type");
2441            else if (Configuration.doAutoCreate())
2442              this.type = new Enumeration<ActionParticipantType>(new ActionParticipantTypeEnumFactory()); // bb
2443          return this.type;
2444        }
2445
2446        public boolean hasTypeElement() { 
2447          return this.type != null && !this.type.isEmpty();
2448        }
2449
2450        public boolean hasType() { 
2451          return this.type != null && !this.type.isEmpty();
2452        }
2453
2454        /**
2455         * @param value {@link #type} (The type of participant in the action.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
2456         */
2457        public RequestGroupActionParticipantComponent setTypeElement(Enumeration<ActionParticipantType> value) { 
2458          this.type = value;
2459          return this;
2460        }
2461
2462        /**
2463         * @return The type of participant in the action.
2464         */
2465        public ActionParticipantType getType() { 
2466          return this.type == null ? null : this.type.getValue();
2467        }
2468
2469        /**
2470         * @param value The type of participant in the action.
2471         */
2472        public RequestGroupActionParticipantComponent setType(ActionParticipantType value) { 
2473          if (value == null)
2474            this.type = null;
2475          else {
2476            if (this.type == null)
2477              this.type = new Enumeration<ActionParticipantType>(new ActionParticipantTypeEnumFactory());
2478            this.type.setValue(value);
2479          }
2480          return this;
2481        }
2482
2483        /**
2484         * @return {@link #typeReference} (The type of participant in the action.)
2485         */
2486        public Reference getTypeReference() { 
2487          if (this.typeReference == null)
2488            if (Configuration.errorOnAutoCreate())
2489              throw new Error("Attempt to auto-create RequestGroupActionParticipantComponent.typeReference");
2490            else if (Configuration.doAutoCreate())
2491              this.typeReference = new Reference(); // cc
2492          return this.typeReference;
2493        }
2494
2495        public boolean hasTypeReference() { 
2496          return this.typeReference != null && !this.typeReference.isEmpty();
2497        }
2498
2499        /**
2500         * @param value {@link #typeReference} (The type of participant in the action.)
2501         */
2502        public RequestGroupActionParticipantComponent setTypeReference(Reference value) { 
2503          this.typeReference = value;
2504          return this;
2505        }
2506
2507        /**
2508         * @return {@link #role} (The role the participant should play in performing the described action.)
2509         */
2510        public CodeableConcept getRole() { 
2511          if (this.role == null)
2512            if (Configuration.errorOnAutoCreate())
2513              throw new Error("Attempt to auto-create RequestGroupActionParticipantComponent.role");
2514            else if (Configuration.doAutoCreate())
2515              this.role = new CodeableConcept(); // cc
2516          return this.role;
2517        }
2518
2519        public boolean hasRole() { 
2520          return this.role != null && !this.role.isEmpty();
2521        }
2522
2523        /**
2524         * @param value {@link #role} (The role the participant should play in performing the described action.)
2525         */
2526        public RequestGroupActionParticipantComponent setRole(CodeableConcept value) { 
2527          this.role = value;
2528          return this;
2529        }
2530
2531        /**
2532         * @return {@link #function} (Indicates how the actor will be involved in the action - author, reviewer, witness, etc.)
2533         */
2534        public CodeableConcept getFunction() { 
2535          if (this.function == null)
2536            if (Configuration.errorOnAutoCreate())
2537              throw new Error("Attempt to auto-create RequestGroupActionParticipantComponent.function");
2538            else if (Configuration.doAutoCreate())
2539              this.function = new CodeableConcept(); // cc
2540          return this.function;
2541        }
2542
2543        public boolean hasFunction() { 
2544          return this.function != null && !this.function.isEmpty();
2545        }
2546
2547        /**
2548         * @param value {@link #function} (Indicates how the actor will be involved in the action - author, reviewer, witness, etc.)
2549         */
2550        public RequestGroupActionParticipantComponent setFunction(CodeableConcept value) { 
2551          this.function = value;
2552          return this;
2553        }
2554
2555        /**
2556         * @return {@link #actor} (A reference to the actual participant.)
2557         */
2558        public Reference getActor() { 
2559          if (this.actor == null)
2560            if (Configuration.errorOnAutoCreate())
2561              throw new Error("Attempt to auto-create RequestGroupActionParticipantComponent.actor");
2562            else if (Configuration.doAutoCreate())
2563              this.actor = new Reference(); // cc
2564          return this.actor;
2565        }
2566
2567        public boolean hasActor() { 
2568          return this.actor != null && !this.actor.isEmpty();
2569        }
2570
2571        /**
2572         * @param value {@link #actor} (A reference to the actual participant.)
2573         */
2574        public RequestGroupActionParticipantComponent setActor(Reference value) { 
2575          this.actor = value;
2576          return this;
2577        }
2578
2579        protected void listChildren(List<Property> children) {
2580          super.listChildren(children);
2581          children.add(new Property("type", "code", "The type of participant in the action.", 0, 1, type));
2582          children.add(new Property("typeReference", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "The type of participant in the action.", 0, 1, typeReference));
2583          children.add(new Property("role", "CodeableConcept", "The role the participant should play in performing the described action.", 0, 1, role));
2584          children.add(new Property("function", "CodeableConcept", "Indicates how the actor will be involved in the action - author, reviewer, witness, etc.", 0, 1, function));
2585          children.add(new Property("actor", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "A reference to the actual participant.", 0, 1, actor));
2586        }
2587
2588        @Override
2589        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2590          switch (_hash) {
2591          case 3575610: /*type*/  return new Property("type", "code", "The type of participant in the action.", 0, 1, type);
2592          case 2074825009: /*typeReference*/  return new Property("typeReference", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "The type of participant in the action.", 0, 1, typeReference);
2593          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "The role the participant should play in performing the described action.", 0, 1, role);
2594          case 1380938712: /*function*/  return new Property("function", "CodeableConcept", "Indicates how the actor will be involved in the action - author, reviewer, witness, etc.", 0, 1, function);
2595          case 92645877: /*actor*/  return new Property("actor", "Reference(CareTeam|Device|Group|HealthcareService|Location|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "A reference to the actual participant.", 0, 1, actor);
2596          default: return super.getNamedProperty(_hash, _name, _checkValid);
2597          }
2598
2599        }
2600
2601      @Override
2602      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2603        switch (hash) {
2604        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<ActionParticipantType>
2605        case 2074825009: /*typeReference*/ return this.typeReference == null ? new Base[0] : new Base[] {this.typeReference}; // Reference
2606        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
2607        case 1380938712: /*function*/ return this.function == null ? new Base[0] : new Base[] {this.function}; // CodeableConcept
2608        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
2609        default: return super.getProperty(hash, name, checkValid);
2610        }
2611
2612      }
2613
2614      @Override
2615      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2616        switch (hash) {
2617        case 3575610: // type
2618          value = new ActionParticipantTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
2619          this.type = (Enumeration) value; // Enumeration<ActionParticipantType>
2620          return value;
2621        case 2074825009: // typeReference
2622          this.typeReference = TypeConvertor.castToReference(value); // Reference
2623          return value;
2624        case 3506294: // role
2625          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2626          return value;
2627        case 1380938712: // function
2628          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2629          return value;
2630        case 92645877: // actor
2631          this.actor = TypeConvertor.castToReference(value); // Reference
2632          return value;
2633        default: return super.setProperty(hash, name, value);
2634        }
2635
2636      }
2637
2638      @Override
2639      public Base setProperty(String name, Base value) throws FHIRException {
2640        if (name.equals("type")) {
2641          value = new ActionParticipantTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
2642          this.type = (Enumeration) value; // Enumeration<ActionParticipantType>
2643        } else if (name.equals("typeReference")) {
2644          this.typeReference = TypeConvertor.castToReference(value); // Reference
2645        } else if (name.equals("role")) {
2646          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2647        } else if (name.equals("function")) {
2648          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2649        } else if (name.equals("actor")) {
2650          this.actor = TypeConvertor.castToReference(value); // Reference
2651        } else
2652          return super.setProperty(name, value);
2653        return value;
2654      }
2655
2656      @Override
2657      public Base makeProperty(int hash, String name) throws FHIRException {
2658        switch (hash) {
2659        case 3575610:  return getTypeElement();
2660        case 2074825009:  return getTypeReference();
2661        case 3506294:  return getRole();
2662        case 1380938712:  return getFunction();
2663        case 92645877:  return getActor();
2664        default: return super.makeProperty(hash, name);
2665        }
2666
2667      }
2668
2669      @Override
2670      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2671        switch (hash) {
2672        case 3575610: /*type*/ return new String[] {"code"};
2673        case 2074825009: /*typeReference*/ return new String[] {"Reference"};
2674        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
2675        case 1380938712: /*function*/ return new String[] {"CodeableConcept"};
2676        case 92645877: /*actor*/ return new String[] {"Reference"};
2677        default: return super.getTypesForProperty(hash, name);
2678        }
2679
2680      }
2681
2682      @Override
2683      public Base addChild(String name) throws FHIRException {
2684        if (name.equals("type")) {
2685          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.action.participant.type");
2686        }
2687        else if (name.equals("typeReference")) {
2688          this.typeReference = new Reference();
2689          return this.typeReference;
2690        }
2691        else if (name.equals("role")) {
2692          this.role = new CodeableConcept();
2693          return this.role;
2694        }
2695        else if (name.equals("function")) {
2696          this.function = new CodeableConcept();
2697          return this.function;
2698        }
2699        else if (name.equals("actor")) {
2700          this.actor = new Reference();
2701          return this.actor;
2702        }
2703        else
2704          return super.addChild(name);
2705      }
2706
2707      public RequestGroupActionParticipantComponent copy() {
2708        RequestGroupActionParticipantComponent dst = new RequestGroupActionParticipantComponent();
2709        copyValues(dst);
2710        return dst;
2711      }
2712
2713      public void copyValues(RequestGroupActionParticipantComponent dst) {
2714        super.copyValues(dst);
2715        dst.type = type == null ? null : type.copy();
2716        dst.typeReference = typeReference == null ? null : typeReference.copy();
2717        dst.role = role == null ? null : role.copy();
2718        dst.function = function == null ? null : function.copy();
2719        dst.actor = actor == null ? null : actor.copy();
2720      }
2721
2722      @Override
2723      public boolean equalsDeep(Base other_) {
2724        if (!super.equalsDeep(other_))
2725          return false;
2726        if (!(other_ instanceof RequestGroupActionParticipantComponent))
2727          return false;
2728        RequestGroupActionParticipantComponent o = (RequestGroupActionParticipantComponent) other_;
2729        return compareDeep(type, o.type, true) && compareDeep(typeReference, o.typeReference, true) && compareDeep(role, o.role, true)
2730           && compareDeep(function, o.function, true) && compareDeep(actor, o.actor, true);
2731      }
2732
2733      @Override
2734      public boolean equalsShallow(Base other_) {
2735        if (!super.equalsShallow(other_))
2736          return false;
2737        if (!(other_ instanceof RequestGroupActionParticipantComponent))
2738          return false;
2739        RequestGroupActionParticipantComponent o = (RequestGroupActionParticipantComponent) other_;
2740        return compareValues(type, o.type, true);
2741      }
2742
2743      public boolean isEmpty() {
2744        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, typeReference, role
2745          , function, actor);
2746      }
2747
2748  public String fhirType() {
2749    return "RequestGroup.action.participant";
2750
2751  }
2752
2753  }
2754
2755    /**
2756     * Allows a service to provide a unique, business identifier for the request.
2757     */
2758    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2759    @Description(shortDefinition="Business identifier", formalDefinition="Allows a service to provide a unique, business identifier for the request." )
2760    protected List<Identifier> identifier;
2761
2762    /**
2763     * A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
2764     */
2765    @Child(name = "instantiatesCanonical", type = {CanonicalType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2766    @Description(shortDefinition="Instantiates FHIR protocol or definition", formalDefinition="A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request." )
2767    protected List<CanonicalType> instantiatesCanonical;
2768
2769    /**
2770     * A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.
2771     */
2772    @Child(name = "instantiatesUri", type = {UriType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2773    @Description(shortDefinition="Instantiates external protocol or definition", formalDefinition="A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request." )
2774    protected List<UriType> instantiatesUri;
2775
2776    /**
2777     * A plan, proposal or order that is fulfilled in whole or in part by this request.
2778     */
2779    @Child(name = "basedOn", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2780    @Description(shortDefinition="Fulfills plan, proposal, or order", formalDefinition="A plan, proposal or order that is fulfilled in whole or in part by this request." )
2781    protected List<Reference> basedOn;
2782
2783    /**
2784     * Completed or terminated request(s) whose function is taken by this new request.
2785     */
2786    @Child(name = "replaces", type = {Reference.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2787    @Description(shortDefinition="Request(s) replaced by this request", formalDefinition="Completed or terminated request(s) whose function is taken by this new request." )
2788    protected List<Reference> replaces;
2789
2790    /**
2791     * A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.
2792     */
2793    @Child(name = "groupIdentifier", type = {Identifier.class}, order=5, min=0, max=1, modifier=false, summary=true)
2794    @Description(shortDefinition="Composite request this is part of", formalDefinition="A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form." )
2795    protected Identifier groupIdentifier;
2796
2797    /**
2798     * The current state of the request. For request groups, the status reflects the status of all the requests in the group.
2799     */
2800    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
2801    @Description(shortDefinition="draft | active | on-hold | revoked | completed | entered-in-error | unknown", formalDefinition="The current state of the request. For request groups, the status reflects the status of all the requests in the group." )
2802    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-status")
2803    protected Enumeration<RequestStatus> status;
2804
2805    /**
2806     * Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
2807     */
2808    @Child(name = "intent", type = {CodeType.class}, order=7, min=1, max=1, modifier=true, summary=true)
2809    @Description(shortDefinition="proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option", formalDefinition="Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain." )
2810    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-intent")
2811    protected Enumeration<RequestIntent> intent;
2812
2813    /**
2814     * Indicates how quickly the request should be addressed with respect to other requests.
2815     */
2816    @Child(name = "priority", type = {CodeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
2817    @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Indicates how quickly the request should be addressed with respect to other requests." )
2818    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
2819    protected Enumeration<RequestPriority> priority;
2820
2821    /**
2822     * A code that identifies what the overall request group is.
2823     */
2824    @Child(name = "code", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=true)
2825    @Description(shortDefinition="What's being requested/ordered", formalDefinition="A code that identifies what the overall request group is." )
2826    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-code")
2827    protected CodeableConcept code;
2828
2829    /**
2830     * The subject for which the request group was created.
2831     */
2832    @Child(name = "subject", type = {Patient.class, Group.class}, order=10, min=0, max=1, modifier=false, summary=false)
2833    @Description(shortDefinition="Who the request group is about", formalDefinition="The subject for which the request group was created." )
2834    protected Reference subject;
2835
2836    /**
2837     * Describes the context of the request group, if any.
2838     */
2839    @Child(name = "encounter", type = {Encounter.class}, order=11, min=0, max=1, modifier=false, summary=false)
2840    @Description(shortDefinition="Created as part of", formalDefinition="Describes the context of the request group, if any." )
2841    protected Reference encounter;
2842
2843    /**
2844     * Indicates when the request group was created.
2845     */
2846    @Child(name = "authoredOn", type = {DateTimeType.class}, order=12, min=0, max=1, modifier=false, summary=false)
2847    @Description(shortDefinition="When the request group was authored", formalDefinition="Indicates when the request group was created." )
2848    protected DateTimeType authoredOn;
2849
2850    /**
2851     * Provides a reference to the author of the request group.
2852     */
2853    @Child(name = "author", type = {Device.class, Practitioner.class, PractitionerRole.class}, order=13, min=0, max=1, modifier=false, summary=false)
2854    @Description(shortDefinition="Device or practitioner that authored the request group", formalDefinition="Provides a reference to the author of the request group." )
2855    protected Reference author;
2856
2857    /**
2858     * Describes the reason for the request group in coded or textual form.
2859     */
2860    @Child(name = "reason", type = {CodeableReference.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2861    @Description(shortDefinition="Why the request group is needed", formalDefinition="Describes the reason for the request group in coded or textual form." )
2862    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/action-reason-code")
2863    protected List<CodeableReference> reason;
2864
2865    /**
2866     * Goals that are intended to be achieved by following the requests in this RequestGroup.
2867     */
2868    @Child(name = "goal", type = {Goal.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2869    @Description(shortDefinition="What goals", formalDefinition="Goals that are intended to be achieved by following the requests in this RequestGroup." )
2870    protected List<Reference> goal;
2871
2872    /**
2873     * Provides a mechanism to communicate additional information about the response.
2874     */
2875    @Child(name = "note", type = {Annotation.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2876    @Description(shortDefinition="Additional notes about the response", formalDefinition="Provides a mechanism to communicate additional information about the response." )
2877    protected List<Annotation> note;
2878
2879    /**
2880     * The actions, if any, produced by the evaluation of the artifact.
2881     */
2882    @Child(name = "action", type = {}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2883    @Description(shortDefinition="Proposed actions, if any", formalDefinition="The actions, if any, produced by the evaluation of the artifact." )
2884    protected List<RequestGroupActionComponent> action;
2885
2886    private static final long serialVersionUID = -2038374873L;
2887
2888  /**
2889   * Constructor
2890   */
2891    public RequestGroup() {
2892      super();
2893    }
2894
2895  /**
2896   * Constructor
2897   */
2898    public RequestGroup(RequestStatus status, RequestIntent intent) {
2899      super();
2900      this.setStatus(status);
2901      this.setIntent(intent);
2902    }
2903
2904    /**
2905     * @return {@link #identifier} (Allows a service to provide a unique, business identifier for the request.)
2906     */
2907    public List<Identifier> getIdentifier() { 
2908      if (this.identifier == null)
2909        this.identifier = new ArrayList<Identifier>();
2910      return this.identifier;
2911    }
2912
2913    /**
2914     * @return Returns a reference to <code>this</code> for easy method chaining
2915     */
2916    public RequestGroup setIdentifier(List<Identifier> theIdentifier) { 
2917      this.identifier = theIdentifier;
2918      return this;
2919    }
2920
2921    public boolean hasIdentifier() { 
2922      if (this.identifier == null)
2923        return false;
2924      for (Identifier item : this.identifier)
2925        if (!item.isEmpty())
2926          return true;
2927      return false;
2928    }
2929
2930    public Identifier addIdentifier() { //3
2931      Identifier t = new Identifier();
2932      if (this.identifier == null)
2933        this.identifier = new ArrayList<Identifier>();
2934      this.identifier.add(t);
2935      return t;
2936    }
2937
2938    public RequestGroup addIdentifier(Identifier t) { //3
2939      if (t == null)
2940        return this;
2941      if (this.identifier == null)
2942        this.identifier = new ArrayList<Identifier>();
2943      this.identifier.add(t);
2944      return this;
2945    }
2946
2947    /**
2948     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2949     */
2950    public Identifier getIdentifierFirstRep() { 
2951      if (getIdentifier().isEmpty()) {
2952        addIdentifier();
2953      }
2954      return getIdentifier().get(0);
2955    }
2956
2957    /**
2958     * @return {@link #instantiatesCanonical} (A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
2959     */
2960    public List<CanonicalType> getInstantiatesCanonical() { 
2961      if (this.instantiatesCanonical == null)
2962        this.instantiatesCanonical = new ArrayList<CanonicalType>();
2963      return this.instantiatesCanonical;
2964    }
2965
2966    /**
2967     * @return Returns a reference to <code>this</code> for easy method chaining
2968     */
2969    public RequestGroup setInstantiatesCanonical(List<CanonicalType> theInstantiatesCanonical) { 
2970      this.instantiatesCanonical = theInstantiatesCanonical;
2971      return this;
2972    }
2973
2974    public boolean hasInstantiatesCanonical() { 
2975      if (this.instantiatesCanonical == null)
2976        return false;
2977      for (CanonicalType item : this.instantiatesCanonical)
2978        if (!item.isEmpty())
2979          return true;
2980      return false;
2981    }
2982
2983    /**
2984     * @return {@link #instantiatesCanonical} (A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
2985     */
2986    public CanonicalType addInstantiatesCanonicalElement() {//2 
2987      CanonicalType t = new CanonicalType();
2988      if (this.instantiatesCanonical == null)
2989        this.instantiatesCanonical = new ArrayList<CanonicalType>();
2990      this.instantiatesCanonical.add(t);
2991      return t;
2992    }
2993
2994    /**
2995     * @param value {@link #instantiatesCanonical} (A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
2996     */
2997    public RequestGroup addInstantiatesCanonical(String value) { //1
2998      CanonicalType t = new CanonicalType();
2999      t.setValue(value);
3000      if (this.instantiatesCanonical == null)
3001        this.instantiatesCanonical = new ArrayList<CanonicalType>();
3002      this.instantiatesCanonical.add(t);
3003      return this;
3004    }
3005
3006    /**
3007     * @param value {@link #instantiatesCanonical} (A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3008     */
3009    public boolean hasInstantiatesCanonical(String value) { 
3010      if (this.instantiatesCanonical == null)
3011        return false;
3012      for (CanonicalType v : this.instantiatesCanonical)
3013        if (v.getValue().equals(value)) // canonical
3014          return true;
3015      return false;
3016    }
3017
3018    /**
3019     * @return {@link #instantiatesUri} (A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3020     */
3021    public List<UriType> getInstantiatesUri() { 
3022      if (this.instantiatesUri == null)
3023        this.instantiatesUri = new ArrayList<UriType>();
3024      return this.instantiatesUri;
3025    }
3026
3027    /**
3028     * @return Returns a reference to <code>this</code> for easy method chaining
3029     */
3030    public RequestGroup setInstantiatesUri(List<UriType> theInstantiatesUri) { 
3031      this.instantiatesUri = theInstantiatesUri;
3032      return this;
3033    }
3034
3035    public boolean hasInstantiatesUri() { 
3036      if (this.instantiatesUri == null)
3037        return false;
3038      for (UriType item : this.instantiatesUri)
3039        if (!item.isEmpty())
3040          return true;
3041      return false;
3042    }
3043
3044    /**
3045     * @return {@link #instantiatesUri} (A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3046     */
3047    public UriType addInstantiatesUriElement() {//2 
3048      UriType t = new UriType();
3049      if (this.instantiatesUri == null)
3050        this.instantiatesUri = new ArrayList<UriType>();
3051      this.instantiatesUri.add(t);
3052      return t;
3053    }
3054
3055    /**
3056     * @param value {@link #instantiatesUri} (A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3057     */
3058    public RequestGroup addInstantiatesUri(String value) { //1
3059      UriType t = new UriType();
3060      t.setValue(value);
3061      if (this.instantiatesUri == null)
3062        this.instantiatesUri = new ArrayList<UriType>();
3063      this.instantiatesUri.add(t);
3064      return this;
3065    }
3066
3067    /**
3068     * @param value {@link #instantiatesUri} (A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.)
3069     */
3070    public boolean hasInstantiatesUri(String value) { 
3071      if (this.instantiatesUri == null)
3072        return false;
3073      for (UriType v : this.instantiatesUri)
3074        if (v.getValue().equals(value)) // uri
3075          return true;
3076      return false;
3077    }
3078
3079    /**
3080     * @return {@link #basedOn} (A plan, proposal or order that is fulfilled in whole or in part by this request.)
3081     */
3082    public List<Reference> getBasedOn() { 
3083      if (this.basedOn == null)
3084        this.basedOn = new ArrayList<Reference>();
3085      return this.basedOn;
3086    }
3087
3088    /**
3089     * @return Returns a reference to <code>this</code> for easy method chaining
3090     */
3091    public RequestGroup setBasedOn(List<Reference> theBasedOn) { 
3092      this.basedOn = theBasedOn;
3093      return this;
3094    }
3095
3096    public boolean hasBasedOn() { 
3097      if (this.basedOn == null)
3098        return false;
3099      for (Reference item : this.basedOn)
3100        if (!item.isEmpty())
3101          return true;
3102      return false;
3103    }
3104
3105    public Reference addBasedOn() { //3
3106      Reference t = new Reference();
3107      if (this.basedOn == null)
3108        this.basedOn = new ArrayList<Reference>();
3109      this.basedOn.add(t);
3110      return t;
3111    }
3112
3113    public RequestGroup addBasedOn(Reference t) { //3
3114      if (t == null)
3115        return this;
3116      if (this.basedOn == null)
3117        this.basedOn = new ArrayList<Reference>();
3118      this.basedOn.add(t);
3119      return this;
3120    }
3121
3122    /**
3123     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
3124     */
3125    public Reference getBasedOnFirstRep() { 
3126      if (getBasedOn().isEmpty()) {
3127        addBasedOn();
3128      }
3129      return getBasedOn().get(0);
3130    }
3131
3132    /**
3133     * @return {@link #replaces} (Completed or terminated request(s) whose function is taken by this new request.)
3134     */
3135    public List<Reference> getReplaces() { 
3136      if (this.replaces == null)
3137        this.replaces = new ArrayList<Reference>();
3138      return this.replaces;
3139    }
3140
3141    /**
3142     * @return Returns a reference to <code>this</code> for easy method chaining
3143     */
3144    public RequestGroup setReplaces(List<Reference> theReplaces) { 
3145      this.replaces = theReplaces;
3146      return this;
3147    }
3148
3149    public boolean hasReplaces() { 
3150      if (this.replaces == null)
3151        return false;
3152      for (Reference item : this.replaces)
3153        if (!item.isEmpty())
3154          return true;
3155      return false;
3156    }
3157
3158    public Reference addReplaces() { //3
3159      Reference t = new Reference();
3160      if (this.replaces == null)
3161        this.replaces = new ArrayList<Reference>();
3162      this.replaces.add(t);
3163      return t;
3164    }
3165
3166    public RequestGroup addReplaces(Reference t) { //3
3167      if (t == null)
3168        return this;
3169      if (this.replaces == null)
3170        this.replaces = new ArrayList<Reference>();
3171      this.replaces.add(t);
3172      return this;
3173    }
3174
3175    /**
3176     * @return The first repetition of repeating field {@link #replaces}, creating it if it does not already exist {3}
3177     */
3178    public Reference getReplacesFirstRep() { 
3179      if (getReplaces().isEmpty()) {
3180        addReplaces();
3181      }
3182      return getReplaces().get(0);
3183    }
3184
3185    /**
3186     * @return {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
3187     */
3188    public Identifier getGroupIdentifier() { 
3189      if (this.groupIdentifier == null)
3190        if (Configuration.errorOnAutoCreate())
3191          throw new Error("Attempt to auto-create RequestGroup.groupIdentifier");
3192        else if (Configuration.doAutoCreate())
3193          this.groupIdentifier = new Identifier(); // cc
3194      return this.groupIdentifier;
3195    }
3196
3197    public boolean hasGroupIdentifier() { 
3198      return this.groupIdentifier != null && !this.groupIdentifier.isEmpty();
3199    }
3200
3201    /**
3202     * @param value {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
3203     */
3204    public RequestGroup setGroupIdentifier(Identifier value) { 
3205      this.groupIdentifier = value;
3206      return this;
3207    }
3208
3209    /**
3210     * @return {@link #status} (The current state of the request. For request groups, the status reflects the status of all the requests in the group.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3211     */
3212    public Enumeration<RequestStatus> getStatusElement() { 
3213      if (this.status == null)
3214        if (Configuration.errorOnAutoCreate())
3215          throw new Error("Attempt to auto-create RequestGroup.status");
3216        else if (Configuration.doAutoCreate())
3217          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory()); // bb
3218      return this.status;
3219    }
3220
3221    public boolean hasStatusElement() { 
3222      return this.status != null && !this.status.isEmpty();
3223    }
3224
3225    public boolean hasStatus() { 
3226      return this.status != null && !this.status.isEmpty();
3227    }
3228
3229    /**
3230     * @param value {@link #status} (The current state of the request. For request groups, the status reflects the status of all the requests in the group.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3231     */
3232    public RequestGroup setStatusElement(Enumeration<RequestStatus> value) { 
3233      this.status = value;
3234      return this;
3235    }
3236
3237    /**
3238     * @return The current state of the request. For request groups, the status reflects the status of all the requests in the group.
3239     */
3240    public RequestStatus getStatus() { 
3241      return this.status == null ? null : this.status.getValue();
3242    }
3243
3244    /**
3245     * @param value The current state of the request. For request groups, the status reflects the status of all the requests in the group.
3246     */
3247    public RequestGroup setStatus(RequestStatus value) { 
3248        if (this.status == null)
3249          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory());
3250        this.status.setValue(value);
3251      return this;
3252    }
3253
3254    /**
3255     * @return {@link #intent} (Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
3256     */
3257    public Enumeration<RequestIntent> getIntentElement() { 
3258      if (this.intent == null)
3259        if (Configuration.errorOnAutoCreate())
3260          throw new Error("Attempt to auto-create RequestGroup.intent");
3261        else if (Configuration.doAutoCreate())
3262          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory()); // bb
3263      return this.intent;
3264    }
3265
3266    public boolean hasIntentElement() { 
3267      return this.intent != null && !this.intent.isEmpty();
3268    }
3269
3270    public boolean hasIntent() { 
3271      return this.intent != null && !this.intent.isEmpty();
3272    }
3273
3274    /**
3275     * @param value {@link #intent} (Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
3276     */
3277    public RequestGroup setIntentElement(Enumeration<RequestIntent> value) { 
3278      this.intent = value;
3279      return this;
3280    }
3281
3282    /**
3283     * @return Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
3284     */
3285    public RequestIntent getIntent() { 
3286      return this.intent == null ? null : this.intent.getValue();
3287    }
3288
3289    /**
3290     * @param value Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.
3291     */
3292    public RequestGroup setIntent(RequestIntent value) { 
3293        if (this.intent == null)
3294          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory());
3295        this.intent.setValue(value);
3296      return this;
3297    }
3298
3299    /**
3300     * @return {@link #priority} (Indicates how quickly the request should be addressed with respect to other requests.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
3301     */
3302    public Enumeration<RequestPriority> getPriorityElement() { 
3303      if (this.priority == null)
3304        if (Configuration.errorOnAutoCreate())
3305          throw new Error("Attempt to auto-create RequestGroup.priority");
3306        else if (Configuration.doAutoCreate())
3307          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
3308      return this.priority;
3309    }
3310
3311    public boolean hasPriorityElement() { 
3312      return this.priority != null && !this.priority.isEmpty();
3313    }
3314
3315    public boolean hasPriority() { 
3316      return this.priority != null && !this.priority.isEmpty();
3317    }
3318
3319    /**
3320     * @param value {@link #priority} (Indicates how quickly the request should be addressed with respect to other requests.). This is the underlying object with id, value and extensions. The accessor "getPriority" gives direct access to the value
3321     */
3322    public RequestGroup setPriorityElement(Enumeration<RequestPriority> value) { 
3323      this.priority = value;
3324      return this;
3325    }
3326
3327    /**
3328     * @return Indicates how quickly the request should be addressed with respect to other requests.
3329     */
3330    public RequestPriority getPriority() { 
3331      return this.priority == null ? null : this.priority.getValue();
3332    }
3333
3334    /**
3335     * @param value Indicates how quickly the request should be addressed with respect to other requests.
3336     */
3337    public RequestGroup setPriority(RequestPriority value) { 
3338      if (value == null)
3339        this.priority = null;
3340      else {
3341        if (this.priority == null)
3342          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
3343        this.priority.setValue(value);
3344      }
3345      return this;
3346    }
3347
3348    /**
3349     * @return {@link #code} (A code that identifies what the overall request group is.)
3350     */
3351    public CodeableConcept getCode() { 
3352      if (this.code == null)
3353        if (Configuration.errorOnAutoCreate())
3354          throw new Error("Attempt to auto-create RequestGroup.code");
3355        else if (Configuration.doAutoCreate())
3356          this.code = new CodeableConcept(); // cc
3357      return this.code;
3358    }
3359
3360    public boolean hasCode() { 
3361      return this.code != null && !this.code.isEmpty();
3362    }
3363
3364    /**
3365     * @param value {@link #code} (A code that identifies what the overall request group is.)
3366     */
3367    public RequestGroup setCode(CodeableConcept value) { 
3368      this.code = value;
3369      return this;
3370    }
3371
3372    /**
3373     * @return {@link #subject} (The subject for which the request group was created.)
3374     */
3375    public Reference getSubject() { 
3376      if (this.subject == null)
3377        if (Configuration.errorOnAutoCreate())
3378          throw new Error("Attempt to auto-create RequestGroup.subject");
3379        else if (Configuration.doAutoCreate())
3380          this.subject = new Reference(); // cc
3381      return this.subject;
3382    }
3383
3384    public boolean hasSubject() { 
3385      return this.subject != null && !this.subject.isEmpty();
3386    }
3387
3388    /**
3389     * @param value {@link #subject} (The subject for which the request group was created.)
3390     */
3391    public RequestGroup setSubject(Reference value) { 
3392      this.subject = value;
3393      return this;
3394    }
3395
3396    /**
3397     * @return {@link #encounter} (Describes the context of the request group, if any.)
3398     */
3399    public Reference getEncounter() { 
3400      if (this.encounter == null)
3401        if (Configuration.errorOnAutoCreate())
3402          throw new Error("Attempt to auto-create RequestGroup.encounter");
3403        else if (Configuration.doAutoCreate())
3404          this.encounter = new Reference(); // cc
3405      return this.encounter;
3406    }
3407
3408    public boolean hasEncounter() { 
3409      return this.encounter != null && !this.encounter.isEmpty();
3410    }
3411
3412    /**
3413     * @param value {@link #encounter} (Describes the context of the request group, if any.)
3414     */
3415    public RequestGroup setEncounter(Reference value) { 
3416      this.encounter = value;
3417      return this;
3418    }
3419
3420    /**
3421     * @return {@link #authoredOn} (Indicates when the request group was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
3422     */
3423    public DateTimeType getAuthoredOnElement() { 
3424      if (this.authoredOn == null)
3425        if (Configuration.errorOnAutoCreate())
3426          throw new Error("Attempt to auto-create RequestGroup.authoredOn");
3427        else if (Configuration.doAutoCreate())
3428          this.authoredOn = new DateTimeType(); // bb
3429      return this.authoredOn;
3430    }
3431
3432    public boolean hasAuthoredOnElement() { 
3433      return this.authoredOn != null && !this.authoredOn.isEmpty();
3434    }
3435
3436    public boolean hasAuthoredOn() { 
3437      return this.authoredOn != null && !this.authoredOn.isEmpty();
3438    }
3439
3440    /**
3441     * @param value {@link #authoredOn} (Indicates when the request group was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
3442     */
3443    public RequestGroup setAuthoredOnElement(DateTimeType value) { 
3444      this.authoredOn = value;
3445      return this;
3446    }
3447
3448    /**
3449     * @return Indicates when the request group was created.
3450     */
3451    public Date getAuthoredOn() { 
3452      return this.authoredOn == null ? null : this.authoredOn.getValue();
3453    }
3454
3455    /**
3456     * @param value Indicates when the request group was created.
3457     */
3458    public RequestGroup setAuthoredOn(Date value) { 
3459      if (value == null)
3460        this.authoredOn = null;
3461      else {
3462        if (this.authoredOn == null)
3463          this.authoredOn = new DateTimeType();
3464        this.authoredOn.setValue(value);
3465      }
3466      return this;
3467    }
3468
3469    /**
3470     * @return {@link #author} (Provides a reference to the author of the request group.)
3471     */
3472    public Reference getAuthor() { 
3473      if (this.author == null)
3474        if (Configuration.errorOnAutoCreate())
3475          throw new Error("Attempt to auto-create RequestGroup.author");
3476        else if (Configuration.doAutoCreate())
3477          this.author = new Reference(); // cc
3478      return this.author;
3479    }
3480
3481    public boolean hasAuthor() { 
3482      return this.author != null && !this.author.isEmpty();
3483    }
3484
3485    /**
3486     * @param value {@link #author} (Provides a reference to the author of the request group.)
3487     */
3488    public RequestGroup setAuthor(Reference value) { 
3489      this.author = value;
3490      return this;
3491    }
3492
3493    /**
3494     * @return {@link #reason} (Describes the reason for the request group in coded or textual form.)
3495     */
3496    public List<CodeableReference> getReason() { 
3497      if (this.reason == null)
3498        this.reason = new ArrayList<CodeableReference>();
3499      return this.reason;
3500    }
3501
3502    /**
3503     * @return Returns a reference to <code>this</code> for easy method chaining
3504     */
3505    public RequestGroup setReason(List<CodeableReference> theReason) { 
3506      this.reason = theReason;
3507      return this;
3508    }
3509
3510    public boolean hasReason() { 
3511      if (this.reason == null)
3512        return false;
3513      for (CodeableReference item : this.reason)
3514        if (!item.isEmpty())
3515          return true;
3516      return false;
3517    }
3518
3519    public CodeableReference addReason() { //3
3520      CodeableReference t = new CodeableReference();
3521      if (this.reason == null)
3522        this.reason = new ArrayList<CodeableReference>();
3523      this.reason.add(t);
3524      return t;
3525    }
3526
3527    public RequestGroup addReason(CodeableReference t) { //3
3528      if (t == null)
3529        return this;
3530      if (this.reason == null)
3531        this.reason = new ArrayList<CodeableReference>();
3532      this.reason.add(t);
3533      return this;
3534    }
3535
3536    /**
3537     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist {3}
3538     */
3539    public CodeableReference getReasonFirstRep() { 
3540      if (getReason().isEmpty()) {
3541        addReason();
3542      }
3543      return getReason().get(0);
3544    }
3545
3546    /**
3547     * @return {@link #goal} (Goals that are intended to be achieved by following the requests in this RequestGroup.)
3548     */
3549    public List<Reference> getGoal() { 
3550      if (this.goal == null)
3551        this.goal = new ArrayList<Reference>();
3552      return this.goal;
3553    }
3554
3555    /**
3556     * @return Returns a reference to <code>this</code> for easy method chaining
3557     */
3558    public RequestGroup setGoal(List<Reference> theGoal) { 
3559      this.goal = theGoal;
3560      return this;
3561    }
3562
3563    public boolean hasGoal() { 
3564      if (this.goal == null)
3565        return false;
3566      for (Reference item : this.goal)
3567        if (!item.isEmpty())
3568          return true;
3569      return false;
3570    }
3571
3572    public Reference addGoal() { //3
3573      Reference t = new Reference();
3574      if (this.goal == null)
3575        this.goal = new ArrayList<Reference>();
3576      this.goal.add(t);
3577      return t;
3578    }
3579
3580    public RequestGroup addGoal(Reference t) { //3
3581      if (t == null)
3582        return this;
3583      if (this.goal == null)
3584        this.goal = new ArrayList<Reference>();
3585      this.goal.add(t);
3586      return this;
3587    }
3588
3589    /**
3590     * @return The first repetition of repeating field {@link #goal}, creating it if it does not already exist {3}
3591     */
3592    public Reference getGoalFirstRep() { 
3593      if (getGoal().isEmpty()) {
3594        addGoal();
3595      }
3596      return getGoal().get(0);
3597    }
3598
3599    /**
3600     * @return {@link #note} (Provides a mechanism to communicate additional information about the response.)
3601     */
3602    public List<Annotation> getNote() { 
3603      if (this.note == null)
3604        this.note = new ArrayList<Annotation>();
3605      return this.note;
3606    }
3607
3608    /**
3609     * @return Returns a reference to <code>this</code> for easy method chaining
3610     */
3611    public RequestGroup setNote(List<Annotation> theNote) { 
3612      this.note = theNote;
3613      return this;
3614    }
3615
3616    public boolean hasNote() { 
3617      if (this.note == null)
3618        return false;
3619      for (Annotation item : this.note)
3620        if (!item.isEmpty())
3621          return true;
3622      return false;
3623    }
3624
3625    public Annotation addNote() { //3
3626      Annotation t = new Annotation();
3627      if (this.note == null)
3628        this.note = new ArrayList<Annotation>();
3629      this.note.add(t);
3630      return t;
3631    }
3632
3633    public RequestGroup addNote(Annotation t) { //3
3634      if (t == null)
3635        return this;
3636      if (this.note == null)
3637        this.note = new ArrayList<Annotation>();
3638      this.note.add(t);
3639      return this;
3640    }
3641
3642    /**
3643     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
3644     */
3645    public Annotation getNoteFirstRep() { 
3646      if (getNote().isEmpty()) {
3647        addNote();
3648      }
3649      return getNote().get(0);
3650    }
3651
3652    /**
3653     * @return {@link #action} (The actions, if any, produced by the evaluation of the artifact.)
3654     */
3655    public List<RequestGroupActionComponent> getAction() { 
3656      if (this.action == null)
3657        this.action = new ArrayList<RequestGroupActionComponent>();
3658      return this.action;
3659    }
3660
3661    /**
3662     * @return Returns a reference to <code>this</code> for easy method chaining
3663     */
3664    public RequestGroup setAction(List<RequestGroupActionComponent> theAction) { 
3665      this.action = theAction;
3666      return this;
3667    }
3668
3669    public boolean hasAction() { 
3670      if (this.action == null)
3671        return false;
3672      for (RequestGroupActionComponent item : this.action)
3673        if (!item.isEmpty())
3674          return true;
3675      return false;
3676    }
3677
3678    public RequestGroupActionComponent addAction() { //3
3679      RequestGroupActionComponent t = new RequestGroupActionComponent();
3680      if (this.action == null)
3681        this.action = new ArrayList<RequestGroupActionComponent>();
3682      this.action.add(t);
3683      return t;
3684    }
3685
3686    public RequestGroup addAction(RequestGroupActionComponent t) { //3
3687      if (t == null)
3688        return this;
3689      if (this.action == null)
3690        this.action = new ArrayList<RequestGroupActionComponent>();
3691      this.action.add(t);
3692      return this;
3693    }
3694
3695    /**
3696     * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist {3}
3697     */
3698    public RequestGroupActionComponent getActionFirstRep() { 
3699      if (getAction().isEmpty()) {
3700        addAction();
3701      }
3702      return getAction().get(0);
3703    }
3704
3705      protected void listChildren(List<Property> children) {
3706        super.listChildren(children);
3707        children.add(new Property("identifier", "Identifier", "Allows a service to provide a unique, business identifier for the request.", 0, java.lang.Integer.MAX_VALUE, identifier));
3708        children.add(new Property("instantiatesCanonical", "canonical", "A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical));
3709        children.add(new Property("instantiatesUri", "uri", "A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri));
3710        children.add(new Property("basedOn", "Reference(Any)", "A plan, proposal or order that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn));
3711        children.add(new Property("replaces", "Reference(Any)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces));
3712        children.add(new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier));
3713        children.add(new Property("status", "code", "The current state of the request. For request groups, the status reflects the status of all the requests in the group.", 0, 1, status));
3714        children.add(new Property("intent", "code", "Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.", 0, 1, intent));
3715        children.add(new Property("priority", "code", "Indicates how quickly the request should be addressed with respect to other requests.", 0, 1, priority));
3716        children.add(new Property("code", "CodeableConcept", "A code that identifies what the overall request group is.", 0, 1, code));
3717        children.add(new Property("subject", "Reference(Patient|Group)", "The subject for which the request group was created.", 0, 1, subject));
3718        children.add(new Property("encounter", "Reference(Encounter)", "Describes the context of the request group, if any.", 0, 1, encounter));
3719        children.add(new Property("authoredOn", "dateTime", "Indicates when the request group was created.", 0, 1, authoredOn));
3720        children.add(new Property("author", "Reference(Device|Practitioner|PractitionerRole)", "Provides a reference to the author of the request group.", 0, 1, author));
3721        children.add(new Property("reason", "CodeableReference(Condition|Observation|DiagnosticReport|DocumentReference)", "Describes the reason for the request group in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason));
3722        children.add(new Property("goal", "Reference(Goal)", "Goals that are intended to be achieved by following the requests in this RequestGroup.", 0, java.lang.Integer.MAX_VALUE, goal));
3723        children.add(new Property("note", "Annotation", "Provides a mechanism to communicate additional information about the response.", 0, java.lang.Integer.MAX_VALUE, note));
3724        children.add(new Property("action", "", "The actions, if any, produced by the evaluation of the artifact.", 0, java.lang.Integer.MAX_VALUE, action));
3725      }
3726
3727      @Override
3728      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3729        switch (_hash) {
3730        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Allows a service to provide a unique, business identifier for the request.", 0, java.lang.Integer.MAX_VALUE, identifier);
3731        case 8911915: /*instantiatesCanonical*/  return new Property("instantiatesCanonical", "canonical", "A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical);
3732        case -1926393373: /*instantiatesUri*/  return new Property("instantiatesUri", "uri", "A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri);
3733        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "A plan, proposal or order that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn);
3734        case -430332865: /*replaces*/  return new Property("replaces", "Reference(Any)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces);
3735        case -445338488: /*groupIdentifier*/  return new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier);
3736        case -892481550: /*status*/  return new Property("status", "code", "The current state of the request. For request groups, the status reflects the status of all the requests in the group.", 0, 1, status);
3737        case -1183762788: /*intent*/  return new Property("intent", "code", "Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.", 0, 1, intent);
3738        case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the request should be addressed with respect to other requests.", 0, 1, priority);
3739        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code that identifies what the overall request group is.", 0, 1, code);
3740        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The subject for which the request group was created.", 0, 1, subject);
3741        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "Describes the context of the request group, if any.", 0, 1, encounter);
3742        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "Indicates when the request group was created.", 0, 1, authoredOn);
3743        case -1406328437: /*author*/  return new Property("author", "Reference(Device|Practitioner|PractitionerRole)", "Provides a reference to the author of the request group.", 0, 1, author);
3744        case -934964668: /*reason*/  return new Property("reason", "CodeableReference(Condition|Observation|DiagnosticReport|DocumentReference)", "Describes the reason for the request group in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason);
3745        case 3178259: /*goal*/  return new Property("goal", "Reference(Goal)", "Goals that are intended to be achieved by following the requests in this RequestGroup.", 0, java.lang.Integer.MAX_VALUE, goal);
3746        case 3387378: /*note*/  return new Property("note", "Annotation", "Provides a mechanism to communicate additional information about the response.", 0, java.lang.Integer.MAX_VALUE, note);
3747        case -1422950858: /*action*/  return new Property("action", "", "The actions, if any, produced by the evaluation of the artifact.", 0, java.lang.Integer.MAX_VALUE, action);
3748        default: return super.getNamedProperty(_hash, _name, _checkValid);
3749        }
3750
3751      }
3752
3753      @Override
3754      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3755        switch (hash) {
3756        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3757        case 8911915: /*instantiatesCanonical*/ return this.instantiatesCanonical == null ? new Base[0] : this.instantiatesCanonical.toArray(new Base[this.instantiatesCanonical.size()]); // CanonicalType
3758        case -1926393373: /*instantiatesUri*/ return this.instantiatesUri == null ? new Base[0] : this.instantiatesUri.toArray(new Base[this.instantiatesUri.size()]); // UriType
3759        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
3760        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // Reference
3761        case -445338488: /*groupIdentifier*/ return this.groupIdentifier == null ? new Base[0] : new Base[] {this.groupIdentifier}; // Identifier
3762        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<RequestStatus>
3763        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // Enumeration<RequestIntent>
3764        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
3765        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3766        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
3767        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
3768        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
3769        case -1406328437: /*author*/ return this.author == null ? new Base[0] : new Base[] {this.author}; // Reference
3770        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableReference
3771        case 3178259: /*goal*/ return this.goal == null ? new Base[0] : this.goal.toArray(new Base[this.goal.size()]); // Reference
3772        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
3773        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // RequestGroupActionComponent
3774        default: return super.getProperty(hash, name, checkValid);
3775        }
3776
3777      }
3778
3779      @Override
3780      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3781        switch (hash) {
3782        case -1618432855: // identifier
3783          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3784          return value;
3785        case 8911915: // instantiatesCanonical
3786          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value)); // CanonicalType
3787          return value;
3788        case -1926393373: // instantiatesUri
3789          this.getInstantiatesUri().add(TypeConvertor.castToUri(value)); // UriType
3790          return value;
3791        case -332612366: // basedOn
3792          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
3793          return value;
3794        case -430332865: // replaces
3795          this.getReplaces().add(TypeConvertor.castToReference(value)); // Reference
3796          return value;
3797        case -445338488: // groupIdentifier
3798          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
3799          return value;
3800        case -892481550: // status
3801          value = new RequestStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3802          this.status = (Enumeration) value; // Enumeration<RequestStatus>
3803          return value;
3804        case -1183762788: // intent
3805          value = new RequestIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
3806          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
3807          return value;
3808        case -1165461084: // priority
3809          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
3810          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
3811          return value;
3812        case 3059181: // code
3813          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3814          return value;
3815        case -1867885268: // subject
3816          this.subject = TypeConvertor.castToReference(value); // Reference
3817          return value;
3818        case 1524132147: // encounter
3819          this.encounter = TypeConvertor.castToReference(value); // Reference
3820          return value;
3821        case -1500852503: // authoredOn
3822          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
3823          return value;
3824        case -1406328437: // author
3825          this.author = TypeConvertor.castToReference(value); // Reference
3826          return value;
3827        case -934964668: // reason
3828          this.getReason().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
3829          return value;
3830        case 3178259: // goal
3831          this.getGoal().add(TypeConvertor.castToReference(value)); // Reference
3832          return value;
3833        case 3387378: // note
3834          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
3835          return value;
3836        case -1422950858: // action
3837          this.getAction().add((RequestGroupActionComponent) value); // RequestGroupActionComponent
3838          return value;
3839        default: return super.setProperty(hash, name, value);
3840        }
3841
3842      }
3843
3844      @Override
3845      public Base setProperty(String name, Base value) throws FHIRException {
3846        if (name.equals("identifier")) {
3847          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3848        } else if (name.equals("instantiatesCanonical")) {
3849          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value));
3850        } else if (name.equals("instantiatesUri")) {
3851          this.getInstantiatesUri().add(TypeConvertor.castToUri(value));
3852        } else if (name.equals("basedOn")) {
3853          this.getBasedOn().add(TypeConvertor.castToReference(value));
3854        } else if (name.equals("replaces")) {
3855          this.getReplaces().add(TypeConvertor.castToReference(value));
3856        } else if (name.equals("groupIdentifier")) {
3857          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
3858        } else if (name.equals("status")) {
3859          value = new RequestStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3860          this.status = (Enumeration) value; // Enumeration<RequestStatus>
3861        } else if (name.equals("intent")) {
3862          value = new RequestIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
3863          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
3864        } else if (name.equals("priority")) {
3865          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
3866          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
3867        } else if (name.equals("code")) {
3868          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3869        } else if (name.equals("subject")) {
3870          this.subject = TypeConvertor.castToReference(value); // Reference
3871        } else if (name.equals("encounter")) {
3872          this.encounter = TypeConvertor.castToReference(value); // Reference
3873        } else if (name.equals("authoredOn")) {
3874          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
3875        } else if (name.equals("author")) {
3876          this.author = TypeConvertor.castToReference(value); // Reference
3877        } else if (name.equals("reason")) {
3878          this.getReason().add(TypeConvertor.castToCodeableReference(value));
3879        } else if (name.equals("goal")) {
3880          this.getGoal().add(TypeConvertor.castToReference(value));
3881        } else if (name.equals("note")) {
3882          this.getNote().add(TypeConvertor.castToAnnotation(value));
3883        } else if (name.equals("action")) {
3884          this.getAction().add((RequestGroupActionComponent) value);
3885        } else
3886          return super.setProperty(name, value);
3887        return value;
3888      }
3889
3890      @Override
3891      public Base makeProperty(int hash, String name) throws FHIRException {
3892        switch (hash) {
3893        case -1618432855:  return addIdentifier(); 
3894        case 8911915:  return addInstantiatesCanonicalElement();
3895        case -1926393373:  return addInstantiatesUriElement();
3896        case -332612366:  return addBasedOn(); 
3897        case -430332865:  return addReplaces(); 
3898        case -445338488:  return getGroupIdentifier();
3899        case -892481550:  return getStatusElement();
3900        case -1183762788:  return getIntentElement();
3901        case -1165461084:  return getPriorityElement();
3902        case 3059181:  return getCode();
3903        case -1867885268:  return getSubject();
3904        case 1524132147:  return getEncounter();
3905        case -1500852503:  return getAuthoredOnElement();
3906        case -1406328437:  return getAuthor();
3907        case -934964668:  return addReason(); 
3908        case 3178259:  return addGoal(); 
3909        case 3387378:  return addNote(); 
3910        case -1422950858:  return addAction(); 
3911        default: return super.makeProperty(hash, name);
3912        }
3913
3914      }
3915
3916      @Override
3917      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3918        switch (hash) {
3919        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3920        case 8911915: /*instantiatesCanonical*/ return new String[] {"canonical"};
3921        case -1926393373: /*instantiatesUri*/ return new String[] {"uri"};
3922        case -332612366: /*basedOn*/ return new String[] {"Reference"};
3923        case -430332865: /*replaces*/ return new String[] {"Reference"};
3924        case -445338488: /*groupIdentifier*/ return new String[] {"Identifier"};
3925        case -892481550: /*status*/ return new String[] {"code"};
3926        case -1183762788: /*intent*/ return new String[] {"code"};
3927        case -1165461084: /*priority*/ return new String[] {"code"};
3928        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
3929        case -1867885268: /*subject*/ return new String[] {"Reference"};
3930        case 1524132147: /*encounter*/ return new String[] {"Reference"};
3931        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
3932        case -1406328437: /*author*/ return new String[] {"Reference"};
3933        case -934964668: /*reason*/ return new String[] {"CodeableReference"};
3934        case 3178259: /*goal*/ return new String[] {"Reference"};
3935        case 3387378: /*note*/ return new String[] {"Annotation"};
3936        case -1422950858: /*action*/ return new String[] {};
3937        default: return super.getTypesForProperty(hash, name);
3938        }
3939
3940      }
3941
3942      @Override
3943      public Base addChild(String name) throws FHIRException {
3944        if (name.equals("identifier")) {
3945          return addIdentifier();
3946        }
3947        else if (name.equals("instantiatesCanonical")) {
3948          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.instantiatesCanonical");
3949        }
3950        else if (name.equals("instantiatesUri")) {
3951          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.instantiatesUri");
3952        }
3953        else if (name.equals("basedOn")) {
3954          return addBasedOn();
3955        }
3956        else if (name.equals("replaces")) {
3957          return addReplaces();
3958        }
3959        else if (name.equals("groupIdentifier")) {
3960          this.groupIdentifier = new Identifier();
3961          return this.groupIdentifier;
3962        }
3963        else if (name.equals("status")) {
3964          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.status");
3965        }
3966        else if (name.equals("intent")) {
3967          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.intent");
3968        }
3969        else if (name.equals("priority")) {
3970          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.priority");
3971        }
3972        else if (name.equals("code")) {
3973          this.code = new CodeableConcept();
3974          return this.code;
3975        }
3976        else if (name.equals("subject")) {
3977          this.subject = new Reference();
3978          return this.subject;
3979        }
3980        else if (name.equals("encounter")) {
3981          this.encounter = new Reference();
3982          return this.encounter;
3983        }
3984        else if (name.equals("authoredOn")) {
3985          throw new FHIRException("Cannot call addChild on a primitive type RequestGroup.authoredOn");
3986        }
3987        else if (name.equals("author")) {
3988          this.author = new Reference();
3989          return this.author;
3990        }
3991        else if (name.equals("reason")) {
3992          return addReason();
3993        }
3994        else if (name.equals("goal")) {
3995          return addGoal();
3996        }
3997        else if (name.equals("note")) {
3998          return addNote();
3999        }
4000        else if (name.equals("action")) {
4001          return addAction();
4002        }
4003        else
4004          return super.addChild(name);
4005      }
4006
4007  public String fhirType() {
4008    return "RequestGroup";
4009
4010  }
4011
4012      public RequestGroup copy() {
4013        RequestGroup dst = new RequestGroup();
4014        copyValues(dst);
4015        return dst;
4016      }
4017
4018      public void copyValues(RequestGroup dst) {
4019        super.copyValues(dst);
4020        if (identifier != null) {
4021          dst.identifier = new ArrayList<Identifier>();
4022          for (Identifier i : identifier)
4023            dst.identifier.add(i.copy());
4024        };
4025        if (instantiatesCanonical != null) {
4026          dst.instantiatesCanonical = new ArrayList<CanonicalType>();
4027          for (CanonicalType i : instantiatesCanonical)
4028            dst.instantiatesCanonical.add(i.copy());
4029        };
4030        if (instantiatesUri != null) {
4031          dst.instantiatesUri = new ArrayList<UriType>();
4032          for (UriType i : instantiatesUri)
4033            dst.instantiatesUri.add(i.copy());
4034        };
4035        if (basedOn != null) {
4036          dst.basedOn = new ArrayList<Reference>();
4037          for (Reference i : basedOn)
4038            dst.basedOn.add(i.copy());
4039        };
4040        if (replaces != null) {
4041          dst.replaces = new ArrayList<Reference>();
4042          for (Reference i : replaces)
4043            dst.replaces.add(i.copy());
4044        };
4045        dst.groupIdentifier = groupIdentifier == null ? null : groupIdentifier.copy();
4046        dst.status = status == null ? null : status.copy();
4047        dst.intent = intent == null ? null : intent.copy();
4048        dst.priority = priority == null ? null : priority.copy();
4049        dst.code = code == null ? null : code.copy();
4050        dst.subject = subject == null ? null : subject.copy();
4051        dst.encounter = encounter == null ? null : encounter.copy();
4052        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
4053        dst.author = author == null ? null : author.copy();
4054        if (reason != null) {
4055          dst.reason = new ArrayList<CodeableReference>();
4056          for (CodeableReference i : reason)
4057            dst.reason.add(i.copy());
4058        };
4059        if (goal != null) {
4060          dst.goal = new ArrayList<Reference>();
4061          for (Reference i : goal)
4062            dst.goal.add(i.copy());
4063        };
4064        if (note != null) {
4065          dst.note = new ArrayList<Annotation>();
4066          for (Annotation i : note)
4067            dst.note.add(i.copy());
4068        };
4069        if (action != null) {
4070          dst.action = new ArrayList<RequestGroupActionComponent>();
4071          for (RequestGroupActionComponent i : action)
4072            dst.action.add(i.copy());
4073        };
4074      }
4075
4076      protected RequestGroup typedCopy() {
4077        return copy();
4078      }
4079
4080      @Override
4081      public boolean equalsDeep(Base other_) {
4082        if (!super.equalsDeep(other_))
4083          return false;
4084        if (!(other_ instanceof RequestGroup))
4085          return false;
4086        RequestGroup o = (RequestGroup) other_;
4087        return compareDeep(identifier, o.identifier, true) && compareDeep(instantiatesCanonical, o.instantiatesCanonical, true)
4088           && compareDeep(instantiatesUri, o.instantiatesUri, true) && compareDeep(basedOn, o.basedOn, true)
4089           && compareDeep(replaces, o.replaces, true) && compareDeep(groupIdentifier, o.groupIdentifier, true)
4090           && compareDeep(status, o.status, true) && compareDeep(intent, o.intent, true) && compareDeep(priority, o.priority, true)
4091           && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true) && compareDeep(encounter, o.encounter, true)
4092           && compareDeep(authoredOn, o.authoredOn, true) && compareDeep(author, o.author, true) && compareDeep(reason, o.reason, true)
4093           && compareDeep(goal, o.goal, true) && compareDeep(note, o.note, true) && compareDeep(action, o.action, true)
4094          ;
4095      }
4096
4097      @Override
4098      public boolean equalsShallow(Base other_) {
4099        if (!super.equalsShallow(other_))
4100          return false;
4101        if (!(other_ instanceof RequestGroup))
4102          return false;
4103        RequestGroup o = (RequestGroup) other_;
4104        return compareValues(instantiatesCanonical, o.instantiatesCanonical, true) && compareValues(instantiatesUri, o.instantiatesUri, true)
4105           && compareValues(status, o.status, true) && compareValues(intent, o.intent, true) && compareValues(priority, o.priority, true)
4106           && compareValues(authoredOn, o.authoredOn, true);
4107      }
4108
4109      public boolean isEmpty() {
4110        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, instantiatesCanonical
4111          , instantiatesUri, basedOn, replaces, groupIdentifier, status, intent, priority
4112          , code, subject, encounter, authoredOn, author, reason, goal, note, action
4113          );
4114      }
4115
4116  @Override
4117  public ResourceType getResourceType() {
4118    return ResourceType.RequestGroup;
4119   }
4120
4121 /**
4122   * Search parameter: <b>author</b>
4123   * <p>
4124   * Description: <b>The author of the request group</b><br>
4125   * Type: <b>reference</b><br>
4126   * Path: <b>RequestGroup.author</b><br>
4127   * </p>
4128   */
4129  @SearchParamDefinition(name="author", path="RequestGroup.author", description="The author of the request group", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Device.class, Practitioner.class, PractitionerRole.class } )
4130  public static final String SP_AUTHOR = "author";
4131 /**
4132   * <b>Fluent Client</b> search parameter constant for <b>author</b>
4133   * <p>
4134   * Description: <b>The author of the request group</b><br>
4135   * Type: <b>reference</b><br>
4136   * Path: <b>RequestGroup.author</b><br>
4137   * </p>
4138   */
4139  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AUTHOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AUTHOR);
4140
4141/**
4142   * Constant for fluent queries to be used to add include statements. Specifies
4143   * the path value of "<b>RequestGroup:author</b>".
4144   */
4145  public static final ca.uhn.fhir.model.api.Include INCLUDE_AUTHOR = new ca.uhn.fhir.model.api.Include("RequestGroup:author").toLocked();
4146
4147 /**
4148   * Search parameter: <b>authored</b>
4149   * <p>
4150   * Description: <b>The date the request group was authored</b><br>
4151   * Type: <b>date</b><br>
4152   * Path: <b>RequestGroup.authoredOn</b><br>
4153   * </p>
4154   */
4155  @SearchParamDefinition(name="authored", path="RequestGroup.authoredOn", description="The date the request group was authored", type="date" )
4156  public static final String SP_AUTHORED = "authored";
4157 /**
4158   * <b>Fluent Client</b> search parameter constant for <b>authored</b>
4159   * <p>
4160   * Description: <b>The date the request group was authored</b><br>
4161   * Type: <b>date</b><br>
4162   * Path: <b>RequestGroup.authoredOn</b><br>
4163   * </p>
4164   */
4165  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED);
4166
4167 /**
4168   * Search parameter: <b>code</b>
4169   * <p>
4170   * Description: <b>The code of the request group</b><br>
4171   * Type: <b>token</b><br>
4172   * Path: <b>RequestGroup.code</b><br>
4173   * </p>
4174   */
4175  @SearchParamDefinition(name="code", path="RequestGroup.code", description="The code of the request group", type="token" )
4176  public static final String SP_CODE = "code";
4177 /**
4178   * <b>Fluent Client</b> search parameter constant for <b>code</b>
4179   * <p>
4180   * Description: <b>The code of the request group</b><br>
4181   * Type: <b>token</b><br>
4182   * Path: <b>RequestGroup.code</b><br>
4183   * </p>
4184   */
4185  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
4186
4187 /**
4188   * Search parameter: <b>encounter</b>
4189   * <p>
4190   * Description: <b>The encounter the request group applies to</b><br>
4191   * Type: <b>reference</b><br>
4192   * Path: <b>RequestGroup.encounter</b><br>
4193   * </p>
4194   */
4195  @SearchParamDefinition(name="encounter", path="RequestGroup.encounter", description="The encounter the request group applies to", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Encounter") }, target={Encounter.class } )
4196  public static final String SP_ENCOUNTER = "encounter";
4197 /**
4198   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
4199   * <p>
4200   * Description: <b>The encounter the request group applies to</b><br>
4201   * Type: <b>reference</b><br>
4202   * Path: <b>RequestGroup.encounter</b><br>
4203   * </p>
4204   */
4205  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
4206
4207/**
4208   * Constant for fluent queries to be used to add include statements. Specifies
4209   * the path value of "<b>RequestGroup:encounter</b>".
4210   */
4211  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("RequestGroup:encounter").toLocked();
4212
4213 /**
4214   * Search parameter: <b>group-identifier</b>
4215   * <p>
4216   * Description: <b>The group identifier for the request group</b><br>
4217   * Type: <b>token</b><br>
4218   * Path: <b>RequestGroup.groupIdentifier</b><br>
4219   * </p>
4220   */
4221  @SearchParamDefinition(name="group-identifier", path="RequestGroup.groupIdentifier", description="The group identifier for the request group", type="token" )
4222  public static final String SP_GROUP_IDENTIFIER = "group-identifier";
4223 /**
4224   * <b>Fluent Client</b> search parameter constant for <b>group-identifier</b>
4225   * <p>
4226   * Description: <b>The group identifier for the request group</b><br>
4227   * Type: <b>token</b><br>
4228   * Path: <b>RequestGroup.groupIdentifier</b><br>
4229   * </p>
4230   */
4231  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GROUP_IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GROUP_IDENTIFIER);
4232
4233 /**
4234   * Search parameter: <b>identifier</b>
4235   * <p>
4236   * Description: <b>External identifiers for the request group</b><br>
4237   * Type: <b>token</b><br>
4238   * Path: <b>RequestGroup.identifier</b><br>
4239   * </p>
4240   */
4241  @SearchParamDefinition(name="identifier", path="RequestGroup.identifier", description="External identifiers for the request group", type="token" )
4242  public static final String SP_IDENTIFIER = "identifier";
4243 /**
4244   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4245   * <p>
4246   * Description: <b>External identifiers for the request group</b><br>
4247   * Type: <b>token</b><br>
4248   * Path: <b>RequestGroup.identifier</b><br>
4249   * </p>
4250   */
4251  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4252
4253 /**
4254   * Search parameter: <b>instantiates-canonical</b>
4255   * <p>
4256   * Description: <b>The FHIR-based definition from which the request group is realized</b><br>
4257   * Type: <b>reference</b><br>
4258   * Path: <b>RequestGroup.instantiatesCanonical</b><br>
4259   * </p>
4260   */
4261  @SearchParamDefinition(name="instantiates-canonical", path="RequestGroup.instantiatesCanonical", description="The FHIR-based definition from which the request group is realized", type="reference" )
4262  public static final String SP_INSTANTIATES_CANONICAL = "instantiates-canonical";
4263 /**
4264   * <b>Fluent Client</b> search parameter constant for <b>instantiates-canonical</b>
4265   * <p>
4266   * Description: <b>The FHIR-based definition from which the request group is realized</b><br>
4267   * Type: <b>reference</b><br>
4268   * Path: <b>RequestGroup.instantiatesCanonical</b><br>
4269   * </p>
4270   */
4271  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSTANTIATES_CANONICAL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSTANTIATES_CANONICAL);
4272
4273/**
4274   * Constant for fluent queries to be used to add include statements. Specifies
4275   * the path value of "<b>RequestGroup:instantiates-canonical</b>".
4276   */
4277  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSTANTIATES_CANONICAL = new ca.uhn.fhir.model.api.Include("RequestGroup:instantiates-canonical").toLocked();
4278
4279 /**
4280   * Search parameter: <b>instantiates-uri</b>
4281   * <p>
4282   * Description: <b>The external definition from which the request group is realized</b><br>
4283   * Type: <b>uri</b><br>
4284   * Path: <b>RequestGroup.instantiatesUri</b><br>
4285   * </p>
4286   */
4287  @SearchParamDefinition(name="instantiates-uri", path="RequestGroup.instantiatesUri", description="The external definition from which the request group is realized", type="uri" )
4288  public static final String SP_INSTANTIATES_URI = "instantiates-uri";
4289 /**
4290   * <b>Fluent Client</b> search parameter constant for <b>instantiates-uri</b>
4291   * <p>
4292   * Description: <b>The external definition from which the request group is realized</b><br>
4293   * Type: <b>uri</b><br>
4294   * Path: <b>RequestGroup.instantiatesUri</b><br>
4295   * </p>
4296   */
4297  public static final ca.uhn.fhir.rest.gclient.UriClientParam INSTANTIATES_URI = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_INSTANTIATES_URI);
4298
4299 /**
4300   * Search parameter: <b>intent</b>
4301   * <p>
4302   * Description: <b>The intent of the request group</b><br>
4303   * Type: <b>token</b><br>
4304   * Path: <b>RequestGroup.intent</b><br>
4305   * </p>
4306   */
4307  @SearchParamDefinition(name="intent", path="RequestGroup.intent", description="The intent of the request group", type="token" )
4308  public static final String SP_INTENT = "intent";
4309 /**
4310   * <b>Fluent Client</b> search parameter constant for <b>intent</b>
4311   * <p>
4312   * Description: <b>The intent of the request group</b><br>
4313   * Type: <b>token</b><br>
4314   * Path: <b>RequestGroup.intent</b><br>
4315   * </p>
4316   */
4317  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INTENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INTENT);
4318
4319 /**
4320   * Search parameter: <b>participant</b>
4321   * <p>
4322   * Description: <b>The participant in the requests in the group</b><br>
4323   * Type: <b>reference</b><br>
4324   * Path: <b>RequestGroup.action.participant.actor</b><br>
4325   * </p>
4326   */
4327  @SearchParamDefinition(name="participant", path="RequestGroup.action.participant.actor", description="The participant in the requests in the group", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={CareTeam.class, Device.class, Group.class, HealthcareService.class, Location.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
4328  public static final String SP_PARTICIPANT = "participant";
4329 /**
4330   * <b>Fluent Client</b> search parameter constant for <b>participant</b>
4331   * <p>
4332   * Description: <b>The participant in the requests in the group</b><br>
4333   * Type: <b>reference</b><br>
4334   * Path: <b>RequestGroup.action.participant.actor</b><br>
4335   * </p>
4336   */
4337  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTICIPANT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTICIPANT);
4338
4339/**
4340   * Constant for fluent queries to be used to add include statements. Specifies
4341   * the path value of "<b>RequestGroup:participant</b>".
4342   */
4343  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTICIPANT = new ca.uhn.fhir.model.api.Include("RequestGroup:participant").toLocked();
4344
4345 /**
4346   * Search parameter: <b>patient</b>
4347   * <p>
4348   * Description: <b>The identity of a patient to search for request groups</b><br>
4349   * Type: <b>reference</b><br>
4350   * Path: <b>RequestGroup.subject.where(resolve() is Patient)</b><br>
4351   * </p>
4352   */
4353  @SearchParamDefinition(name="patient", path="RequestGroup.subject.where(resolve() is Patient)", description="The identity of a patient to search for request groups", type="reference", target={Patient.class } )
4354  public static final String SP_PATIENT = "patient";
4355 /**
4356   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
4357   * <p>
4358   * Description: <b>The identity of a patient to search for request groups</b><br>
4359   * Type: <b>reference</b><br>
4360   * Path: <b>RequestGroup.subject.where(resolve() is Patient)</b><br>
4361   * </p>
4362   */
4363  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
4364
4365/**
4366   * Constant for fluent queries to be used to add include statements. Specifies
4367   * the path value of "<b>RequestGroup:patient</b>".
4368   */
4369  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("RequestGroup:patient").toLocked();
4370
4371 /**
4372   * Search parameter: <b>priority</b>
4373   * <p>
4374   * Description: <b>The priority of the request group</b><br>
4375   * Type: <b>token</b><br>
4376   * Path: <b>RequestGroup.priority</b><br>
4377   * </p>
4378   */
4379  @SearchParamDefinition(name="priority", path="RequestGroup.priority", description="The priority of the request group", type="token" )
4380  public static final String SP_PRIORITY = "priority";
4381 /**
4382   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
4383   * <p>
4384   * Description: <b>The priority of the request group</b><br>
4385   * Type: <b>token</b><br>
4386   * Path: <b>RequestGroup.priority</b><br>
4387   * </p>
4388   */
4389  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
4390
4391 /**
4392   * Search parameter: <b>status</b>
4393   * <p>
4394   * Description: <b>The status of the request group</b><br>
4395   * Type: <b>token</b><br>
4396   * Path: <b>RequestGroup.status</b><br>
4397   * </p>
4398   */
4399  @SearchParamDefinition(name="status", path="RequestGroup.status", description="The status of the request group", type="token" )
4400  public static final String SP_STATUS = "status";
4401 /**
4402   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4403   * <p>
4404   * Description: <b>The status of the request group</b><br>
4405   * Type: <b>token</b><br>
4406   * Path: <b>RequestGroup.status</b><br>
4407   * </p>
4408   */
4409  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4410
4411 /**
4412   * Search parameter: <b>subject</b>
4413   * <p>
4414   * Description: <b>The subject that the request group is about</b><br>
4415   * Type: <b>reference</b><br>
4416   * Path: <b>RequestGroup.subject</b><br>
4417   * </p>
4418   */
4419  @SearchParamDefinition(name="subject", path="RequestGroup.subject", description="The subject that the request group is about", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Group.class, Patient.class } )
4420  public static final String SP_SUBJECT = "subject";
4421 /**
4422   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
4423   * <p>
4424   * Description: <b>The subject that the request group is about</b><br>
4425   * Type: <b>reference</b><br>
4426   * Path: <b>RequestGroup.subject</b><br>
4427   * </p>
4428   */
4429  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
4430
4431/**
4432   * Constant for fluent queries to be used to add include statements. Specifies
4433   * the path value of "<b>RequestGroup:subject</b>".
4434   */
4435  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("RequestGroup:subject").toLocked();
4436
4437
4438}
4439