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 Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
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 task to be performed.
052 */
053@ResourceDef(name="Task", profile="http://hl7.org/fhir/StructureDefinition/Task")
054public class Task extends DomainResource {
055
056    public enum TaskIntent {
057        /**
058         * The intent is not known.  When dealing with Task, it's not always known (or relevant) how the task was initiated - i.e. whether it was proposed, planned, ordered or just done spontaneously.
059         */
060        UNKNOWN, 
061        /**
062         * The request is a suggestion made by someone/something that does not have an intention to ensure it occurs and without providing an authorization to act.
063         */
064        PROPOSAL, 
065        /**
066         * The request represents an intention to ensure something occurs without providing an authorization for others to act.
067         */
068        PLAN, 
069        /**
070         * The request represents a request/demand and authorization for action by a Practitioner.
071         */
072        ORDER, 
073        /**
074         * The request represents an original authorization for action.
075         */
076        ORIGINALORDER, 
077        /**
078         * The request represents an automatically generated supplemental authorization for action based on a parent authorization together with initial results of the action taken against that parent authorization.
079         */
080        REFLEXORDER, 
081        /**
082         * The request represents the view of an authorization instantiated by a fulfilling system representing the details of the fulfiller's intention to act upon a submitted order.
083         */
084        FILLERORDER, 
085        /**
086         * An order created in fulfillment of a broader order that represents the authorization for a single activity occurrence.  E.g. The administration of a single dose of a drug.
087         */
088        INSTANCEORDER, 
089        /**
090         * The request represents a component or option for a RequestOrchestration that establishes timing, conditionality and/or other constraints among a set of requests.  Refer to [[[RequestOrchestration]]] for additional information on how this status is used.
091         */
092        OPTION, 
093        /**
094         * added to help the parsers with the generic types
095         */
096        NULL;
097        public static TaskIntent fromCode(String codeString) throws FHIRException {
098            if (codeString == null || "".equals(codeString))
099                return null;
100        if ("unknown".equals(codeString))
101          return UNKNOWN;
102        if ("proposal".equals(codeString))
103          return PROPOSAL;
104        if ("plan".equals(codeString))
105          return PLAN;
106        if ("order".equals(codeString))
107          return ORDER;
108        if ("original-order".equals(codeString))
109          return ORIGINALORDER;
110        if ("reflex-order".equals(codeString))
111          return REFLEXORDER;
112        if ("filler-order".equals(codeString))
113          return FILLERORDER;
114        if ("instance-order".equals(codeString))
115          return INSTANCEORDER;
116        if ("option".equals(codeString))
117          return OPTION;
118        if (Configuration.isAcceptInvalidEnums())
119          return null;
120        else
121          throw new FHIRException("Unknown TaskIntent code '"+codeString+"'");
122        }
123        public String toCode() {
124          switch (this) {
125            case UNKNOWN: return "unknown";
126            case PROPOSAL: return "proposal";
127            case PLAN: return "plan";
128            case ORDER: return "order";
129            case ORIGINALORDER: return "original-order";
130            case REFLEXORDER: return "reflex-order";
131            case FILLERORDER: return "filler-order";
132            case INSTANCEORDER: return "instance-order";
133            case OPTION: return "option";
134            case NULL: return null;
135            default: return "?";
136          }
137        }
138        public String getSystem() {
139          switch (this) {
140            case UNKNOWN: return "http://hl7.org/fhir/task-intent";
141            case PROPOSAL: return "http://hl7.org/fhir/request-intent";
142            case PLAN: return "http://hl7.org/fhir/request-intent";
143            case ORDER: return "http://hl7.org/fhir/request-intent";
144            case ORIGINALORDER: return "http://hl7.org/fhir/request-intent";
145            case REFLEXORDER: return "http://hl7.org/fhir/request-intent";
146            case FILLERORDER: return "http://hl7.org/fhir/request-intent";
147            case INSTANCEORDER: return "http://hl7.org/fhir/request-intent";
148            case OPTION: return "http://hl7.org/fhir/request-intent";
149            case NULL: return null;
150            default: return "?";
151          }
152        }
153        public String getDefinition() {
154          switch (this) {
155            case UNKNOWN: return "The intent is not known.  When dealing with Task, it's not always known (or relevant) how the task was initiated - i.e. whether it was proposed, planned, ordered or just done spontaneously.";
156            case PROPOSAL: return "The request is a suggestion made by someone/something that does not have an intention to ensure it occurs and without providing an authorization to act.";
157            case PLAN: return "The request represents an intention to ensure something occurs without providing an authorization for others to act.";
158            case ORDER: return "The request represents a request/demand and authorization for action by a Practitioner.";
159            case ORIGINALORDER: return "The request represents an original authorization for action.";
160            case REFLEXORDER: return "The request represents an automatically generated supplemental authorization for action based on a parent authorization together with initial results of the action taken against that parent authorization.";
161            case FILLERORDER: return "The request represents the view of an authorization instantiated by a fulfilling system representing the details of the fulfiller's intention to act upon a submitted order.";
162            case INSTANCEORDER: return "An order created in fulfillment of a broader order that represents the authorization for a single activity occurrence.  E.g. The administration of a single dose of a drug.";
163            case OPTION: return "The request represents a component or option for a RequestOrchestration that establishes timing, conditionality and/or other constraints among a set of requests.  Refer to [[[RequestOrchestration]]] for additional information on how this status is used.";
164            case NULL: return null;
165            default: return "?";
166          }
167        }
168        public String getDisplay() {
169          switch (this) {
170            case UNKNOWN: return "Unknown";
171            case PROPOSAL: return "Proposal";
172            case PLAN: return "Plan";
173            case ORDER: return "Order";
174            case ORIGINALORDER: return "Original Order";
175            case REFLEXORDER: return "Reflex Order";
176            case FILLERORDER: return "Filler Order";
177            case INSTANCEORDER: return "Instance Order";
178            case OPTION: return "Option";
179            case NULL: return null;
180            default: return "?";
181          }
182        }
183    }
184
185  public static class TaskIntentEnumFactory implements EnumFactory<TaskIntent> {
186    public TaskIntent fromCode(String codeString) throws IllegalArgumentException {
187      if (codeString == null || "".equals(codeString))
188            if (codeString == null || "".equals(codeString))
189                return null;
190        if ("unknown".equals(codeString))
191          return TaskIntent.UNKNOWN;
192        if ("proposal".equals(codeString))
193          return TaskIntent.PROPOSAL;
194        if ("plan".equals(codeString))
195          return TaskIntent.PLAN;
196        if ("order".equals(codeString))
197          return TaskIntent.ORDER;
198        if ("original-order".equals(codeString))
199          return TaskIntent.ORIGINALORDER;
200        if ("reflex-order".equals(codeString))
201          return TaskIntent.REFLEXORDER;
202        if ("filler-order".equals(codeString))
203          return TaskIntent.FILLERORDER;
204        if ("instance-order".equals(codeString))
205          return TaskIntent.INSTANCEORDER;
206        if ("option".equals(codeString))
207          return TaskIntent.OPTION;
208        throw new IllegalArgumentException("Unknown TaskIntent code '"+codeString+"'");
209        }
210        public Enumeration<TaskIntent> fromType(Base code) throws FHIRException {
211          if (code == null)
212            return null;
213          if (code.isEmpty())
214            return new Enumeration<TaskIntent>(this);
215          String codeString = ((PrimitiveType) code).asStringValue();
216          if (codeString == null || "".equals(codeString))
217            return null;
218        if ("unknown".equals(codeString))
219          return new Enumeration<TaskIntent>(this, TaskIntent.UNKNOWN);
220        if ("proposal".equals(codeString))
221          return new Enumeration<TaskIntent>(this, TaskIntent.PROPOSAL);
222        if ("plan".equals(codeString))
223          return new Enumeration<TaskIntent>(this, TaskIntent.PLAN);
224        if ("order".equals(codeString))
225          return new Enumeration<TaskIntent>(this, TaskIntent.ORDER);
226        if ("original-order".equals(codeString))
227          return new Enumeration<TaskIntent>(this, TaskIntent.ORIGINALORDER);
228        if ("reflex-order".equals(codeString))
229          return new Enumeration<TaskIntent>(this, TaskIntent.REFLEXORDER);
230        if ("filler-order".equals(codeString))
231          return new Enumeration<TaskIntent>(this, TaskIntent.FILLERORDER);
232        if ("instance-order".equals(codeString))
233          return new Enumeration<TaskIntent>(this, TaskIntent.INSTANCEORDER);
234        if ("option".equals(codeString))
235          return new Enumeration<TaskIntent>(this, TaskIntent.OPTION);
236        throw new FHIRException("Unknown TaskIntent code '"+codeString+"'");
237        }
238    public String toCode(TaskIntent code) {
239      if (code == TaskIntent.UNKNOWN)
240        return "unknown";
241      if (code == TaskIntent.PROPOSAL)
242        return "proposal";
243      if (code == TaskIntent.PLAN)
244        return "plan";
245      if (code == TaskIntent.ORDER)
246        return "order";
247      if (code == TaskIntent.ORIGINALORDER)
248        return "original-order";
249      if (code == TaskIntent.REFLEXORDER)
250        return "reflex-order";
251      if (code == TaskIntent.FILLERORDER)
252        return "filler-order";
253      if (code == TaskIntent.INSTANCEORDER)
254        return "instance-order";
255      if (code == TaskIntent.OPTION)
256        return "option";
257      return "?";
258      }
259    public String toSystem(TaskIntent code) {
260      return code.getSystem();
261      }
262    }
263
264    public enum TaskStatus {
265        /**
266         * The task is not yet ready to be acted upon.
267         */
268        DRAFT, 
269        /**
270         * The task is ready to be acted upon and action is sought.
271         */
272        REQUESTED, 
273        /**
274         * A potential performer has claimed ownership of the task and is evaluating whether to perform it.
275         */
276        RECEIVED, 
277        /**
278         * The potential performer has agreed to execute the task but has not yet started work.
279         */
280        ACCEPTED, 
281        /**
282         * The potential performer who claimed ownership of the task has decided not to execute it prior to performing any action.
283         */
284        REJECTED, 
285        /**
286         * The task is ready to be performed, but no action has yet been taken.  Used in place of requested/received/accepted/rejected when request assignment and acceptance is a given.
287         */
288        READY, 
289        /**
290         * The task was not completed.
291         */
292        CANCELLED, 
293        /**
294         * The task has been started but is not yet complete.
295         */
296        INPROGRESS, 
297        /**
298         * The task has been started but work has been paused.
299         */
300        ONHOLD, 
301        /**
302         * The task was attempted but could not be completed due to some error.
303         */
304        FAILED, 
305        /**
306         * The task has been completed.
307         */
308        COMPLETED, 
309        /**
310         * The task should never have existed and is retained only because of the possibility it may have used.
311         */
312        ENTEREDINERROR, 
313        /**
314         * added to help the parsers with the generic types
315         */
316        NULL;
317        public static TaskStatus fromCode(String codeString) throws FHIRException {
318            if (codeString == null || "".equals(codeString))
319                return null;
320        if ("draft".equals(codeString))
321          return DRAFT;
322        if ("requested".equals(codeString))
323          return REQUESTED;
324        if ("received".equals(codeString))
325          return RECEIVED;
326        if ("accepted".equals(codeString))
327          return ACCEPTED;
328        if ("rejected".equals(codeString))
329          return REJECTED;
330        if ("ready".equals(codeString))
331          return READY;
332        if ("cancelled".equals(codeString))
333          return CANCELLED;
334        if ("in-progress".equals(codeString))
335          return INPROGRESS;
336        if ("on-hold".equals(codeString))
337          return ONHOLD;
338        if ("failed".equals(codeString))
339          return FAILED;
340        if ("completed".equals(codeString))
341          return COMPLETED;
342        if ("entered-in-error".equals(codeString))
343          return ENTEREDINERROR;
344        if (Configuration.isAcceptInvalidEnums())
345          return null;
346        else
347          throw new FHIRException("Unknown TaskStatus code '"+codeString+"'");
348        }
349        public String toCode() {
350          switch (this) {
351            case DRAFT: return "draft";
352            case REQUESTED: return "requested";
353            case RECEIVED: return "received";
354            case ACCEPTED: return "accepted";
355            case REJECTED: return "rejected";
356            case READY: return "ready";
357            case CANCELLED: return "cancelled";
358            case INPROGRESS: return "in-progress";
359            case ONHOLD: return "on-hold";
360            case FAILED: return "failed";
361            case COMPLETED: return "completed";
362            case ENTEREDINERROR: return "entered-in-error";
363            case NULL: return null;
364            default: return "?";
365          }
366        }
367        public String getSystem() {
368          switch (this) {
369            case DRAFT: return "http://hl7.org/fhir/task-status";
370            case REQUESTED: return "http://hl7.org/fhir/task-status";
371            case RECEIVED: return "http://hl7.org/fhir/task-status";
372            case ACCEPTED: return "http://hl7.org/fhir/task-status";
373            case REJECTED: return "http://hl7.org/fhir/task-status";
374            case READY: return "http://hl7.org/fhir/task-status";
375            case CANCELLED: return "http://hl7.org/fhir/task-status";
376            case INPROGRESS: return "http://hl7.org/fhir/task-status";
377            case ONHOLD: return "http://hl7.org/fhir/task-status";
378            case FAILED: return "http://hl7.org/fhir/task-status";
379            case COMPLETED: return "http://hl7.org/fhir/task-status";
380            case ENTEREDINERROR: return "http://hl7.org/fhir/task-status";
381            case NULL: return null;
382            default: return "?";
383          }
384        }
385        public String getDefinition() {
386          switch (this) {
387            case DRAFT: return "The task is not yet ready to be acted upon.";
388            case REQUESTED: return "The task is ready to be acted upon and action is sought.";
389            case RECEIVED: return "A potential performer has claimed ownership of the task and is evaluating whether to perform it.";
390            case ACCEPTED: return "The potential performer has agreed to execute the task but has not yet started work.";
391            case REJECTED: return "The potential performer who claimed ownership of the task has decided not to execute it prior to performing any action.";
392            case READY: return "The task is ready to be performed, but no action has yet been taken.  Used in place of requested/received/accepted/rejected when request assignment and acceptance is a given.";
393            case CANCELLED: return "The task was not completed.";
394            case INPROGRESS: return "The task has been started but is not yet complete.";
395            case ONHOLD: return "The task has been started but work has been paused.";
396            case FAILED: return "The task was attempted but could not be completed due to some error.";
397            case COMPLETED: return "The task has been completed.";
398            case ENTEREDINERROR: return "The task should never have existed and is retained only because of the possibility it may have used.";
399            case NULL: return null;
400            default: return "?";
401          }
402        }
403        public String getDisplay() {
404          switch (this) {
405            case DRAFT: return "Draft";
406            case REQUESTED: return "Requested";
407            case RECEIVED: return "Received";
408            case ACCEPTED: return "Accepted";
409            case REJECTED: return "Rejected";
410            case READY: return "Ready";
411            case CANCELLED: return "Cancelled";
412            case INPROGRESS: return "In Progress";
413            case ONHOLD: return "On Hold";
414            case FAILED: return "Failed";
415            case COMPLETED: return "Completed";
416            case ENTEREDINERROR: return "Entered in Error";
417            case NULL: return null;
418            default: return "?";
419          }
420        }
421    }
422
423  public static class TaskStatusEnumFactory implements EnumFactory<TaskStatus> {
424    public TaskStatus fromCode(String codeString) throws IllegalArgumentException {
425      if (codeString == null || "".equals(codeString))
426            if (codeString == null || "".equals(codeString))
427                return null;
428        if ("draft".equals(codeString))
429          return TaskStatus.DRAFT;
430        if ("requested".equals(codeString))
431          return TaskStatus.REQUESTED;
432        if ("received".equals(codeString))
433          return TaskStatus.RECEIVED;
434        if ("accepted".equals(codeString))
435          return TaskStatus.ACCEPTED;
436        if ("rejected".equals(codeString))
437          return TaskStatus.REJECTED;
438        if ("ready".equals(codeString))
439          return TaskStatus.READY;
440        if ("cancelled".equals(codeString))
441          return TaskStatus.CANCELLED;
442        if ("in-progress".equals(codeString))
443          return TaskStatus.INPROGRESS;
444        if ("on-hold".equals(codeString))
445          return TaskStatus.ONHOLD;
446        if ("failed".equals(codeString))
447          return TaskStatus.FAILED;
448        if ("completed".equals(codeString))
449          return TaskStatus.COMPLETED;
450        if ("entered-in-error".equals(codeString))
451          return TaskStatus.ENTEREDINERROR;
452        throw new IllegalArgumentException("Unknown TaskStatus code '"+codeString+"'");
453        }
454        public Enumeration<TaskStatus> fromType(Base code) throws FHIRException {
455          if (code == null)
456            return null;
457          if (code.isEmpty())
458            return new Enumeration<TaskStatus>(this);
459          String codeString = ((PrimitiveType) code).asStringValue();
460          if (codeString == null || "".equals(codeString))
461            return null;
462        if ("draft".equals(codeString))
463          return new Enumeration<TaskStatus>(this, TaskStatus.DRAFT);
464        if ("requested".equals(codeString))
465          return new Enumeration<TaskStatus>(this, TaskStatus.REQUESTED);
466        if ("received".equals(codeString))
467          return new Enumeration<TaskStatus>(this, TaskStatus.RECEIVED);
468        if ("accepted".equals(codeString))
469          return new Enumeration<TaskStatus>(this, TaskStatus.ACCEPTED);
470        if ("rejected".equals(codeString))
471          return new Enumeration<TaskStatus>(this, TaskStatus.REJECTED);
472        if ("ready".equals(codeString))
473          return new Enumeration<TaskStatus>(this, TaskStatus.READY);
474        if ("cancelled".equals(codeString))
475          return new Enumeration<TaskStatus>(this, TaskStatus.CANCELLED);
476        if ("in-progress".equals(codeString))
477          return new Enumeration<TaskStatus>(this, TaskStatus.INPROGRESS);
478        if ("on-hold".equals(codeString))
479          return new Enumeration<TaskStatus>(this, TaskStatus.ONHOLD);
480        if ("failed".equals(codeString))
481          return new Enumeration<TaskStatus>(this, TaskStatus.FAILED);
482        if ("completed".equals(codeString))
483          return new Enumeration<TaskStatus>(this, TaskStatus.COMPLETED);
484        if ("entered-in-error".equals(codeString))
485          return new Enumeration<TaskStatus>(this, TaskStatus.ENTEREDINERROR);
486        throw new FHIRException("Unknown TaskStatus code '"+codeString+"'");
487        }
488    public String toCode(TaskStatus code) {
489      if (code == TaskStatus.DRAFT)
490        return "draft";
491      if (code == TaskStatus.REQUESTED)
492        return "requested";
493      if (code == TaskStatus.RECEIVED)
494        return "received";
495      if (code == TaskStatus.ACCEPTED)
496        return "accepted";
497      if (code == TaskStatus.REJECTED)
498        return "rejected";
499      if (code == TaskStatus.READY)
500        return "ready";
501      if (code == TaskStatus.CANCELLED)
502        return "cancelled";
503      if (code == TaskStatus.INPROGRESS)
504        return "in-progress";
505      if (code == TaskStatus.ONHOLD)
506        return "on-hold";
507      if (code == TaskStatus.FAILED)
508        return "failed";
509      if (code == TaskStatus.COMPLETED)
510        return "completed";
511      if (code == TaskStatus.ENTEREDINERROR)
512        return "entered-in-error";
513      return "?";
514      }
515    public String toSystem(TaskStatus code) {
516      return code.getSystem();
517      }
518    }
519
520    @Block()
521    public static class TaskRestrictionComponent extends BackboneElement implements IBaseBackboneElement {
522        /**
523         * Indicates the number of times the requested action should occur.
524         */
525        @Child(name = "repetitions", type = {PositiveIntType.class}, order=1, min=0, max=1, modifier=false, summary=false)
526        @Description(shortDefinition="How many times to repeat", formalDefinition="Indicates the number of times the requested action should occur." )
527        protected PositiveIntType repetitions;
528
529        /**
530         * The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x].
531         */
532        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
533        @Description(shortDefinition="When fulfillment is sought", formalDefinition="The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x]." )
534        protected Period period;
535
536        /**
537         * For requests that are targeted to more than one potential recipient/target, to identify who is fulfillment is sought for.
538         */
539        @Child(name = "recipient", type = {Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class, Group.class, Organization.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
540        @Description(shortDefinition="For whom is fulfillment sought?", formalDefinition="For requests that are targeted to more than one potential recipient/target, to identify who is fulfillment is sought for." )
541        protected List<Reference> recipient;
542
543        private static final long serialVersionUID = 1673996066L;
544
545    /**
546     * Constructor
547     */
548      public TaskRestrictionComponent() {
549        super();
550      }
551
552        /**
553         * @return {@link #repetitions} (Indicates the number of times the requested action should occur.). This is the underlying object with id, value and extensions. The accessor "getRepetitions" gives direct access to the value
554         */
555        public PositiveIntType getRepetitionsElement() { 
556          if (this.repetitions == null)
557            if (Configuration.errorOnAutoCreate())
558              throw new Error("Attempt to auto-create TaskRestrictionComponent.repetitions");
559            else if (Configuration.doAutoCreate())
560              this.repetitions = new PositiveIntType(); // bb
561          return this.repetitions;
562        }
563
564        public boolean hasRepetitionsElement() { 
565          return this.repetitions != null && !this.repetitions.isEmpty();
566        }
567
568        public boolean hasRepetitions() { 
569          return this.repetitions != null && !this.repetitions.isEmpty();
570        }
571
572        /**
573         * @param value {@link #repetitions} (Indicates the number of times the requested action should occur.). This is the underlying object with id, value and extensions. The accessor "getRepetitions" gives direct access to the value
574         */
575        public TaskRestrictionComponent setRepetitionsElement(PositiveIntType value) { 
576          this.repetitions = value;
577          return this;
578        }
579
580        /**
581         * @return Indicates the number of times the requested action should occur.
582         */
583        public int getRepetitions() { 
584          return this.repetitions == null || this.repetitions.isEmpty() ? 0 : this.repetitions.getValue();
585        }
586
587        /**
588         * @param value Indicates the number of times the requested action should occur.
589         */
590        public TaskRestrictionComponent setRepetitions(int value) { 
591            if (this.repetitions == null)
592              this.repetitions = new PositiveIntType();
593            this.repetitions.setValue(value);
594          return this;
595        }
596
597        /**
598         * @return {@link #period} (The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x].)
599         */
600        public Period getPeriod() { 
601          if (this.period == null)
602            if (Configuration.errorOnAutoCreate())
603              throw new Error("Attempt to auto-create TaskRestrictionComponent.period");
604            else if (Configuration.doAutoCreate())
605              this.period = new Period(); // cc
606          return this.period;
607        }
608
609        public boolean hasPeriod() { 
610          return this.period != null && !this.period.isEmpty();
611        }
612
613        /**
614         * @param value {@link #period} (The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x].)
615         */
616        public TaskRestrictionComponent setPeriod(Period value) { 
617          this.period = value;
618          return this;
619        }
620
621        /**
622         * @return {@link #recipient} (For requests that are targeted to more than one potential recipient/target, to identify who is fulfillment is sought for.)
623         */
624        public List<Reference> getRecipient() { 
625          if (this.recipient == null)
626            this.recipient = new ArrayList<Reference>();
627          return this.recipient;
628        }
629
630        /**
631         * @return Returns a reference to <code>this</code> for easy method chaining
632         */
633        public TaskRestrictionComponent setRecipient(List<Reference> theRecipient) { 
634          this.recipient = theRecipient;
635          return this;
636        }
637
638        public boolean hasRecipient() { 
639          if (this.recipient == null)
640            return false;
641          for (Reference item : this.recipient)
642            if (!item.isEmpty())
643              return true;
644          return false;
645        }
646
647        public Reference addRecipient() { //3
648          Reference t = new Reference();
649          if (this.recipient == null)
650            this.recipient = new ArrayList<Reference>();
651          this.recipient.add(t);
652          return t;
653        }
654
655        public TaskRestrictionComponent addRecipient(Reference t) { //3
656          if (t == null)
657            return this;
658          if (this.recipient == null)
659            this.recipient = new ArrayList<Reference>();
660          this.recipient.add(t);
661          return this;
662        }
663
664        /**
665         * @return The first repetition of repeating field {@link #recipient}, creating it if it does not already exist {3}
666         */
667        public Reference getRecipientFirstRep() { 
668          if (getRecipient().isEmpty()) {
669            addRecipient();
670          }
671          return getRecipient().get(0);
672        }
673
674        protected void listChildren(List<Property> children) {
675          super.listChildren(children);
676          children.add(new Property("repetitions", "positiveInt", "Indicates the number of times the requested action should occur.", 0, 1, repetitions));
677          children.add(new Property("period", "Period", "The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x].", 0, 1, period));
678          children.add(new Property("recipient", "Reference(Patient|Practitioner|PractitionerRole|RelatedPerson|Group|Organization)", "For requests that are targeted to more than one potential recipient/target, to identify who is fulfillment is sought for.", 0, java.lang.Integer.MAX_VALUE, recipient));
679        }
680
681        @Override
682        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
683          switch (_hash) {
684          case 984367650: /*repetitions*/  return new Property("repetitions", "positiveInt", "Indicates the number of times the requested action should occur.", 0, 1, repetitions);
685          case -991726143: /*period*/  return new Property("period", "Period", "The time-period for which fulfillment is sought. This must fall within the overall time period authorized in the referenced request.  E.g. ServiceRequest.occurance[x].", 0, 1, period);
686          case 820081177: /*recipient*/  return new Property("recipient", "Reference(Patient|Practitioner|PractitionerRole|RelatedPerson|Group|Organization)", "For requests that are targeted to more than one potential recipient/target, to identify who is fulfillment is sought for.", 0, java.lang.Integer.MAX_VALUE, recipient);
687          default: return super.getNamedProperty(_hash, _name, _checkValid);
688          }
689
690        }
691
692      @Override
693      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
694        switch (hash) {
695        case 984367650: /*repetitions*/ return this.repetitions == null ? new Base[0] : new Base[] {this.repetitions}; // PositiveIntType
696        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
697        case 820081177: /*recipient*/ return this.recipient == null ? new Base[0] : this.recipient.toArray(new Base[this.recipient.size()]); // Reference
698        default: return super.getProperty(hash, name, checkValid);
699        }
700
701      }
702
703      @Override
704      public Base setProperty(int hash, String name, Base value) throws FHIRException {
705        switch (hash) {
706        case 984367650: // repetitions
707          this.repetitions = TypeConvertor.castToPositiveInt(value); // PositiveIntType
708          return value;
709        case -991726143: // period
710          this.period = TypeConvertor.castToPeriod(value); // Period
711          return value;
712        case 820081177: // recipient
713          this.getRecipient().add(TypeConvertor.castToReference(value)); // Reference
714          return value;
715        default: return super.setProperty(hash, name, value);
716        }
717
718      }
719
720      @Override
721      public Base setProperty(String name, Base value) throws FHIRException {
722        if (name.equals("repetitions")) {
723          this.repetitions = TypeConvertor.castToPositiveInt(value); // PositiveIntType
724        } else if (name.equals("period")) {
725          this.period = TypeConvertor.castToPeriod(value); // Period
726        } else if (name.equals("recipient")) {
727          this.getRecipient().add(TypeConvertor.castToReference(value));
728        } else
729          return super.setProperty(name, value);
730        return value;
731      }
732
733      @Override
734      public Base makeProperty(int hash, String name) throws FHIRException {
735        switch (hash) {
736        case 984367650:  return getRepetitionsElement();
737        case -991726143:  return getPeriod();
738        case 820081177:  return addRecipient(); 
739        default: return super.makeProperty(hash, name);
740        }
741
742      }
743
744      @Override
745      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
746        switch (hash) {
747        case 984367650: /*repetitions*/ return new String[] {"positiveInt"};
748        case -991726143: /*period*/ return new String[] {"Period"};
749        case 820081177: /*recipient*/ return new String[] {"Reference"};
750        default: return super.getTypesForProperty(hash, name);
751        }
752
753      }
754
755      @Override
756      public Base addChild(String name) throws FHIRException {
757        if (name.equals("repetitions")) {
758          throw new FHIRException("Cannot call addChild on a primitive type Task.restriction.repetitions");
759        }
760        else if (name.equals("period")) {
761          this.period = new Period();
762          return this.period;
763        }
764        else if (name.equals("recipient")) {
765          return addRecipient();
766        }
767        else
768          return super.addChild(name);
769      }
770
771      public TaskRestrictionComponent copy() {
772        TaskRestrictionComponent dst = new TaskRestrictionComponent();
773        copyValues(dst);
774        return dst;
775      }
776
777      public void copyValues(TaskRestrictionComponent dst) {
778        super.copyValues(dst);
779        dst.repetitions = repetitions == null ? null : repetitions.copy();
780        dst.period = period == null ? null : period.copy();
781        if (recipient != null) {
782          dst.recipient = new ArrayList<Reference>();
783          for (Reference i : recipient)
784            dst.recipient.add(i.copy());
785        };
786      }
787
788      @Override
789      public boolean equalsDeep(Base other_) {
790        if (!super.equalsDeep(other_))
791          return false;
792        if (!(other_ instanceof TaskRestrictionComponent))
793          return false;
794        TaskRestrictionComponent o = (TaskRestrictionComponent) other_;
795        return compareDeep(repetitions, o.repetitions, true) && compareDeep(period, o.period, true) && compareDeep(recipient, o.recipient, true)
796          ;
797      }
798
799      @Override
800      public boolean equalsShallow(Base other_) {
801        if (!super.equalsShallow(other_))
802          return false;
803        if (!(other_ instanceof TaskRestrictionComponent))
804          return false;
805        TaskRestrictionComponent o = (TaskRestrictionComponent) other_;
806        return compareValues(repetitions, o.repetitions, true);
807      }
808
809      public boolean isEmpty() {
810        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(repetitions, period, recipient
811          );
812      }
813
814  public String fhirType() {
815    return "Task.restriction";
816
817  }
818
819  }
820
821    @Block()
822    public static class TaskInputComponent extends BackboneElement implements IBaseBackboneElement {
823        /**
824         * A code or description indicating how the input is intended to be used as part of the task execution.
825         */
826        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
827        @Description(shortDefinition="Label for the input", formalDefinition="A code or description indicating how the input is intended to be used as part of the task execution." )
828        protected CodeableConcept type;
829
830        /**
831         * The value of the input parameter as a basic type.
832         */
833        @Child(name = "value", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=2, min=1, max=1, modifier=false, summary=false)
834        @Description(shortDefinition="Content to use in performing the task", formalDefinition="The value of the input parameter as a basic type." )
835        protected DataType value;
836
837        private static final long serialVersionUID = -1659186716L;
838
839    /**
840     * Constructor
841     */
842      public TaskInputComponent() {
843        super();
844      }
845
846    /**
847     * Constructor
848     */
849      public TaskInputComponent(CodeableConcept type, DataType value) {
850        super();
851        this.setType(type);
852        this.setValue(value);
853      }
854
855        /**
856         * @return {@link #type} (A code or description indicating how the input is intended to be used as part of the task execution.)
857         */
858        public CodeableConcept getType() { 
859          if (this.type == null)
860            if (Configuration.errorOnAutoCreate())
861              throw new Error("Attempt to auto-create TaskInputComponent.type");
862            else if (Configuration.doAutoCreate())
863              this.type = new CodeableConcept(); // cc
864          return this.type;
865        }
866
867        public boolean hasType() { 
868          return this.type != null && !this.type.isEmpty();
869        }
870
871        /**
872         * @param value {@link #type} (A code or description indicating how the input is intended to be used as part of the task execution.)
873         */
874        public TaskInputComponent setType(CodeableConcept value) { 
875          this.type = value;
876          return this;
877        }
878
879        /**
880         * @return {@link #value} (The value of the input parameter as a basic type.)
881         */
882        public DataType getValue() { 
883          return this.value;
884        }
885
886        /**
887         * @return {@link #value} (The value of the input parameter as a basic type.)
888         */
889        public Base64BinaryType getValueBase64BinaryType() throws FHIRException { 
890          if (this.value == null)
891            this.value = new Base64BinaryType();
892          if (!(this.value instanceof Base64BinaryType))
893            throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.value.getClass().getName()+" was encountered");
894          return (Base64BinaryType) this.value;
895        }
896
897        public boolean hasValueBase64BinaryType() { 
898          return this != null && this.value instanceof Base64BinaryType;
899        }
900
901        /**
902         * @return {@link #value} (The value of the input parameter as a basic type.)
903         */
904        public BooleanType getValueBooleanType() throws FHIRException { 
905          if (this.value == null)
906            this.value = new BooleanType();
907          if (!(this.value instanceof BooleanType))
908            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
909          return (BooleanType) this.value;
910        }
911
912        public boolean hasValueBooleanType() { 
913          return this != null && this.value instanceof BooleanType;
914        }
915
916        /**
917         * @return {@link #value} (The value of the input parameter as a basic type.)
918         */
919        public CanonicalType getValueCanonicalType() throws FHIRException { 
920          if (this.value == null)
921            this.value = new CanonicalType();
922          if (!(this.value instanceof CanonicalType))
923            throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.value.getClass().getName()+" was encountered");
924          return (CanonicalType) this.value;
925        }
926
927        public boolean hasValueCanonicalType() { 
928          return this != null && this.value instanceof CanonicalType;
929        }
930
931        /**
932         * @return {@link #value} (The value of the input parameter as a basic type.)
933         */
934        public CodeType getValueCodeType() throws FHIRException { 
935          if (this.value == null)
936            this.value = new CodeType();
937          if (!(this.value instanceof CodeType))
938            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
939          return (CodeType) this.value;
940        }
941
942        public boolean hasValueCodeType() { 
943          return this != null && this.value instanceof CodeType;
944        }
945
946        /**
947         * @return {@link #value} (The value of the input parameter as a basic type.)
948         */
949        public DateType getValueDateType() throws FHIRException { 
950          if (this.value == null)
951            this.value = new DateType();
952          if (!(this.value instanceof DateType))
953            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.value.getClass().getName()+" was encountered");
954          return (DateType) this.value;
955        }
956
957        public boolean hasValueDateType() { 
958          return this != null && this.value instanceof DateType;
959        }
960
961        /**
962         * @return {@link #value} (The value of the input parameter as a basic type.)
963         */
964        public DateTimeType getValueDateTimeType() throws FHIRException { 
965          if (this.value == null)
966            this.value = new DateTimeType();
967          if (!(this.value instanceof DateTimeType))
968            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
969          return (DateTimeType) this.value;
970        }
971
972        public boolean hasValueDateTimeType() { 
973          return this != null && this.value instanceof DateTimeType;
974        }
975
976        /**
977         * @return {@link #value} (The value of the input parameter as a basic type.)
978         */
979        public DecimalType getValueDecimalType() throws FHIRException { 
980          if (this.value == null)
981            this.value = new DecimalType();
982          if (!(this.value instanceof DecimalType))
983            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
984          return (DecimalType) this.value;
985        }
986
987        public boolean hasValueDecimalType() { 
988          return this != null && this.value instanceof DecimalType;
989        }
990
991        /**
992         * @return {@link #value} (The value of the input parameter as a basic type.)
993         */
994        public IdType getValueIdType() throws FHIRException { 
995          if (this.value == null)
996            this.value = new IdType();
997          if (!(this.value instanceof IdType))
998            throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.value.getClass().getName()+" was encountered");
999          return (IdType) this.value;
1000        }
1001
1002        public boolean hasValueIdType() { 
1003          return this != null && this.value instanceof IdType;
1004        }
1005
1006        /**
1007         * @return {@link #value} (The value of the input parameter as a basic type.)
1008         */
1009        public InstantType getValueInstantType() throws FHIRException { 
1010          if (this.value == null)
1011            this.value = new InstantType();
1012          if (!(this.value instanceof InstantType))
1013            throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.value.getClass().getName()+" was encountered");
1014          return (InstantType) this.value;
1015        }
1016
1017        public boolean hasValueInstantType() { 
1018          return this != null && this.value instanceof InstantType;
1019        }
1020
1021        /**
1022         * @return {@link #value} (The value of the input parameter as a basic type.)
1023         */
1024        public IntegerType getValueIntegerType() throws FHIRException { 
1025          if (this.value == null)
1026            this.value = new IntegerType();
1027          if (!(this.value instanceof IntegerType))
1028            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
1029          return (IntegerType) this.value;
1030        }
1031
1032        public boolean hasValueIntegerType() { 
1033          return this != null && this.value instanceof IntegerType;
1034        }
1035
1036        /**
1037         * @return {@link #value} (The value of the input parameter as a basic type.)
1038         */
1039        public Integer64Type getValueInteger64Type() throws FHIRException { 
1040          if (this.value == null)
1041            this.value = new Integer64Type();
1042          if (!(this.value instanceof Integer64Type))
1043            throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.value.getClass().getName()+" was encountered");
1044          return (Integer64Type) this.value;
1045        }
1046
1047        public boolean hasValueInteger64Type() { 
1048          return this != null && this.value instanceof Integer64Type;
1049        }
1050
1051        /**
1052         * @return {@link #value} (The value of the input parameter as a basic type.)
1053         */
1054        public MarkdownType getValueMarkdownType() throws FHIRException { 
1055          if (this.value == null)
1056            this.value = new MarkdownType();
1057          if (!(this.value instanceof MarkdownType))
1058            throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.value.getClass().getName()+" was encountered");
1059          return (MarkdownType) this.value;
1060        }
1061
1062        public boolean hasValueMarkdownType() { 
1063          return this != null && this.value instanceof MarkdownType;
1064        }
1065
1066        /**
1067         * @return {@link #value} (The value of the input parameter as a basic type.)
1068         */
1069        public OidType getValueOidType() throws FHIRException { 
1070          if (this.value == null)
1071            this.value = new OidType();
1072          if (!(this.value instanceof OidType))
1073            throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.value.getClass().getName()+" was encountered");
1074          return (OidType) this.value;
1075        }
1076
1077        public boolean hasValueOidType() { 
1078          return this != null && this.value instanceof OidType;
1079        }
1080
1081        /**
1082         * @return {@link #value} (The value of the input parameter as a basic type.)
1083         */
1084        public PositiveIntType getValuePositiveIntType() throws FHIRException { 
1085          if (this.value == null)
1086            this.value = new PositiveIntType();
1087          if (!(this.value instanceof PositiveIntType))
1088            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.value.getClass().getName()+" was encountered");
1089          return (PositiveIntType) this.value;
1090        }
1091
1092        public boolean hasValuePositiveIntType() { 
1093          return this != null && this.value instanceof PositiveIntType;
1094        }
1095
1096        /**
1097         * @return {@link #value} (The value of the input parameter as a basic type.)
1098         */
1099        public StringType getValueStringType() throws FHIRException { 
1100          if (this.value == null)
1101            this.value = new StringType();
1102          if (!(this.value instanceof StringType))
1103            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
1104          return (StringType) this.value;
1105        }
1106
1107        public boolean hasValueStringType() { 
1108          return this != null && this.value instanceof StringType;
1109        }
1110
1111        /**
1112         * @return {@link #value} (The value of the input parameter as a basic type.)
1113         */
1114        public TimeType getValueTimeType() throws FHIRException { 
1115          if (this.value == null)
1116            this.value = new TimeType();
1117          if (!(this.value instanceof TimeType))
1118            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
1119          return (TimeType) this.value;
1120        }
1121
1122        public boolean hasValueTimeType() { 
1123          return this != null && this.value instanceof TimeType;
1124        }
1125
1126        /**
1127         * @return {@link #value} (The value of the input parameter as a basic type.)
1128         */
1129        public UnsignedIntType getValueUnsignedIntType() throws FHIRException { 
1130          if (this.value == null)
1131            this.value = new UnsignedIntType();
1132          if (!(this.value instanceof UnsignedIntType))
1133            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.value.getClass().getName()+" was encountered");
1134          return (UnsignedIntType) this.value;
1135        }
1136
1137        public boolean hasValueUnsignedIntType() { 
1138          return this != null && this.value instanceof UnsignedIntType;
1139        }
1140
1141        /**
1142         * @return {@link #value} (The value of the input parameter as a basic type.)
1143         */
1144        public UriType getValueUriType() throws FHIRException { 
1145          if (this.value == null)
1146            this.value = new UriType();
1147          if (!(this.value instanceof UriType))
1148            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
1149          return (UriType) this.value;
1150        }
1151
1152        public boolean hasValueUriType() { 
1153          return this != null && this.value instanceof UriType;
1154        }
1155
1156        /**
1157         * @return {@link #value} (The value of the input parameter as a basic type.)
1158         */
1159        public UrlType getValueUrlType() throws FHIRException { 
1160          if (this.value == null)
1161            this.value = new UrlType();
1162          if (!(this.value instanceof UrlType))
1163            throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.value.getClass().getName()+" was encountered");
1164          return (UrlType) this.value;
1165        }
1166
1167        public boolean hasValueUrlType() { 
1168          return this != null && this.value instanceof UrlType;
1169        }
1170
1171        /**
1172         * @return {@link #value} (The value of the input parameter as a basic type.)
1173         */
1174        public UuidType getValueUuidType() throws FHIRException { 
1175          if (this.value == null)
1176            this.value = new UuidType();
1177          if (!(this.value instanceof UuidType))
1178            throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.value.getClass().getName()+" was encountered");
1179          return (UuidType) this.value;
1180        }
1181
1182        public boolean hasValueUuidType() { 
1183          return this != null && this.value instanceof UuidType;
1184        }
1185
1186        /**
1187         * @return {@link #value} (The value of the input parameter as a basic type.)
1188         */
1189        public Address getValueAddress() throws FHIRException { 
1190          if (this.value == null)
1191            this.value = new Address();
1192          if (!(this.value instanceof Address))
1193            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.value.getClass().getName()+" was encountered");
1194          return (Address) this.value;
1195        }
1196
1197        public boolean hasValueAddress() { 
1198          return this != null && this.value instanceof Address;
1199        }
1200
1201        /**
1202         * @return {@link #value} (The value of the input parameter as a basic type.)
1203         */
1204        public Age getValueAge() throws FHIRException { 
1205          if (this.value == null)
1206            this.value = new Age();
1207          if (!(this.value instanceof Age))
1208            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.value.getClass().getName()+" was encountered");
1209          return (Age) this.value;
1210        }
1211
1212        public boolean hasValueAge() { 
1213          return this != null && this.value instanceof Age;
1214        }
1215
1216        /**
1217         * @return {@link #value} (The value of the input parameter as a basic type.)
1218         */
1219        public Annotation getValueAnnotation() throws FHIRException { 
1220          if (this.value == null)
1221            this.value = new Annotation();
1222          if (!(this.value instanceof Annotation))
1223            throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.value.getClass().getName()+" was encountered");
1224          return (Annotation) this.value;
1225        }
1226
1227        public boolean hasValueAnnotation() { 
1228          return this != null && this.value instanceof Annotation;
1229        }
1230
1231        /**
1232         * @return {@link #value} (The value of the input parameter as a basic type.)
1233         */
1234        public Attachment getValueAttachment() throws FHIRException { 
1235          if (this.value == null)
1236            this.value = new Attachment();
1237          if (!(this.value instanceof Attachment))
1238            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
1239          return (Attachment) this.value;
1240        }
1241
1242        public boolean hasValueAttachment() { 
1243          return this != null && this.value instanceof Attachment;
1244        }
1245
1246        /**
1247         * @return {@link #value} (The value of the input parameter as a basic type.)
1248         */
1249        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
1250          if (this.value == null)
1251            this.value = new CodeableConcept();
1252          if (!(this.value instanceof CodeableConcept))
1253            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
1254          return (CodeableConcept) this.value;
1255        }
1256
1257        public boolean hasValueCodeableConcept() { 
1258          return this != null && this.value instanceof CodeableConcept;
1259        }
1260
1261        /**
1262         * @return {@link #value} (The value of the input parameter as a basic type.)
1263         */
1264        public CodeableReference getValueCodeableReference() throws FHIRException { 
1265          if (this.value == null)
1266            this.value = new CodeableReference();
1267          if (!(this.value instanceof CodeableReference))
1268            throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.value.getClass().getName()+" was encountered");
1269          return (CodeableReference) this.value;
1270        }
1271
1272        public boolean hasValueCodeableReference() { 
1273          return this != null && this.value instanceof CodeableReference;
1274        }
1275
1276        /**
1277         * @return {@link #value} (The value of the input parameter as a basic type.)
1278         */
1279        public Coding getValueCoding() throws FHIRException { 
1280          if (this.value == null)
1281            this.value = new Coding();
1282          if (!(this.value instanceof Coding))
1283            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
1284          return (Coding) this.value;
1285        }
1286
1287        public boolean hasValueCoding() { 
1288          return this != null && this.value instanceof Coding;
1289        }
1290
1291        /**
1292         * @return {@link #value} (The value of the input parameter as a basic type.)
1293         */
1294        public ContactPoint getValueContactPoint() throws FHIRException { 
1295          if (this.value == null)
1296            this.value = new ContactPoint();
1297          if (!(this.value instanceof ContactPoint))
1298            throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.value.getClass().getName()+" was encountered");
1299          return (ContactPoint) this.value;
1300        }
1301
1302        public boolean hasValueContactPoint() { 
1303          return this != null && this.value instanceof ContactPoint;
1304        }
1305
1306        /**
1307         * @return {@link #value} (The value of the input parameter as a basic type.)
1308         */
1309        public Count getValueCount() throws FHIRException { 
1310          if (this.value == null)
1311            this.value = new Count();
1312          if (!(this.value instanceof Count))
1313            throw new FHIRException("Type mismatch: the type Count was expected, but "+this.value.getClass().getName()+" was encountered");
1314          return (Count) this.value;
1315        }
1316
1317        public boolean hasValueCount() { 
1318          return this != null && this.value instanceof Count;
1319        }
1320
1321        /**
1322         * @return {@link #value} (The value of the input parameter as a basic type.)
1323         */
1324        public Distance getValueDistance() throws FHIRException { 
1325          if (this.value == null)
1326            this.value = new Distance();
1327          if (!(this.value instanceof Distance))
1328            throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.value.getClass().getName()+" was encountered");
1329          return (Distance) this.value;
1330        }
1331
1332        public boolean hasValueDistance() { 
1333          return this != null && this.value instanceof Distance;
1334        }
1335
1336        /**
1337         * @return {@link #value} (The value of the input parameter as a basic type.)
1338         */
1339        public Duration getValueDuration() throws FHIRException { 
1340          if (this.value == null)
1341            this.value = new Duration();
1342          if (!(this.value instanceof Duration))
1343            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.value.getClass().getName()+" was encountered");
1344          return (Duration) this.value;
1345        }
1346
1347        public boolean hasValueDuration() { 
1348          return this != null && this.value instanceof Duration;
1349        }
1350
1351        /**
1352         * @return {@link #value} (The value of the input parameter as a basic type.)
1353         */
1354        public HumanName getValueHumanName() throws FHIRException { 
1355          if (this.value == null)
1356            this.value = new HumanName();
1357          if (!(this.value instanceof HumanName))
1358            throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.value.getClass().getName()+" was encountered");
1359          return (HumanName) this.value;
1360        }
1361
1362        public boolean hasValueHumanName() { 
1363          return this != null && this.value instanceof HumanName;
1364        }
1365
1366        /**
1367         * @return {@link #value} (The value of the input parameter as a basic type.)
1368         */
1369        public Identifier getValueIdentifier() throws FHIRException { 
1370          if (this.value == null)
1371            this.value = new Identifier();
1372          if (!(this.value instanceof Identifier))
1373            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.value.getClass().getName()+" was encountered");
1374          return (Identifier) this.value;
1375        }
1376
1377        public boolean hasValueIdentifier() { 
1378          return this != null && this.value instanceof Identifier;
1379        }
1380
1381        /**
1382         * @return {@link #value} (The value of the input parameter as a basic type.)
1383         */
1384        public Money getValueMoney() throws FHIRException { 
1385          if (this.value == null)
1386            this.value = new Money();
1387          if (!(this.value instanceof Money))
1388            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.value.getClass().getName()+" was encountered");
1389          return (Money) this.value;
1390        }
1391
1392        public boolean hasValueMoney() { 
1393          return this != null && this.value instanceof Money;
1394        }
1395
1396        /**
1397         * @return {@link #value} (The value of the input parameter as a basic type.)
1398         */
1399        public Period getValuePeriod() throws FHIRException { 
1400          if (this.value == null)
1401            this.value = new Period();
1402          if (!(this.value instanceof Period))
1403            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
1404          return (Period) this.value;
1405        }
1406
1407        public boolean hasValuePeriod() { 
1408          return this != null && this.value instanceof Period;
1409        }
1410
1411        /**
1412         * @return {@link #value} (The value of the input parameter as a basic type.)
1413         */
1414        public Quantity getValueQuantity() throws FHIRException { 
1415          if (this.value == null)
1416            this.value = new Quantity();
1417          if (!(this.value instanceof Quantity))
1418            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1419          return (Quantity) this.value;
1420        }
1421
1422        public boolean hasValueQuantity() { 
1423          return this != null && this.value instanceof Quantity;
1424        }
1425
1426        /**
1427         * @return {@link #value} (The value of the input parameter as a basic type.)
1428         */
1429        public Range getValueRange() throws FHIRException { 
1430          if (this.value == null)
1431            this.value = new Range();
1432          if (!(this.value instanceof Range))
1433            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
1434          return (Range) this.value;
1435        }
1436
1437        public boolean hasValueRange() { 
1438          return this != null && this.value instanceof Range;
1439        }
1440
1441        /**
1442         * @return {@link #value} (The value of the input parameter as a basic type.)
1443         */
1444        public Ratio getValueRatio() throws FHIRException { 
1445          if (this.value == null)
1446            this.value = new Ratio();
1447          if (!(this.value instanceof Ratio))
1448            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
1449          return (Ratio) this.value;
1450        }
1451
1452        public boolean hasValueRatio() { 
1453          return this != null && this.value instanceof Ratio;
1454        }
1455
1456        /**
1457         * @return {@link #value} (The value of the input parameter as a basic type.)
1458         */
1459        public RatioRange getValueRatioRange() throws FHIRException { 
1460          if (this.value == null)
1461            this.value = new RatioRange();
1462          if (!(this.value instanceof RatioRange))
1463            throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.value.getClass().getName()+" was encountered");
1464          return (RatioRange) this.value;
1465        }
1466
1467        public boolean hasValueRatioRange() { 
1468          return this != null && this.value instanceof RatioRange;
1469        }
1470
1471        /**
1472         * @return {@link #value} (The value of the input parameter as a basic type.)
1473         */
1474        public Reference getValueReference() throws FHIRException { 
1475          if (this.value == null)
1476            this.value = new Reference();
1477          if (!(this.value instanceof Reference))
1478            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
1479          return (Reference) this.value;
1480        }
1481
1482        public boolean hasValueReference() { 
1483          return this != null && this.value instanceof Reference;
1484        }
1485
1486        /**
1487         * @return {@link #value} (The value of the input parameter as a basic type.)
1488         */
1489        public SampledData getValueSampledData() throws FHIRException { 
1490          if (this.value == null)
1491            this.value = new SampledData();
1492          if (!(this.value instanceof SampledData))
1493            throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
1494          return (SampledData) this.value;
1495        }
1496
1497        public boolean hasValueSampledData() { 
1498          return this != null && this.value instanceof SampledData;
1499        }
1500
1501        /**
1502         * @return {@link #value} (The value of the input parameter as a basic type.)
1503         */
1504        public Signature getValueSignature() throws FHIRException { 
1505          if (this.value == null)
1506            this.value = new Signature();
1507          if (!(this.value instanceof Signature))
1508            throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.value.getClass().getName()+" was encountered");
1509          return (Signature) this.value;
1510        }
1511
1512        public boolean hasValueSignature() { 
1513          return this != null && this.value instanceof Signature;
1514        }
1515
1516        /**
1517         * @return {@link #value} (The value of the input parameter as a basic type.)
1518         */
1519        public Timing getValueTiming() throws FHIRException { 
1520          if (this.value == null)
1521            this.value = new Timing();
1522          if (!(this.value instanceof Timing))
1523            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.value.getClass().getName()+" was encountered");
1524          return (Timing) this.value;
1525        }
1526
1527        public boolean hasValueTiming() { 
1528          return this != null && this.value instanceof Timing;
1529        }
1530
1531        /**
1532         * @return {@link #value} (The value of the input parameter as a basic type.)
1533         */
1534        public ContactDetail getValueContactDetail() throws FHIRException { 
1535          if (this.value == null)
1536            this.value = new ContactDetail();
1537          if (!(this.value instanceof ContactDetail))
1538            throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
1539          return (ContactDetail) this.value;
1540        }
1541
1542        public boolean hasValueContactDetail() { 
1543          return this != null && this.value instanceof ContactDetail;
1544        }
1545
1546        /**
1547         * @return {@link #value} (The value of the input parameter as a basic type.)
1548         */
1549        public DataRequirement getValueDataRequirement() throws FHIRException { 
1550          if (this.value == null)
1551            this.value = new DataRequirement();
1552          if (!(this.value instanceof DataRequirement))
1553            throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.value.getClass().getName()+" was encountered");
1554          return (DataRequirement) this.value;
1555        }
1556
1557        public boolean hasValueDataRequirement() { 
1558          return this != null && this.value instanceof DataRequirement;
1559        }
1560
1561        /**
1562         * @return {@link #value} (The value of the input parameter as a basic type.)
1563         */
1564        public Expression getValueExpression() throws FHIRException { 
1565          if (this.value == null)
1566            this.value = new Expression();
1567          if (!(this.value instanceof Expression))
1568            throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.value.getClass().getName()+" was encountered");
1569          return (Expression) this.value;
1570        }
1571
1572        public boolean hasValueExpression() { 
1573          return this != null && this.value instanceof Expression;
1574        }
1575
1576        /**
1577         * @return {@link #value} (The value of the input parameter as a basic type.)
1578         */
1579        public ParameterDefinition getValueParameterDefinition() throws FHIRException { 
1580          if (this.value == null)
1581            this.value = new ParameterDefinition();
1582          if (!(this.value instanceof ParameterDefinition))
1583            throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
1584          return (ParameterDefinition) this.value;
1585        }
1586
1587        public boolean hasValueParameterDefinition() { 
1588          return this != null && this.value instanceof ParameterDefinition;
1589        }
1590
1591        /**
1592         * @return {@link #value} (The value of the input parameter as a basic type.)
1593         */
1594        public RelatedArtifact getValueRelatedArtifact() throws FHIRException { 
1595          if (this.value == null)
1596            this.value = new RelatedArtifact();
1597          if (!(this.value instanceof RelatedArtifact))
1598            throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.value.getClass().getName()+" was encountered");
1599          return (RelatedArtifact) this.value;
1600        }
1601
1602        public boolean hasValueRelatedArtifact() { 
1603          return this != null && this.value instanceof RelatedArtifact;
1604        }
1605
1606        /**
1607         * @return {@link #value} (The value of the input parameter as a basic type.)
1608         */
1609        public TriggerDefinition getValueTriggerDefinition() throws FHIRException { 
1610          if (this.value == null)
1611            this.value = new TriggerDefinition();
1612          if (!(this.value instanceof TriggerDefinition))
1613            throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
1614          return (TriggerDefinition) this.value;
1615        }
1616
1617        public boolean hasValueTriggerDefinition() { 
1618          return this != null && this.value instanceof TriggerDefinition;
1619        }
1620
1621        /**
1622         * @return {@link #value} (The value of the input parameter as a basic type.)
1623         */
1624        public UsageContext getValueUsageContext() throws FHIRException { 
1625          if (this.value == null)
1626            this.value = new UsageContext();
1627          if (!(this.value instanceof UsageContext))
1628            throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.value.getClass().getName()+" was encountered");
1629          return (UsageContext) this.value;
1630        }
1631
1632        public boolean hasValueUsageContext() { 
1633          return this != null && this.value instanceof UsageContext;
1634        }
1635
1636        /**
1637         * @return {@link #value} (The value of the input parameter as a basic type.)
1638         */
1639        public Availability getValueAvailability() throws FHIRException { 
1640          if (this.value == null)
1641            this.value = new Availability();
1642          if (!(this.value instanceof Availability))
1643            throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.value.getClass().getName()+" was encountered");
1644          return (Availability) this.value;
1645        }
1646
1647        public boolean hasValueAvailability() { 
1648          return this != null && this.value instanceof Availability;
1649        }
1650
1651        /**
1652         * @return {@link #value} (The value of the input parameter as a basic type.)
1653         */
1654        public ExtendedContactDetail getValueExtendedContactDetail() throws FHIRException { 
1655          if (this.value == null)
1656            this.value = new ExtendedContactDetail();
1657          if (!(this.value instanceof ExtendedContactDetail))
1658            throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
1659          return (ExtendedContactDetail) this.value;
1660        }
1661
1662        public boolean hasValueExtendedContactDetail() { 
1663          return this != null && this.value instanceof ExtendedContactDetail;
1664        }
1665
1666        /**
1667         * @return {@link #value} (The value of the input parameter as a basic type.)
1668         */
1669        public Dosage getValueDosage() throws FHIRException { 
1670          if (this.value == null)
1671            this.value = new Dosage();
1672          if (!(this.value instanceof Dosage))
1673            throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.value.getClass().getName()+" was encountered");
1674          return (Dosage) this.value;
1675        }
1676
1677        public boolean hasValueDosage() { 
1678          return this != null && this.value instanceof Dosage;
1679        }
1680
1681        /**
1682         * @return {@link #value} (The value of the input parameter as a basic type.)
1683         */
1684        public Meta getValueMeta() throws FHIRException { 
1685          if (this.value == null)
1686            this.value = new Meta();
1687          if (!(this.value instanceof Meta))
1688            throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.value.getClass().getName()+" was encountered");
1689          return (Meta) this.value;
1690        }
1691
1692        public boolean hasValueMeta() { 
1693          return this != null && this.value instanceof Meta;
1694        }
1695
1696        public boolean hasValue() { 
1697          return this.value != null && !this.value.isEmpty();
1698        }
1699
1700        /**
1701         * @param value {@link #value} (The value of the input parameter as a basic type.)
1702         */
1703        public TaskInputComponent setValue(DataType value) { 
1704          if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
1705            throw new Error("Not the right type for Task.input.value[x]: "+value.fhirType());
1706          this.value = value;
1707          return this;
1708        }
1709
1710        protected void listChildren(List<Property> children) {
1711          super.listChildren(children);
1712          children.add(new Property("type", "CodeableConcept", "A code or description indicating how the input is intended to be used as part of the task execution.", 0, 1, type));
1713          children.add(new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the input parameter as a basic type.", 0, 1, value));
1714        }
1715
1716        @Override
1717        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1718          switch (_hash) {
1719          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "A code or description indicating how the input is intended to be used as part of the task execution.", 0, 1, type);
1720          case -1410166417: /*value[x]*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the input parameter as a basic type.", 0, 1, value);
1721          case 111972721: /*value*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the input parameter as a basic type.", 0, 1, value);
1722          case -1535024575: /*valueBase64Binary*/  return new Property("value[x]", "base64Binary", "The value of the input parameter as a basic type.", 0, 1, value);
1723          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the input parameter as a basic type.", 0, 1, value);
1724          case -786218365: /*valueCanonical*/  return new Property("value[x]", "canonical", "The value of the input parameter as a basic type.", 0, 1, value);
1725          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of the input parameter as a basic type.", 0, 1, value);
1726          case -766192449: /*valueDate*/  return new Property("value[x]", "date", "The value of the input parameter as a basic type.", 0, 1, value);
1727          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of the input parameter as a basic type.", 0, 1, value);
1728          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of the input parameter as a basic type.", 0, 1, value);
1729          case 231604844: /*valueId*/  return new Property("value[x]", "id", "The value of the input parameter as a basic type.", 0, 1, value);
1730          case -1668687056: /*valueInstant*/  return new Property("value[x]", "instant", "The value of the input parameter as a basic type.", 0, 1, value);
1731          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of the input parameter as a basic type.", 0, 1, value);
1732          case -1122120181: /*valueInteger64*/  return new Property("value[x]", "integer64", "The value of the input parameter as a basic type.", 0, 1, value);
1733          case -497880704: /*valueMarkdown*/  return new Property("value[x]", "markdown", "The value of the input parameter as a basic type.", 0, 1, value);
1734          case -1410178407: /*valueOid*/  return new Property("value[x]", "oid", "The value of the input parameter as a basic type.", 0, 1, value);
1735          case -1249932027: /*valuePositiveInt*/  return new Property("value[x]", "positiveInt", "The value of the input parameter as a basic type.", 0, 1, value);
1736          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of the input parameter as a basic type.", 0, 1, value);
1737          case -765708322: /*valueTime*/  return new Property("value[x]", "time", "The value of the input parameter as a basic type.", 0, 1, value);
1738          case 26529417: /*valueUnsignedInt*/  return new Property("value[x]", "unsignedInt", "The value of the input parameter as a basic type.", 0, 1, value);
1739          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The value of the input parameter as a basic type.", 0, 1, value);
1740          case -1410172354: /*valueUrl*/  return new Property("value[x]", "url", "The value of the input parameter as a basic type.", 0, 1, value);
1741          case -765667124: /*valueUuid*/  return new Property("value[x]", "uuid", "The value of the input parameter as a basic type.", 0, 1, value);
1742          case -478981821: /*valueAddress*/  return new Property("value[x]", "Address", "The value of the input parameter as a basic type.", 0, 1, value);
1743          case -1410191922: /*valueAge*/  return new Property("value[x]", "Age", "The value of the input parameter as a basic type.", 0, 1, value);
1744          case -67108992: /*valueAnnotation*/  return new Property("value[x]", "Annotation", "The value of the input parameter as a basic type.", 0, 1, value);
1745          case -475566732: /*valueAttachment*/  return new Property("value[x]", "Attachment", "The value of the input parameter as a basic type.", 0, 1, value);
1746          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The value of the input parameter as a basic type.", 0, 1, value);
1747          case -257955629: /*valueCodeableReference*/  return new Property("value[x]", "CodeableReference", "The value of the input parameter as a basic type.", 0, 1, value);
1748          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of the input parameter as a basic type.", 0, 1, value);
1749          case 944904545: /*valueContactPoint*/  return new Property("value[x]", "ContactPoint", "The value of the input parameter as a basic type.", 0, 1, value);
1750          case 2017332766: /*valueCount*/  return new Property("value[x]", "Count", "The value of the input parameter as a basic type.", 0, 1, value);
1751          case -456359802: /*valueDistance*/  return new Property("value[x]", "Distance", "The value of the input parameter as a basic type.", 0, 1, value);
1752          case 1558135333: /*valueDuration*/  return new Property("value[x]", "Duration", "The value of the input parameter as a basic type.", 0, 1, value);
1753          case -2026205465: /*valueHumanName*/  return new Property("value[x]", "HumanName", "The value of the input parameter as a basic type.", 0, 1, value);
1754          case -130498310: /*valueIdentifier*/  return new Property("value[x]", "Identifier", "The value of the input parameter as a basic type.", 0, 1, value);
1755          case 2026560975: /*valueMoney*/  return new Property("value[x]", "Money", "The value of the input parameter as a basic type.", 0, 1, value);
1756          case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Period", "The value of the input parameter as a basic type.", 0, 1, value);
1757          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The value of the input parameter as a basic type.", 0, 1, value);
1758          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The value of the input parameter as a basic type.", 0, 1, value);
1759          case 2030767386: /*valueRatio*/  return new Property("value[x]", "Ratio", "The value of the input parameter as a basic type.", 0, 1, value);
1760          case -706454461: /*valueRatioRange*/  return new Property("value[x]", "RatioRange", "The value of the input parameter as a basic type.", 0, 1, value);
1761          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The value of the input parameter as a basic type.", 0, 1, value);
1762          case -962229101: /*valueSampledData*/  return new Property("value[x]", "SampledData", "The value of the input parameter as a basic type.", 0, 1, value);
1763          case -540985785: /*valueSignature*/  return new Property("value[x]", "Signature", "The value of the input parameter as a basic type.", 0, 1, value);
1764          case -1406282469: /*valueTiming*/  return new Property("value[x]", "Timing", "The value of the input parameter as a basic type.", 0, 1, value);
1765          case -1125200224: /*valueContactDetail*/  return new Property("value[x]", "ContactDetail", "The value of the input parameter as a basic type.", 0, 1, value);
1766          case 1710554248: /*valueDataRequirement*/  return new Property("value[x]", "DataRequirement", "The value of the input parameter as a basic type.", 0, 1, value);
1767          case -307517719: /*valueExpression*/  return new Property("value[x]", "Expression", "The value of the input parameter as a basic type.", 0, 1, value);
1768          case 1387478187: /*valueParameterDefinition*/  return new Property("value[x]", "ParameterDefinition", "The value of the input parameter as a basic type.", 0, 1, value);
1769          case 1748214124: /*valueRelatedArtifact*/  return new Property("value[x]", "RelatedArtifact", "The value of the input parameter as a basic type.", 0, 1, value);
1770          case 976830394: /*valueTriggerDefinition*/  return new Property("value[x]", "TriggerDefinition", "The value of the input parameter as a basic type.", 0, 1, value);
1771          case 588000479: /*valueUsageContext*/  return new Property("value[x]", "UsageContext", "The value of the input parameter as a basic type.", 0, 1, value);
1772          case 1678530924: /*valueAvailability*/  return new Property("value[x]", "Availability", "The value of the input parameter as a basic type.", 0, 1, value);
1773          case -1567222041: /*valueExtendedContactDetail*/  return new Property("value[x]", "ExtendedContactDetail", "The value of the input parameter as a basic type.", 0, 1, value);
1774          case -1858636920: /*valueDosage*/  return new Property("value[x]", "Dosage", "The value of the input parameter as a basic type.", 0, 1, value);
1775          case -765920490: /*valueMeta*/  return new Property("value[x]", "Meta", "The value of the input parameter as a basic type.", 0, 1, value);
1776          default: return super.getNamedProperty(_hash, _name, _checkValid);
1777          }
1778
1779        }
1780
1781      @Override
1782      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1783        switch (hash) {
1784        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1785        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
1786        default: return super.getProperty(hash, name, checkValid);
1787        }
1788
1789      }
1790
1791      @Override
1792      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1793        switch (hash) {
1794        case 3575610: // type
1795          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1796          return value;
1797        case 111972721: // value
1798          this.value = TypeConvertor.castToType(value); // DataType
1799          return value;
1800        default: return super.setProperty(hash, name, value);
1801        }
1802
1803      }
1804
1805      @Override
1806      public Base setProperty(String name, Base value) throws FHIRException {
1807        if (name.equals("type")) {
1808          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1809        } else if (name.equals("value[x]")) {
1810          this.value = TypeConvertor.castToType(value); // DataType
1811        } else
1812          return super.setProperty(name, value);
1813        return value;
1814      }
1815
1816      @Override
1817      public Base makeProperty(int hash, String name) throws FHIRException {
1818        switch (hash) {
1819        case 3575610:  return getType();
1820        case -1410166417:  return getValue();
1821        case 111972721:  return getValue();
1822        default: return super.makeProperty(hash, name);
1823        }
1824
1825      }
1826
1827      @Override
1828      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1829        switch (hash) {
1830        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1831        case 111972721: /*value*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
1832        default: return super.getTypesForProperty(hash, name);
1833        }
1834
1835      }
1836
1837      @Override
1838      public Base addChild(String name) throws FHIRException {
1839        if (name.equals("type")) {
1840          this.type = new CodeableConcept();
1841          return this.type;
1842        }
1843        else if (name.equals("valueBase64Binary")) {
1844          this.value = new Base64BinaryType();
1845          return this.value;
1846        }
1847        else if (name.equals("valueBoolean")) {
1848          this.value = new BooleanType();
1849          return this.value;
1850        }
1851        else if (name.equals("valueCanonical")) {
1852          this.value = new CanonicalType();
1853          return this.value;
1854        }
1855        else if (name.equals("valueCode")) {
1856          this.value = new CodeType();
1857          return this.value;
1858        }
1859        else if (name.equals("valueDate")) {
1860          this.value = new DateType();
1861          return this.value;
1862        }
1863        else if (name.equals("valueDateTime")) {
1864          this.value = new DateTimeType();
1865          return this.value;
1866        }
1867        else if (name.equals("valueDecimal")) {
1868          this.value = new DecimalType();
1869          return this.value;
1870        }
1871        else if (name.equals("valueId")) {
1872          this.value = new IdType();
1873          return this.value;
1874        }
1875        else if (name.equals("valueInstant")) {
1876          this.value = new InstantType();
1877          return this.value;
1878        }
1879        else if (name.equals("valueInteger")) {
1880          this.value = new IntegerType();
1881          return this.value;
1882        }
1883        else if (name.equals("valueInteger64")) {
1884          this.value = new Integer64Type();
1885          return this.value;
1886        }
1887        else if (name.equals("valueMarkdown")) {
1888          this.value = new MarkdownType();
1889          return this.value;
1890        }
1891        else if (name.equals("valueOid")) {
1892          this.value = new OidType();
1893          return this.value;
1894        }
1895        else if (name.equals("valuePositiveInt")) {
1896          this.value = new PositiveIntType();
1897          return this.value;
1898        }
1899        else if (name.equals("valueString")) {
1900          this.value = new StringType();
1901          return this.value;
1902        }
1903        else if (name.equals("valueTime")) {
1904          this.value = new TimeType();
1905          return this.value;
1906        }
1907        else if (name.equals("valueUnsignedInt")) {
1908          this.value = new UnsignedIntType();
1909          return this.value;
1910        }
1911        else if (name.equals("valueUri")) {
1912          this.value = new UriType();
1913          return this.value;
1914        }
1915        else if (name.equals("valueUrl")) {
1916          this.value = new UrlType();
1917          return this.value;
1918        }
1919        else if (name.equals("valueUuid")) {
1920          this.value = new UuidType();
1921          return this.value;
1922        }
1923        else if (name.equals("valueAddress")) {
1924          this.value = new Address();
1925          return this.value;
1926        }
1927        else if (name.equals("valueAge")) {
1928          this.value = new Age();
1929          return this.value;
1930        }
1931        else if (name.equals("valueAnnotation")) {
1932          this.value = new Annotation();
1933          return this.value;
1934        }
1935        else if (name.equals("valueAttachment")) {
1936          this.value = new Attachment();
1937          return this.value;
1938        }
1939        else if (name.equals("valueCodeableConcept")) {
1940          this.value = new CodeableConcept();
1941          return this.value;
1942        }
1943        else if (name.equals("valueCodeableReference")) {
1944          this.value = new CodeableReference();
1945          return this.value;
1946        }
1947        else if (name.equals("valueCoding")) {
1948          this.value = new Coding();
1949          return this.value;
1950        }
1951        else if (name.equals("valueContactPoint")) {
1952          this.value = new ContactPoint();
1953          return this.value;
1954        }
1955        else if (name.equals("valueCount")) {
1956          this.value = new Count();
1957          return this.value;
1958        }
1959        else if (name.equals("valueDistance")) {
1960          this.value = new Distance();
1961          return this.value;
1962        }
1963        else if (name.equals("valueDuration")) {
1964          this.value = new Duration();
1965          return this.value;
1966        }
1967        else if (name.equals("valueHumanName")) {
1968          this.value = new HumanName();
1969          return this.value;
1970        }
1971        else if (name.equals("valueIdentifier")) {
1972          this.value = new Identifier();
1973          return this.value;
1974        }
1975        else if (name.equals("valueMoney")) {
1976          this.value = new Money();
1977          return this.value;
1978        }
1979        else if (name.equals("valuePeriod")) {
1980          this.value = new Period();
1981          return this.value;
1982        }
1983        else if (name.equals("valueQuantity")) {
1984          this.value = new Quantity();
1985          return this.value;
1986        }
1987        else if (name.equals("valueRange")) {
1988          this.value = new Range();
1989          return this.value;
1990        }
1991        else if (name.equals("valueRatio")) {
1992          this.value = new Ratio();
1993          return this.value;
1994        }
1995        else if (name.equals("valueRatioRange")) {
1996          this.value = new RatioRange();
1997          return this.value;
1998        }
1999        else if (name.equals("valueReference")) {
2000          this.value = new Reference();
2001          return this.value;
2002        }
2003        else if (name.equals("valueSampledData")) {
2004          this.value = new SampledData();
2005          return this.value;
2006        }
2007        else if (name.equals("valueSignature")) {
2008          this.value = new Signature();
2009          return this.value;
2010        }
2011        else if (name.equals("valueTiming")) {
2012          this.value = new Timing();
2013          return this.value;
2014        }
2015        else if (name.equals("valueContactDetail")) {
2016          this.value = new ContactDetail();
2017          return this.value;
2018        }
2019        else if (name.equals("valueDataRequirement")) {
2020          this.value = new DataRequirement();
2021          return this.value;
2022        }
2023        else if (name.equals("valueExpression")) {
2024          this.value = new Expression();
2025          return this.value;
2026        }
2027        else if (name.equals("valueParameterDefinition")) {
2028          this.value = new ParameterDefinition();
2029          return this.value;
2030        }
2031        else if (name.equals("valueRelatedArtifact")) {
2032          this.value = new RelatedArtifact();
2033          return this.value;
2034        }
2035        else if (name.equals("valueTriggerDefinition")) {
2036          this.value = new TriggerDefinition();
2037          return this.value;
2038        }
2039        else if (name.equals("valueUsageContext")) {
2040          this.value = new UsageContext();
2041          return this.value;
2042        }
2043        else if (name.equals("valueAvailability")) {
2044          this.value = new Availability();
2045          return this.value;
2046        }
2047        else if (name.equals("valueExtendedContactDetail")) {
2048          this.value = new ExtendedContactDetail();
2049          return this.value;
2050        }
2051        else if (name.equals("valueDosage")) {
2052          this.value = new Dosage();
2053          return this.value;
2054        }
2055        else if (name.equals("valueMeta")) {
2056          this.value = new Meta();
2057          return this.value;
2058        }
2059        else
2060          return super.addChild(name);
2061      }
2062
2063      public TaskInputComponent copy() {
2064        TaskInputComponent dst = new TaskInputComponent();
2065        copyValues(dst);
2066        return dst;
2067      }
2068
2069      public void copyValues(TaskInputComponent dst) {
2070        super.copyValues(dst);
2071        dst.type = type == null ? null : type.copy();
2072        dst.value = value == null ? null : value.copy();
2073      }
2074
2075      @Override
2076      public boolean equalsDeep(Base other_) {
2077        if (!super.equalsDeep(other_))
2078          return false;
2079        if (!(other_ instanceof TaskInputComponent))
2080          return false;
2081        TaskInputComponent o = (TaskInputComponent) other_;
2082        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true);
2083      }
2084
2085      @Override
2086      public boolean equalsShallow(Base other_) {
2087        if (!super.equalsShallow(other_))
2088          return false;
2089        if (!(other_ instanceof TaskInputComponent))
2090          return false;
2091        TaskInputComponent o = (TaskInputComponent) other_;
2092        return true;
2093      }
2094
2095      public boolean isEmpty() {
2096        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value);
2097      }
2098
2099  public String fhirType() {
2100    return "Task.input";
2101
2102  }
2103
2104  }
2105
2106    @Block()
2107    public static class TaskOutputComponent extends BackboneElement implements IBaseBackboneElement {
2108        /**
2109         * The name of the Output parameter.
2110         */
2111        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2112        @Description(shortDefinition="Label for output", formalDefinition="The name of the Output parameter." )
2113        protected CodeableConcept type;
2114
2115        /**
2116         * The value of the Output parameter as a basic type.
2117         */
2118        @Child(name = "value", type = {Base64BinaryType.class, BooleanType.class, CanonicalType.class, CodeType.class, DateType.class, DateTimeType.class, DecimalType.class, IdType.class, InstantType.class, IntegerType.class, Integer64Type.class, MarkdownType.class, OidType.class, PositiveIntType.class, StringType.class, TimeType.class, UnsignedIntType.class, UriType.class, UrlType.class, UuidType.class, Address.class, Age.class, Annotation.class, Attachment.class, CodeableConcept.class, CodeableReference.class, Coding.class, ContactPoint.class, Count.class, Distance.class, Duration.class, HumanName.class, Identifier.class, Money.class, Period.class, Quantity.class, Range.class, Ratio.class, RatioRange.class, Reference.class, SampledData.class, Signature.class, Timing.class, ContactDetail.class, DataRequirement.class, Expression.class, ParameterDefinition.class, RelatedArtifact.class, TriggerDefinition.class, UsageContext.class, Availability.class, ExtendedContactDetail.class, Dosage.class, Meta.class}, order=2, min=1, max=1, modifier=false, summary=false)
2119        @Description(shortDefinition="Result of output", formalDefinition="The value of the Output parameter as a basic type." )
2120        protected DataType value;
2121
2122        private static final long serialVersionUID = -1659186716L;
2123
2124    /**
2125     * Constructor
2126     */
2127      public TaskOutputComponent() {
2128        super();
2129      }
2130
2131    /**
2132     * Constructor
2133     */
2134      public TaskOutputComponent(CodeableConcept type, DataType value) {
2135        super();
2136        this.setType(type);
2137        this.setValue(value);
2138      }
2139
2140        /**
2141         * @return {@link #type} (The name of the Output parameter.)
2142         */
2143        public CodeableConcept getType() { 
2144          if (this.type == null)
2145            if (Configuration.errorOnAutoCreate())
2146              throw new Error("Attempt to auto-create TaskOutputComponent.type");
2147            else if (Configuration.doAutoCreate())
2148              this.type = new CodeableConcept(); // cc
2149          return this.type;
2150        }
2151
2152        public boolean hasType() { 
2153          return this.type != null && !this.type.isEmpty();
2154        }
2155
2156        /**
2157         * @param value {@link #type} (The name of the Output parameter.)
2158         */
2159        public TaskOutputComponent setType(CodeableConcept value) { 
2160          this.type = value;
2161          return this;
2162        }
2163
2164        /**
2165         * @return {@link #value} (The value of the Output parameter as a basic type.)
2166         */
2167        public DataType getValue() { 
2168          return this.value;
2169        }
2170
2171        /**
2172         * @return {@link #value} (The value of the Output parameter as a basic type.)
2173         */
2174        public Base64BinaryType getValueBase64BinaryType() throws FHIRException { 
2175          if (this.value == null)
2176            this.value = new Base64BinaryType();
2177          if (!(this.value instanceof Base64BinaryType))
2178            throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.value.getClass().getName()+" was encountered");
2179          return (Base64BinaryType) this.value;
2180        }
2181
2182        public boolean hasValueBase64BinaryType() { 
2183          return this != null && this.value instanceof Base64BinaryType;
2184        }
2185
2186        /**
2187         * @return {@link #value} (The value of the Output parameter as a basic type.)
2188         */
2189        public BooleanType getValueBooleanType() throws FHIRException { 
2190          if (this.value == null)
2191            this.value = new BooleanType();
2192          if (!(this.value instanceof BooleanType))
2193            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2194          return (BooleanType) this.value;
2195        }
2196
2197        public boolean hasValueBooleanType() { 
2198          return this != null && this.value instanceof BooleanType;
2199        }
2200
2201        /**
2202         * @return {@link #value} (The value of the Output parameter as a basic type.)
2203         */
2204        public CanonicalType getValueCanonicalType() throws FHIRException { 
2205          if (this.value == null)
2206            this.value = new CanonicalType();
2207          if (!(this.value instanceof CanonicalType))
2208            throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.value.getClass().getName()+" was encountered");
2209          return (CanonicalType) this.value;
2210        }
2211
2212        public boolean hasValueCanonicalType() { 
2213          return this != null && this.value instanceof CanonicalType;
2214        }
2215
2216        /**
2217         * @return {@link #value} (The value of the Output parameter as a basic type.)
2218         */
2219        public CodeType getValueCodeType() throws FHIRException { 
2220          if (this.value == null)
2221            this.value = new CodeType();
2222          if (!(this.value instanceof CodeType))
2223            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
2224          return (CodeType) this.value;
2225        }
2226
2227        public boolean hasValueCodeType() { 
2228          return this != null && this.value instanceof CodeType;
2229        }
2230
2231        /**
2232         * @return {@link #value} (The value of the Output parameter as a basic type.)
2233         */
2234        public DateType getValueDateType() throws FHIRException { 
2235          if (this.value == null)
2236            this.value = new DateType();
2237          if (!(this.value instanceof DateType))
2238            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.value.getClass().getName()+" was encountered");
2239          return (DateType) this.value;
2240        }
2241
2242        public boolean hasValueDateType() { 
2243          return this != null && this.value instanceof DateType;
2244        }
2245
2246        /**
2247         * @return {@link #value} (The value of the Output parameter as a basic type.)
2248         */
2249        public DateTimeType getValueDateTimeType() throws FHIRException { 
2250          if (this.value == null)
2251            this.value = new DateTimeType();
2252          if (!(this.value instanceof DateTimeType))
2253            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2254          return (DateTimeType) this.value;
2255        }
2256
2257        public boolean hasValueDateTimeType() { 
2258          return this != null && this.value instanceof DateTimeType;
2259        }
2260
2261        /**
2262         * @return {@link #value} (The value of the Output parameter as a basic type.)
2263         */
2264        public DecimalType getValueDecimalType() throws FHIRException { 
2265          if (this.value == null)
2266            this.value = new DecimalType();
2267          if (!(this.value instanceof DecimalType))
2268            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
2269          return (DecimalType) this.value;
2270        }
2271
2272        public boolean hasValueDecimalType() { 
2273          return this != null && this.value instanceof DecimalType;
2274        }
2275
2276        /**
2277         * @return {@link #value} (The value of the Output parameter as a basic type.)
2278         */
2279        public IdType getValueIdType() throws FHIRException { 
2280          if (this.value == null)
2281            this.value = new IdType();
2282          if (!(this.value instanceof IdType))
2283            throw new FHIRException("Type mismatch: the type IdType was expected, but "+this.value.getClass().getName()+" was encountered");
2284          return (IdType) this.value;
2285        }
2286
2287        public boolean hasValueIdType() { 
2288          return this != null && this.value instanceof IdType;
2289        }
2290
2291        /**
2292         * @return {@link #value} (The value of the Output parameter as a basic type.)
2293         */
2294        public InstantType getValueInstantType() throws FHIRException { 
2295          if (this.value == null)
2296            this.value = new InstantType();
2297          if (!(this.value instanceof InstantType))
2298            throw new FHIRException("Type mismatch: the type InstantType was expected, but "+this.value.getClass().getName()+" was encountered");
2299          return (InstantType) this.value;
2300        }
2301
2302        public boolean hasValueInstantType() { 
2303          return this != null && this.value instanceof InstantType;
2304        }
2305
2306        /**
2307         * @return {@link #value} (The value of the Output parameter as a basic type.)
2308         */
2309        public IntegerType getValueIntegerType() throws FHIRException { 
2310          if (this.value == null)
2311            this.value = new IntegerType();
2312          if (!(this.value instanceof IntegerType))
2313            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2314          return (IntegerType) this.value;
2315        }
2316
2317        public boolean hasValueIntegerType() { 
2318          return this != null && this.value instanceof IntegerType;
2319        }
2320
2321        /**
2322         * @return {@link #value} (The value of the Output parameter as a basic type.)
2323         */
2324        public Integer64Type getValueInteger64Type() throws FHIRException { 
2325          if (this.value == null)
2326            this.value = new Integer64Type();
2327          if (!(this.value instanceof Integer64Type))
2328            throw new FHIRException("Type mismatch: the type Integer64Type was expected, but "+this.value.getClass().getName()+" was encountered");
2329          return (Integer64Type) this.value;
2330        }
2331
2332        public boolean hasValueInteger64Type() { 
2333          return this != null && this.value instanceof Integer64Type;
2334        }
2335
2336        /**
2337         * @return {@link #value} (The value of the Output parameter as a basic type.)
2338         */
2339        public MarkdownType getValueMarkdownType() throws FHIRException { 
2340          if (this.value == null)
2341            this.value = new MarkdownType();
2342          if (!(this.value instanceof MarkdownType))
2343            throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.value.getClass().getName()+" was encountered");
2344          return (MarkdownType) this.value;
2345        }
2346
2347        public boolean hasValueMarkdownType() { 
2348          return this != null && this.value instanceof MarkdownType;
2349        }
2350
2351        /**
2352         * @return {@link #value} (The value of the Output parameter as a basic type.)
2353         */
2354        public OidType getValueOidType() throws FHIRException { 
2355          if (this.value == null)
2356            this.value = new OidType();
2357          if (!(this.value instanceof OidType))
2358            throw new FHIRException("Type mismatch: the type OidType was expected, but "+this.value.getClass().getName()+" was encountered");
2359          return (OidType) this.value;
2360        }
2361
2362        public boolean hasValueOidType() { 
2363          return this != null && this.value instanceof OidType;
2364        }
2365
2366        /**
2367         * @return {@link #value} (The value of the Output parameter as a basic type.)
2368         */
2369        public PositiveIntType getValuePositiveIntType() throws FHIRException { 
2370          if (this.value == null)
2371            this.value = new PositiveIntType();
2372          if (!(this.value instanceof PositiveIntType))
2373            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.value.getClass().getName()+" was encountered");
2374          return (PositiveIntType) this.value;
2375        }
2376
2377        public boolean hasValuePositiveIntType() { 
2378          return this != null && this.value instanceof PositiveIntType;
2379        }
2380
2381        /**
2382         * @return {@link #value} (The value of the Output parameter as a basic type.)
2383         */
2384        public StringType getValueStringType() throws FHIRException { 
2385          if (this.value == null)
2386            this.value = new StringType();
2387          if (!(this.value instanceof StringType))
2388            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2389          return (StringType) this.value;
2390        }
2391
2392        public boolean hasValueStringType() { 
2393          return this != null && this.value instanceof StringType;
2394        }
2395
2396        /**
2397         * @return {@link #value} (The value of the Output parameter as a basic type.)
2398         */
2399        public TimeType getValueTimeType() throws FHIRException { 
2400          if (this.value == null)
2401            this.value = new TimeType();
2402          if (!(this.value instanceof TimeType))
2403            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2404          return (TimeType) this.value;
2405        }
2406
2407        public boolean hasValueTimeType() { 
2408          return this != null && this.value instanceof TimeType;
2409        }
2410
2411        /**
2412         * @return {@link #value} (The value of the Output parameter as a basic type.)
2413         */
2414        public UnsignedIntType getValueUnsignedIntType() throws FHIRException { 
2415          if (this.value == null)
2416            this.value = new UnsignedIntType();
2417          if (!(this.value instanceof UnsignedIntType))
2418            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.value.getClass().getName()+" was encountered");
2419          return (UnsignedIntType) this.value;
2420        }
2421
2422        public boolean hasValueUnsignedIntType() { 
2423          return this != null && this.value instanceof UnsignedIntType;
2424        }
2425
2426        /**
2427         * @return {@link #value} (The value of the Output parameter as a basic type.)
2428         */
2429        public UriType getValueUriType() throws FHIRException { 
2430          if (this.value == null)
2431            this.value = new UriType();
2432          if (!(this.value instanceof UriType))
2433            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
2434          return (UriType) this.value;
2435        }
2436
2437        public boolean hasValueUriType() { 
2438          return this != null && this.value instanceof UriType;
2439        }
2440
2441        /**
2442         * @return {@link #value} (The value of the Output parameter as a basic type.)
2443         */
2444        public UrlType getValueUrlType() throws FHIRException { 
2445          if (this.value == null)
2446            this.value = new UrlType();
2447          if (!(this.value instanceof UrlType))
2448            throw new FHIRException("Type mismatch: the type UrlType was expected, but "+this.value.getClass().getName()+" was encountered");
2449          return (UrlType) this.value;
2450        }
2451
2452        public boolean hasValueUrlType() { 
2453          return this != null && this.value instanceof UrlType;
2454        }
2455
2456        /**
2457         * @return {@link #value} (The value of the Output parameter as a basic type.)
2458         */
2459        public UuidType getValueUuidType() throws FHIRException { 
2460          if (this.value == null)
2461            this.value = new UuidType();
2462          if (!(this.value instanceof UuidType))
2463            throw new FHIRException("Type mismatch: the type UuidType was expected, but "+this.value.getClass().getName()+" was encountered");
2464          return (UuidType) this.value;
2465        }
2466
2467        public boolean hasValueUuidType() { 
2468          return this != null && this.value instanceof UuidType;
2469        }
2470
2471        /**
2472         * @return {@link #value} (The value of the Output parameter as a basic type.)
2473         */
2474        public Address getValueAddress() throws FHIRException { 
2475          if (this.value == null)
2476            this.value = new Address();
2477          if (!(this.value instanceof Address))
2478            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.value.getClass().getName()+" was encountered");
2479          return (Address) this.value;
2480        }
2481
2482        public boolean hasValueAddress() { 
2483          return this != null && this.value instanceof Address;
2484        }
2485
2486        /**
2487         * @return {@link #value} (The value of the Output parameter as a basic type.)
2488         */
2489        public Age getValueAge() throws FHIRException { 
2490          if (this.value == null)
2491            this.value = new Age();
2492          if (!(this.value instanceof Age))
2493            throw new FHIRException("Type mismatch: the type Age was expected, but "+this.value.getClass().getName()+" was encountered");
2494          return (Age) this.value;
2495        }
2496
2497        public boolean hasValueAge() { 
2498          return this != null && this.value instanceof Age;
2499        }
2500
2501        /**
2502         * @return {@link #value} (The value of the Output parameter as a basic type.)
2503         */
2504        public Annotation getValueAnnotation() throws FHIRException { 
2505          if (this.value == null)
2506            this.value = new Annotation();
2507          if (!(this.value instanceof Annotation))
2508            throw new FHIRException("Type mismatch: the type Annotation was expected, but "+this.value.getClass().getName()+" was encountered");
2509          return (Annotation) this.value;
2510        }
2511
2512        public boolean hasValueAnnotation() { 
2513          return this != null && this.value instanceof Annotation;
2514        }
2515
2516        /**
2517         * @return {@link #value} (The value of the Output parameter as a basic type.)
2518         */
2519        public Attachment getValueAttachment() throws FHIRException { 
2520          if (this.value == null)
2521            this.value = new Attachment();
2522          if (!(this.value instanceof Attachment))
2523            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
2524          return (Attachment) this.value;
2525        }
2526
2527        public boolean hasValueAttachment() { 
2528          return this != null && this.value instanceof Attachment;
2529        }
2530
2531        /**
2532         * @return {@link #value} (The value of the Output parameter as a basic type.)
2533         */
2534        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
2535          if (this.value == null)
2536            this.value = new CodeableConcept();
2537          if (!(this.value instanceof CodeableConcept))
2538            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
2539          return (CodeableConcept) this.value;
2540        }
2541
2542        public boolean hasValueCodeableConcept() { 
2543          return this != null && this.value instanceof CodeableConcept;
2544        }
2545
2546        /**
2547         * @return {@link #value} (The value of the Output parameter as a basic type.)
2548         */
2549        public CodeableReference getValueCodeableReference() throws FHIRException { 
2550          if (this.value == null)
2551            this.value = new CodeableReference();
2552          if (!(this.value instanceof CodeableReference))
2553            throw new FHIRException("Type mismatch: the type CodeableReference was expected, but "+this.value.getClass().getName()+" was encountered");
2554          return (CodeableReference) this.value;
2555        }
2556
2557        public boolean hasValueCodeableReference() { 
2558          return this != null && this.value instanceof CodeableReference;
2559        }
2560
2561        /**
2562         * @return {@link #value} (The value of the Output parameter as a basic type.)
2563         */
2564        public Coding getValueCoding() throws FHIRException { 
2565          if (this.value == null)
2566            this.value = new Coding();
2567          if (!(this.value instanceof Coding))
2568            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
2569          return (Coding) this.value;
2570        }
2571
2572        public boolean hasValueCoding() { 
2573          return this != null && this.value instanceof Coding;
2574        }
2575
2576        /**
2577         * @return {@link #value} (The value of the Output parameter as a basic type.)
2578         */
2579        public ContactPoint getValueContactPoint() throws FHIRException { 
2580          if (this.value == null)
2581            this.value = new ContactPoint();
2582          if (!(this.value instanceof ContactPoint))
2583            throw new FHIRException("Type mismatch: the type ContactPoint was expected, but "+this.value.getClass().getName()+" was encountered");
2584          return (ContactPoint) this.value;
2585        }
2586
2587        public boolean hasValueContactPoint() { 
2588          return this != null && this.value instanceof ContactPoint;
2589        }
2590
2591        /**
2592         * @return {@link #value} (The value of the Output parameter as a basic type.)
2593         */
2594        public Count getValueCount() throws FHIRException { 
2595          if (this.value == null)
2596            this.value = new Count();
2597          if (!(this.value instanceof Count))
2598            throw new FHIRException("Type mismatch: the type Count was expected, but "+this.value.getClass().getName()+" was encountered");
2599          return (Count) this.value;
2600        }
2601
2602        public boolean hasValueCount() { 
2603          return this != null && this.value instanceof Count;
2604        }
2605
2606        /**
2607         * @return {@link #value} (The value of the Output parameter as a basic type.)
2608         */
2609        public Distance getValueDistance() throws FHIRException { 
2610          if (this.value == null)
2611            this.value = new Distance();
2612          if (!(this.value instanceof Distance))
2613            throw new FHIRException("Type mismatch: the type Distance was expected, but "+this.value.getClass().getName()+" was encountered");
2614          return (Distance) this.value;
2615        }
2616
2617        public boolean hasValueDistance() { 
2618          return this != null && this.value instanceof Distance;
2619        }
2620
2621        /**
2622         * @return {@link #value} (The value of the Output parameter as a basic type.)
2623         */
2624        public Duration getValueDuration() throws FHIRException { 
2625          if (this.value == null)
2626            this.value = new Duration();
2627          if (!(this.value instanceof Duration))
2628            throw new FHIRException("Type mismatch: the type Duration was expected, but "+this.value.getClass().getName()+" was encountered");
2629          return (Duration) this.value;
2630        }
2631
2632        public boolean hasValueDuration() { 
2633          return this != null && this.value instanceof Duration;
2634        }
2635
2636        /**
2637         * @return {@link #value} (The value of the Output parameter as a basic type.)
2638         */
2639        public HumanName getValueHumanName() throws FHIRException { 
2640          if (this.value == null)
2641            this.value = new HumanName();
2642          if (!(this.value instanceof HumanName))
2643            throw new FHIRException("Type mismatch: the type HumanName was expected, but "+this.value.getClass().getName()+" was encountered");
2644          return (HumanName) this.value;
2645        }
2646
2647        public boolean hasValueHumanName() { 
2648          return this != null && this.value instanceof HumanName;
2649        }
2650
2651        /**
2652         * @return {@link #value} (The value of the Output parameter as a basic type.)
2653         */
2654        public Identifier getValueIdentifier() throws FHIRException { 
2655          if (this.value == null)
2656            this.value = new Identifier();
2657          if (!(this.value instanceof Identifier))
2658            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.value.getClass().getName()+" was encountered");
2659          return (Identifier) this.value;
2660        }
2661
2662        public boolean hasValueIdentifier() { 
2663          return this != null && this.value instanceof Identifier;
2664        }
2665
2666        /**
2667         * @return {@link #value} (The value of the Output parameter as a basic type.)
2668         */
2669        public Money getValueMoney() throws FHIRException { 
2670          if (this.value == null)
2671            this.value = new Money();
2672          if (!(this.value instanceof Money))
2673            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.value.getClass().getName()+" was encountered");
2674          return (Money) this.value;
2675        }
2676
2677        public boolean hasValueMoney() { 
2678          return this != null && this.value instanceof Money;
2679        }
2680
2681        /**
2682         * @return {@link #value} (The value of the Output parameter as a basic type.)
2683         */
2684        public Period getValuePeriod() throws FHIRException { 
2685          if (this.value == null)
2686            this.value = new Period();
2687          if (!(this.value instanceof Period))
2688            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
2689          return (Period) this.value;
2690        }
2691
2692        public boolean hasValuePeriod() { 
2693          return this != null && this.value instanceof Period;
2694        }
2695
2696        /**
2697         * @return {@link #value} (The value of the Output parameter as a basic type.)
2698         */
2699        public Quantity getValueQuantity() throws FHIRException { 
2700          if (this.value == null)
2701            this.value = new Quantity();
2702          if (!(this.value instanceof Quantity))
2703            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
2704          return (Quantity) this.value;
2705        }
2706
2707        public boolean hasValueQuantity() { 
2708          return this != null && this.value instanceof Quantity;
2709        }
2710
2711        /**
2712         * @return {@link #value} (The value of the Output parameter as a basic type.)
2713         */
2714        public Range getValueRange() throws FHIRException { 
2715          if (this.value == null)
2716            this.value = new Range();
2717          if (!(this.value instanceof Range))
2718            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
2719          return (Range) this.value;
2720        }
2721
2722        public boolean hasValueRange() { 
2723          return this != null && this.value instanceof Range;
2724        }
2725
2726        /**
2727         * @return {@link #value} (The value of the Output parameter as a basic type.)
2728         */
2729        public Ratio getValueRatio() throws FHIRException { 
2730          if (this.value == null)
2731            this.value = new Ratio();
2732          if (!(this.value instanceof Ratio))
2733            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
2734          return (Ratio) this.value;
2735        }
2736
2737        public boolean hasValueRatio() { 
2738          return this != null && this.value instanceof Ratio;
2739        }
2740
2741        /**
2742         * @return {@link #value} (The value of the Output parameter as a basic type.)
2743         */
2744        public RatioRange getValueRatioRange() throws FHIRException { 
2745          if (this.value == null)
2746            this.value = new RatioRange();
2747          if (!(this.value instanceof RatioRange))
2748            throw new FHIRException("Type mismatch: the type RatioRange was expected, but "+this.value.getClass().getName()+" was encountered");
2749          return (RatioRange) this.value;
2750        }
2751
2752        public boolean hasValueRatioRange() { 
2753          return this != null && this.value instanceof RatioRange;
2754        }
2755
2756        /**
2757         * @return {@link #value} (The value of the Output parameter as a basic type.)
2758         */
2759        public Reference getValueReference() throws FHIRException { 
2760          if (this.value == null)
2761            this.value = new Reference();
2762          if (!(this.value instanceof Reference))
2763            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
2764          return (Reference) this.value;
2765        }
2766
2767        public boolean hasValueReference() { 
2768          return this != null && this.value instanceof Reference;
2769        }
2770
2771        /**
2772         * @return {@link #value} (The value of the Output parameter as a basic type.)
2773         */
2774        public SampledData getValueSampledData() throws FHIRException { 
2775          if (this.value == null)
2776            this.value = new SampledData();
2777          if (!(this.value instanceof SampledData))
2778            throw new FHIRException("Type mismatch: the type SampledData was expected, but "+this.value.getClass().getName()+" was encountered");
2779          return (SampledData) this.value;
2780        }
2781
2782        public boolean hasValueSampledData() { 
2783          return this != null && this.value instanceof SampledData;
2784        }
2785
2786        /**
2787         * @return {@link #value} (The value of the Output parameter as a basic type.)
2788         */
2789        public Signature getValueSignature() throws FHIRException { 
2790          if (this.value == null)
2791            this.value = new Signature();
2792          if (!(this.value instanceof Signature))
2793            throw new FHIRException("Type mismatch: the type Signature was expected, but "+this.value.getClass().getName()+" was encountered");
2794          return (Signature) this.value;
2795        }
2796
2797        public boolean hasValueSignature() { 
2798          return this != null && this.value instanceof Signature;
2799        }
2800
2801        /**
2802         * @return {@link #value} (The value of the Output parameter as a basic type.)
2803         */
2804        public Timing getValueTiming() throws FHIRException { 
2805          if (this.value == null)
2806            this.value = new Timing();
2807          if (!(this.value instanceof Timing))
2808            throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.value.getClass().getName()+" was encountered");
2809          return (Timing) this.value;
2810        }
2811
2812        public boolean hasValueTiming() { 
2813          return this != null && this.value instanceof Timing;
2814        }
2815
2816        /**
2817         * @return {@link #value} (The value of the Output parameter as a basic type.)
2818         */
2819        public ContactDetail getValueContactDetail() throws FHIRException { 
2820          if (this.value == null)
2821            this.value = new ContactDetail();
2822          if (!(this.value instanceof ContactDetail))
2823            throw new FHIRException("Type mismatch: the type ContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
2824          return (ContactDetail) this.value;
2825        }
2826
2827        public boolean hasValueContactDetail() { 
2828          return this != null && this.value instanceof ContactDetail;
2829        }
2830
2831        /**
2832         * @return {@link #value} (The value of the Output parameter as a basic type.)
2833         */
2834        public DataRequirement getValueDataRequirement() throws FHIRException { 
2835          if (this.value == null)
2836            this.value = new DataRequirement();
2837          if (!(this.value instanceof DataRequirement))
2838            throw new FHIRException("Type mismatch: the type DataRequirement was expected, but "+this.value.getClass().getName()+" was encountered");
2839          return (DataRequirement) this.value;
2840        }
2841
2842        public boolean hasValueDataRequirement() { 
2843          return this != null && this.value instanceof DataRequirement;
2844        }
2845
2846        /**
2847         * @return {@link #value} (The value of the Output parameter as a basic type.)
2848         */
2849        public Expression getValueExpression() throws FHIRException { 
2850          if (this.value == null)
2851            this.value = new Expression();
2852          if (!(this.value instanceof Expression))
2853            throw new FHIRException("Type mismatch: the type Expression was expected, but "+this.value.getClass().getName()+" was encountered");
2854          return (Expression) this.value;
2855        }
2856
2857        public boolean hasValueExpression() { 
2858          return this != null && this.value instanceof Expression;
2859        }
2860
2861        /**
2862         * @return {@link #value} (The value of the Output parameter as a basic type.)
2863         */
2864        public ParameterDefinition getValueParameterDefinition() throws FHIRException { 
2865          if (this.value == null)
2866            this.value = new ParameterDefinition();
2867          if (!(this.value instanceof ParameterDefinition))
2868            throw new FHIRException("Type mismatch: the type ParameterDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
2869          return (ParameterDefinition) this.value;
2870        }
2871
2872        public boolean hasValueParameterDefinition() { 
2873          return this != null && this.value instanceof ParameterDefinition;
2874        }
2875
2876        /**
2877         * @return {@link #value} (The value of the Output parameter as a basic type.)
2878         */
2879        public RelatedArtifact getValueRelatedArtifact() throws FHIRException { 
2880          if (this.value == null)
2881            this.value = new RelatedArtifact();
2882          if (!(this.value instanceof RelatedArtifact))
2883            throw new FHIRException("Type mismatch: the type RelatedArtifact was expected, but "+this.value.getClass().getName()+" was encountered");
2884          return (RelatedArtifact) this.value;
2885        }
2886
2887        public boolean hasValueRelatedArtifact() { 
2888          return this != null && this.value instanceof RelatedArtifact;
2889        }
2890
2891        /**
2892         * @return {@link #value} (The value of the Output parameter as a basic type.)
2893         */
2894        public TriggerDefinition getValueTriggerDefinition() throws FHIRException { 
2895          if (this.value == null)
2896            this.value = new TriggerDefinition();
2897          if (!(this.value instanceof TriggerDefinition))
2898            throw new FHIRException("Type mismatch: the type TriggerDefinition was expected, but "+this.value.getClass().getName()+" was encountered");
2899          return (TriggerDefinition) this.value;
2900        }
2901
2902        public boolean hasValueTriggerDefinition() { 
2903          return this != null && this.value instanceof TriggerDefinition;
2904        }
2905
2906        /**
2907         * @return {@link #value} (The value of the Output parameter as a basic type.)
2908         */
2909        public UsageContext getValueUsageContext() throws FHIRException { 
2910          if (this.value == null)
2911            this.value = new UsageContext();
2912          if (!(this.value instanceof UsageContext))
2913            throw new FHIRException("Type mismatch: the type UsageContext was expected, but "+this.value.getClass().getName()+" was encountered");
2914          return (UsageContext) this.value;
2915        }
2916
2917        public boolean hasValueUsageContext() { 
2918          return this != null && this.value instanceof UsageContext;
2919        }
2920
2921        /**
2922         * @return {@link #value} (The value of the Output parameter as a basic type.)
2923         */
2924        public Availability getValueAvailability() throws FHIRException { 
2925          if (this.value == null)
2926            this.value = new Availability();
2927          if (!(this.value instanceof Availability))
2928            throw new FHIRException("Type mismatch: the type Availability was expected, but "+this.value.getClass().getName()+" was encountered");
2929          return (Availability) this.value;
2930        }
2931
2932        public boolean hasValueAvailability() { 
2933          return this != null && this.value instanceof Availability;
2934        }
2935
2936        /**
2937         * @return {@link #value} (The value of the Output parameter as a basic type.)
2938         */
2939        public ExtendedContactDetail getValueExtendedContactDetail() throws FHIRException { 
2940          if (this.value == null)
2941            this.value = new ExtendedContactDetail();
2942          if (!(this.value instanceof ExtendedContactDetail))
2943            throw new FHIRException("Type mismatch: the type ExtendedContactDetail was expected, but "+this.value.getClass().getName()+" was encountered");
2944          return (ExtendedContactDetail) this.value;
2945        }
2946
2947        public boolean hasValueExtendedContactDetail() { 
2948          return this != null && this.value instanceof ExtendedContactDetail;
2949        }
2950
2951        /**
2952         * @return {@link #value} (The value of the Output parameter as a basic type.)
2953         */
2954        public Dosage getValueDosage() throws FHIRException { 
2955          if (this.value == null)
2956            this.value = new Dosage();
2957          if (!(this.value instanceof Dosage))
2958            throw new FHIRException("Type mismatch: the type Dosage was expected, but "+this.value.getClass().getName()+" was encountered");
2959          return (Dosage) this.value;
2960        }
2961
2962        public boolean hasValueDosage() { 
2963          return this != null && this.value instanceof Dosage;
2964        }
2965
2966        /**
2967         * @return {@link #value} (The value of the Output parameter as a basic type.)
2968         */
2969        public Meta getValueMeta() throws FHIRException { 
2970          if (this.value == null)
2971            this.value = new Meta();
2972          if (!(this.value instanceof Meta))
2973            throw new FHIRException("Type mismatch: the type Meta was expected, but "+this.value.getClass().getName()+" was encountered");
2974          return (Meta) this.value;
2975        }
2976
2977        public boolean hasValueMeta() { 
2978          return this != null && this.value instanceof Meta;
2979        }
2980
2981        public boolean hasValue() { 
2982          return this.value != null && !this.value.isEmpty();
2983        }
2984
2985        /**
2986         * @param value {@link #value} (The value of the Output parameter as a basic type.)
2987         */
2988        public TaskOutputComponent setValue(DataType value) { 
2989          if (value != null && !(value instanceof Base64BinaryType || value instanceof BooleanType || value instanceof CanonicalType || value instanceof CodeType || value instanceof DateType || value instanceof DateTimeType || value instanceof DecimalType || value instanceof IdType || value instanceof InstantType || value instanceof IntegerType || value instanceof Integer64Type || value instanceof MarkdownType || value instanceof OidType || value instanceof PositiveIntType || value instanceof StringType || value instanceof TimeType || value instanceof UnsignedIntType || value instanceof UriType || value instanceof UrlType || value instanceof UuidType || value instanceof Address || value instanceof Age || value instanceof Annotation || value instanceof Attachment || value instanceof CodeableConcept || value instanceof CodeableReference || value instanceof Coding || value instanceof ContactPoint || value instanceof Count || value instanceof Distance || value instanceof Duration || value instanceof HumanName || value instanceof Identifier || value instanceof Money || value instanceof Period || value instanceof Quantity || value instanceof Range || value instanceof Ratio || value instanceof RatioRange || value instanceof Reference || value instanceof SampledData || value instanceof Signature || value instanceof Timing || value instanceof ContactDetail || value instanceof DataRequirement || value instanceof Expression || value instanceof ParameterDefinition || value instanceof RelatedArtifact || value instanceof TriggerDefinition || value instanceof UsageContext || value instanceof Availability || value instanceof ExtendedContactDetail || value instanceof Dosage || value instanceof Meta))
2990            throw new Error("Not the right type for Task.output.value[x]: "+value.fhirType());
2991          this.value = value;
2992          return this;
2993        }
2994
2995        protected void listChildren(List<Property> children) {
2996          super.listChildren(children);
2997          children.add(new Property("type", "CodeableConcept", "The name of the Output parameter.", 0, 1, type));
2998          children.add(new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the Output parameter as a basic type.", 0, 1, value));
2999        }
3000
3001        @Override
3002        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3003          switch (_hash) {
3004          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The name of the Output parameter.", 0, 1, type);
3005          case -1410166417: /*value[x]*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the Output parameter as a basic type.", 0, 1, value);
3006          case 111972721: /*value*/  return new Property("value[x]", "base64Binary|boolean|canonical|code|date|dateTime|decimal|id|instant|integer|integer64|markdown|oid|positiveInt|string|time|unsignedInt|uri|url|uuid|Address|Age|Annotation|Attachment|CodeableConcept|CodeableReference|Coding|ContactPoint|Count|Distance|Duration|HumanName|Identifier|Money|Period|Quantity|Range|Ratio|RatioRange|Reference|SampledData|Signature|Timing|ContactDetail|DataRequirement|Expression|ParameterDefinition|RelatedArtifact|TriggerDefinition|UsageContext|Availability|ExtendedContactDetail|Dosage|Meta", "The value of the Output parameter as a basic type.", 0, 1, value);
3007          case -1535024575: /*valueBase64Binary*/  return new Property("value[x]", "base64Binary", "The value of the Output parameter as a basic type.", 0, 1, value);
3008          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the Output parameter as a basic type.", 0, 1, value);
3009          case -786218365: /*valueCanonical*/  return new Property("value[x]", "canonical", "The value of the Output parameter as a basic type.", 0, 1, value);
3010          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of the Output parameter as a basic type.", 0, 1, value);
3011          case -766192449: /*valueDate*/  return new Property("value[x]", "date", "The value of the Output parameter as a basic type.", 0, 1, value);
3012          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of the Output parameter as a basic type.", 0, 1, value);
3013          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of the Output parameter as a basic type.", 0, 1, value);
3014          case 231604844: /*valueId*/  return new Property("value[x]", "id", "The value of the Output parameter as a basic type.", 0, 1, value);
3015          case -1668687056: /*valueInstant*/  return new Property("value[x]", "instant", "The value of the Output parameter as a basic type.", 0, 1, value);
3016          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of the Output parameter as a basic type.", 0, 1, value);
3017          case -1122120181: /*valueInteger64*/  return new Property("value[x]", "integer64", "The value of the Output parameter as a basic type.", 0, 1, value);
3018          case -497880704: /*valueMarkdown*/  return new Property("value[x]", "markdown", "The value of the Output parameter as a basic type.", 0, 1, value);
3019          case -1410178407: /*valueOid*/  return new Property("value[x]", "oid", "The value of the Output parameter as a basic type.", 0, 1, value);
3020          case -1249932027: /*valuePositiveInt*/  return new Property("value[x]", "positiveInt", "The value of the Output parameter as a basic type.", 0, 1, value);
3021          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of the Output parameter as a basic type.", 0, 1, value);
3022          case -765708322: /*valueTime*/  return new Property("value[x]", "time", "The value of the Output parameter as a basic type.", 0, 1, value);
3023          case 26529417: /*valueUnsignedInt*/  return new Property("value[x]", "unsignedInt", "The value of the Output parameter as a basic type.", 0, 1, value);
3024          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The value of the Output parameter as a basic type.", 0, 1, value);
3025          case -1410172354: /*valueUrl*/  return new Property("value[x]", "url", "The value of the Output parameter as a basic type.", 0, 1, value);
3026          case -765667124: /*valueUuid*/  return new Property("value[x]", "uuid", "The value of the Output parameter as a basic type.", 0, 1, value);
3027          case -478981821: /*valueAddress*/  return new Property("value[x]", "Address", "The value of the Output parameter as a basic type.", 0, 1, value);
3028          case -1410191922: /*valueAge*/  return new Property("value[x]", "Age", "The value of the Output parameter as a basic type.", 0, 1, value);
3029          case -67108992: /*valueAnnotation*/  return new Property("value[x]", "Annotation", "The value of the Output parameter as a basic type.", 0, 1, value);
3030          case -475566732: /*valueAttachment*/  return new Property("value[x]", "Attachment", "The value of the Output parameter as a basic type.", 0, 1, value);
3031          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The value of the Output parameter as a basic type.", 0, 1, value);
3032          case -257955629: /*valueCodeableReference*/  return new Property("value[x]", "CodeableReference", "The value of the Output parameter as a basic type.", 0, 1, value);
3033          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of the Output parameter as a basic type.", 0, 1, value);
3034          case 944904545: /*valueContactPoint*/  return new Property("value[x]", "ContactPoint", "The value of the Output parameter as a basic type.", 0, 1, value);
3035          case 2017332766: /*valueCount*/  return new Property("value[x]", "Count", "The value of the Output parameter as a basic type.", 0, 1, value);
3036          case -456359802: /*valueDistance*/  return new Property("value[x]", "Distance", "The value of the Output parameter as a basic type.", 0, 1, value);
3037          case 1558135333: /*valueDuration*/  return new Property("value[x]", "Duration", "The value of the Output parameter as a basic type.", 0, 1, value);
3038          case -2026205465: /*valueHumanName*/  return new Property("value[x]", "HumanName", "The value of the Output parameter as a basic type.", 0, 1, value);
3039          case -130498310: /*valueIdentifier*/  return new Property("value[x]", "Identifier", "The value of the Output parameter as a basic type.", 0, 1, value);
3040          case 2026560975: /*valueMoney*/  return new Property("value[x]", "Money", "The value of the Output parameter as a basic type.", 0, 1, value);
3041          case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Period", "The value of the Output parameter as a basic type.", 0, 1, value);
3042          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The value of the Output parameter as a basic type.", 0, 1, value);
3043          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The value of the Output parameter as a basic type.", 0, 1, value);
3044          case 2030767386: /*valueRatio*/  return new Property("value[x]", "Ratio", "The value of the Output parameter as a basic type.", 0, 1, value);
3045          case -706454461: /*valueRatioRange*/  return new Property("value[x]", "RatioRange", "The value of the Output parameter as a basic type.", 0, 1, value);
3046          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference", "The value of the Output parameter as a basic type.", 0, 1, value);
3047          case -962229101: /*valueSampledData*/  return new Property("value[x]", "SampledData", "The value of the Output parameter as a basic type.", 0, 1, value);
3048          case -540985785: /*valueSignature*/  return new Property("value[x]", "Signature", "The value of the Output parameter as a basic type.", 0, 1, value);
3049          case -1406282469: /*valueTiming*/  return new Property("value[x]", "Timing", "The value of the Output parameter as a basic type.", 0, 1, value);
3050          case -1125200224: /*valueContactDetail*/  return new Property("value[x]", "ContactDetail", "The value of the Output parameter as a basic type.", 0, 1, value);
3051          case 1710554248: /*valueDataRequirement*/  return new Property("value[x]", "DataRequirement", "The value of the Output parameter as a basic type.", 0, 1, value);
3052          case -307517719: /*valueExpression*/  return new Property("value[x]", "Expression", "The value of the Output parameter as a basic type.", 0, 1, value);
3053          case 1387478187: /*valueParameterDefinition*/  return new Property("value[x]", "ParameterDefinition", "The value of the Output parameter as a basic type.", 0, 1, value);
3054          case 1748214124: /*valueRelatedArtifact*/  return new Property("value[x]", "RelatedArtifact", "The value of the Output parameter as a basic type.", 0, 1, value);
3055          case 976830394: /*valueTriggerDefinition*/  return new Property("value[x]", "TriggerDefinition", "The value of the Output parameter as a basic type.", 0, 1, value);
3056          case 588000479: /*valueUsageContext*/  return new Property("value[x]", "UsageContext", "The value of the Output parameter as a basic type.", 0, 1, value);
3057          case 1678530924: /*valueAvailability*/  return new Property("value[x]", "Availability", "The value of the Output parameter as a basic type.", 0, 1, value);
3058          case -1567222041: /*valueExtendedContactDetail*/  return new Property("value[x]", "ExtendedContactDetail", "The value of the Output parameter as a basic type.", 0, 1, value);
3059          case -1858636920: /*valueDosage*/  return new Property("value[x]", "Dosage", "The value of the Output parameter as a basic type.", 0, 1, value);
3060          case -765920490: /*valueMeta*/  return new Property("value[x]", "Meta", "The value of the Output parameter as a basic type.", 0, 1, value);
3061          default: return super.getNamedProperty(_hash, _name, _checkValid);
3062          }
3063
3064        }
3065
3066      @Override
3067      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3068        switch (hash) {
3069        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
3070        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
3071        default: return super.getProperty(hash, name, checkValid);
3072        }
3073
3074      }
3075
3076      @Override
3077      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3078        switch (hash) {
3079        case 3575610: // type
3080          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3081          return value;
3082        case 111972721: // value
3083          this.value = TypeConvertor.castToType(value); // DataType
3084          return value;
3085        default: return super.setProperty(hash, name, value);
3086        }
3087
3088      }
3089
3090      @Override
3091      public Base setProperty(String name, Base value) throws FHIRException {
3092        if (name.equals("type")) {
3093          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3094        } else if (name.equals("value[x]")) {
3095          this.value = TypeConvertor.castToType(value); // DataType
3096        } else
3097          return super.setProperty(name, value);
3098        return value;
3099      }
3100
3101      @Override
3102      public Base makeProperty(int hash, String name) throws FHIRException {
3103        switch (hash) {
3104        case 3575610:  return getType();
3105        case -1410166417:  return getValue();
3106        case 111972721:  return getValue();
3107        default: return super.makeProperty(hash, name);
3108        }
3109
3110      }
3111
3112      @Override
3113      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3114        switch (hash) {
3115        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3116        case 111972721: /*value*/ return new String[] {"base64Binary", "boolean", "canonical", "code", "date", "dateTime", "decimal", "id", "instant", "integer", "integer64", "markdown", "oid", "positiveInt", "string", "time", "unsignedInt", "uri", "url", "uuid", "Address", "Age", "Annotation", "Attachment", "CodeableConcept", "CodeableReference", "Coding", "ContactPoint", "Count", "Distance", "Duration", "HumanName", "Identifier", "Money", "Period", "Quantity", "Range", "Ratio", "RatioRange", "Reference", "SampledData", "Signature", "Timing", "ContactDetail", "DataRequirement", "Expression", "ParameterDefinition", "RelatedArtifact", "TriggerDefinition", "UsageContext", "Availability", "ExtendedContactDetail", "Dosage", "Meta"};
3117        default: return super.getTypesForProperty(hash, name);
3118        }
3119
3120      }
3121
3122      @Override
3123      public Base addChild(String name) throws FHIRException {
3124        if (name.equals("type")) {
3125          this.type = new CodeableConcept();
3126          return this.type;
3127        }
3128        else if (name.equals("valueBase64Binary")) {
3129          this.value = new Base64BinaryType();
3130          return this.value;
3131        }
3132        else if (name.equals("valueBoolean")) {
3133          this.value = new BooleanType();
3134          return this.value;
3135        }
3136        else if (name.equals("valueCanonical")) {
3137          this.value = new CanonicalType();
3138          return this.value;
3139        }
3140        else if (name.equals("valueCode")) {
3141          this.value = new CodeType();
3142          return this.value;
3143        }
3144        else if (name.equals("valueDate")) {
3145          this.value = new DateType();
3146          return this.value;
3147        }
3148        else if (name.equals("valueDateTime")) {
3149          this.value = new DateTimeType();
3150          return this.value;
3151        }
3152        else if (name.equals("valueDecimal")) {
3153          this.value = new DecimalType();
3154          return this.value;
3155        }
3156        else if (name.equals("valueId")) {
3157          this.value = new IdType();
3158          return this.value;
3159        }
3160        else if (name.equals("valueInstant")) {
3161          this.value = new InstantType();
3162          return this.value;
3163        }
3164        else if (name.equals("valueInteger")) {
3165          this.value = new IntegerType();
3166          return this.value;
3167        }
3168        else if (name.equals("valueInteger64")) {
3169          this.value = new Integer64Type();
3170          return this.value;
3171        }
3172        else if (name.equals("valueMarkdown")) {
3173          this.value = new MarkdownType();
3174          return this.value;
3175        }
3176        else if (name.equals("valueOid")) {
3177          this.value = new OidType();
3178          return this.value;
3179        }
3180        else if (name.equals("valuePositiveInt")) {
3181          this.value = new PositiveIntType();
3182          return this.value;
3183        }
3184        else if (name.equals("valueString")) {
3185          this.value = new StringType();
3186          return this.value;
3187        }
3188        else if (name.equals("valueTime")) {
3189          this.value = new TimeType();
3190          return this.value;
3191        }
3192        else if (name.equals("valueUnsignedInt")) {
3193          this.value = new UnsignedIntType();
3194          return this.value;
3195        }
3196        else if (name.equals("valueUri")) {
3197          this.value = new UriType();
3198          return this.value;
3199        }
3200        else if (name.equals("valueUrl")) {
3201          this.value = new UrlType();
3202          return this.value;
3203        }
3204        else if (name.equals("valueUuid")) {
3205          this.value = new UuidType();
3206          return this.value;
3207        }
3208        else if (name.equals("valueAddress")) {
3209          this.value = new Address();
3210          return this.value;
3211        }
3212        else if (name.equals("valueAge")) {
3213          this.value = new Age();
3214          return this.value;
3215        }
3216        else if (name.equals("valueAnnotation")) {
3217          this.value = new Annotation();
3218          return this.value;
3219        }
3220        else if (name.equals("valueAttachment")) {
3221          this.value = new Attachment();
3222          return this.value;
3223        }
3224        else if (name.equals("valueCodeableConcept")) {
3225          this.value = new CodeableConcept();
3226          return this.value;
3227        }
3228        else if (name.equals("valueCodeableReference")) {
3229          this.value = new CodeableReference();
3230          return this.value;
3231        }
3232        else if (name.equals("valueCoding")) {
3233          this.value = new Coding();
3234          return this.value;
3235        }
3236        else if (name.equals("valueContactPoint")) {
3237          this.value = new ContactPoint();
3238          return this.value;
3239        }
3240        else if (name.equals("valueCount")) {
3241          this.value = new Count();
3242          return this.value;
3243        }
3244        else if (name.equals("valueDistance")) {
3245          this.value = new Distance();
3246          return this.value;
3247        }
3248        else if (name.equals("valueDuration")) {
3249          this.value = new Duration();
3250          return this.value;
3251        }
3252        else if (name.equals("valueHumanName")) {
3253          this.value = new HumanName();
3254          return this.value;
3255        }
3256        else if (name.equals("valueIdentifier")) {
3257          this.value = new Identifier();
3258          return this.value;
3259        }
3260        else if (name.equals("valueMoney")) {
3261          this.value = new Money();
3262          return this.value;
3263        }
3264        else if (name.equals("valuePeriod")) {
3265          this.value = new Period();
3266          return this.value;
3267        }
3268        else if (name.equals("valueQuantity")) {
3269          this.value = new Quantity();
3270          return this.value;
3271        }
3272        else if (name.equals("valueRange")) {
3273          this.value = new Range();
3274          return this.value;
3275        }
3276        else if (name.equals("valueRatio")) {
3277          this.value = new Ratio();
3278          return this.value;
3279        }
3280        else if (name.equals("valueRatioRange")) {
3281          this.value = new RatioRange();
3282          return this.value;
3283        }
3284        else if (name.equals("valueReference")) {
3285          this.value = new Reference();
3286          return this.value;
3287        }
3288        else if (name.equals("valueSampledData")) {
3289          this.value = new SampledData();
3290          return this.value;
3291        }
3292        else if (name.equals("valueSignature")) {
3293          this.value = new Signature();
3294          return this.value;
3295        }
3296        else if (name.equals("valueTiming")) {
3297          this.value = new Timing();
3298          return this.value;
3299        }
3300        else if (name.equals("valueContactDetail")) {
3301          this.value = new ContactDetail();
3302          return this.value;
3303        }
3304        else if (name.equals("valueDataRequirement")) {
3305          this.value = new DataRequirement();
3306          return this.value;
3307        }
3308        else if (name.equals("valueExpression")) {
3309          this.value = new Expression();
3310          return this.value;
3311        }
3312        else if (name.equals("valueParameterDefinition")) {
3313          this.value = new ParameterDefinition();
3314          return this.value;
3315        }
3316        else if (name.equals("valueRelatedArtifact")) {
3317          this.value = new RelatedArtifact();
3318          return this.value;
3319        }
3320        else if (name.equals("valueTriggerDefinition")) {
3321          this.value = new TriggerDefinition();
3322          return this.value;
3323        }
3324        else if (name.equals("valueUsageContext")) {
3325          this.value = new UsageContext();
3326          return this.value;
3327        }
3328        else if (name.equals("valueAvailability")) {
3329          this.value = new Availability();
3330          return this.value;
3331        }
3332        else if (name.equals("valueExtendedContactDetail")) {
3333          this.value = new ExtendedContactDetail();
3334          return this.value;
3335        }
3336        else if (name.equals("valueDosage")) {
3337          this.value = new Dosage();
3338          return this.value;
3339        }
3340        else if (name.equals("valueMeta")) {
3341          this.value = new Meta();
3342          return this.value;
3343        }
3344        else
3345          return super.addChild(name);
3346      }
3347
3348      public TaskOutputComponent copy() {
3349        TaskOutputComponent dst = new TaskOutputComponent();
3350        copyValues(dst);
3351        return dst;
3352      }
3353
3354      public void copyValues(TaskOutputComponent dst) {
3355        super.copyValues(dst);
3356        dst.type = type == null ? null : type.copy();
3357        dst.value = value == null ? null : value.copy();
3358      }
3359
3360      @Override
3361      public boolean equalsDeep(Base other_) {
3362        if (!super.equalsDeep(other_))
3363          return false;
3364        if (!(other_ instanceof TaskOutputComponent))
3365          return false;
3366        TaskOutputComponent o = (TaskOutputComponent) other_;
3367        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true);
3368      }
3369
3370      @Override
3371      public boolean equalsShallow(Base other_) {
3372        if (!super.equalsShallow(other_))
3373          return false;
3374        if (!(other_ instanceof TaskOutputComponent))
3375          return false;
3376        TaskOutputComponent o = (TaskOutputComponent) other_;
3377        return true;
3378      }
3379
3380      public boolean isEmpty() {
3381        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value);
3382      }
3383
3384  public String fhirType() {
3385    return "Task.output";
3386
3387  }
3388
3389  }
3390
3391    /**
3392     * The business identifier for this task.
3393     */
3394    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3395    @Description(shortDefinition="Task Instance Identifier", formalDefinition="The business identifier for this task." )
3396    protected List<Identifier> identifier;
3397
3398    /**
3399     * The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3400     */
3401    @Child(name = "instantiatesCanonical", type = {CanonicalType.class}, order=1, min=0, max=1, modifier=false, summary=true)
3402    @Description(shortDefinition="Formal definition of task", formalDefinition="The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task." )
3403    protected CanonicalType instantiatesCanonical;
3404
3405    /**
3406     * The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3407     */
3408    @Child(name = "instantiatesUri", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=true)
3409    @Description(shortDefinition="Formal definition of task", formalDefinition="The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task." )
3410    protected UriType instantiatesUri;
3411
3412    /**
3413     * BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a "request" resource such as a ServiceRequest, MedicationRequest, CarePlan, etc. which is distinct from the "request" resource the task is seeking to fulfill.  This latter resource is referenced by focus.  For example, based on a CarePlan (= basedOn), a task is created to fulfill a ServiceRequest ( = focus ) to collect a specimen from a patient.
3414     */
3415    @Child(name = "basedOn", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3416    @Description(shortDefinition="Request fulfilled by this task", formalDefinition="BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a \"request\" resource such as a ServiceRequest, MedicationRequest, CarePlan, etc. which is distinct from the \"request\" resource the task is seeking to fulfill.  This latter resource is referenced by focus.  For example, based on a CarePlan (= basedOn), a task is created to fulfill a ServiceRequest ( = focus ) to collect a specimen from a patient." )
3417    protected List<Reference> basedOn;
3418
3419    /**
3420     * An identifier that links together multiple tasks and other requests that were created in the same context.
3421     */
3422    @Child(name = "groupIdentifier", type = {Identifier.class}, order=4, min=0, max=1, modifier=false, summary=true)
3423    @Description(shortDefinition="Requisition or grouper id", formalDefinition="An identifier that links together multiple tasks and other requests that were created in the same context." )
3424    protected Identifier groupIdentifier;
3425
3426    /**
3427     * Task that this particular task is part of.
3428     */
3429    @Child(name = "partOf", type = {Task.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3430    @Description(shortDefinition="Composite task", formalDefinition="Task that this particular task is part of." )
3431    protected List<Reference> partOf;
3432
3433    /**
3434     * The current status of the task.
3435     */
3436    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
3437    @Description(shortDefinition="draft | requested | received | accepted | +", formalDefinition="The current status of the task." )
3438    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/task-status")
3439    protected Enumeration<TaskStatus> status;
3440
3441    /**
3442     * An explanation as to why this task is held, failed, was refused, etc.
3443     */
3444    @Child(name = "statusReason", type = {CodeableReference.class}, order=7, min=0, max=1, modifier=false, summary=true)
3445    @Description(shortDefinition="Reason for current status", formalDefinition="An explanation as to why this task is held, failed, was refused, etc." )
3446    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/task-status-reason")
3447    protected CodeableReference statusReason;
3448
3449    /**
3450     * Contains business-specific nuances of the business state.
3451     */
3452    @Child(name = "businessStatus", type = {CodeableConcept.class}, order=8, min=0, max=1, modifier=false, summary=true)
3453    @Description(shortDefinition="E.g. \"Specimen collected\", \"IV prepped\"", formalDefinition="Contains business-specific nuances of the business state." )
3454    protected CodeableConcept businessStatus;
3455
3456    /**
3457     * Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.
3458     */
3459    @Child(name = "intent", type = {CodeType.class}, order=9, min=1, max=1, modifier=false, summary=true)
3460    @Description(shortDefinition="unknown | proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option", formalDefinition="Indicates the \"level\" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc." )
3461    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/task-intent")
3462    protected Enumeration<TaskIntent> intent;
3463
3464    /**
3465     * Indicates how quickly the Task should be addressed with respect to other requests.
3466     */
3467    @Child(name = "priority", type = {CodeType.class}, order=10, min=0, max=1, modifier=false, summary=false)
3468    @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Indicates how quickly the Task should be addressed with respect to other requests." )
3469    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
3470    protected Enumeration<RequestPriority> priority;
3471
3472    /**
3473     * If true indicates that the Task is asking for the specified action to *not* occur.
3474     */
3475    @Child(name = "doNotPerform", type = {BooleanType.class}, order=11, min=0, max=1, modifier=true, summary=true)
3476    @Description(shortDefinition="True if Task is prohibiting action", formalDefinition="If true indicates that the Task is asking for the specified action to *not* occur." )
3477    protected BooleanType doNotPerform;
3478
3479    /**
3480     * A name or code (or both) briefly describing what the task involves.
3481     */
3482    @Child(name = "code", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=false, summary=true)
3483    @Description(shortDefinition="Task Type", formalDefinition="A name or code (or both) briefly describing what the task involves." )
3484    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/task-code")
3485    protected CodeableConcept code;
3486
3487    /**
3488     * A free-text description of what is to be performed.
3489     */
3490    @Child(name = "description", type = {StringType.class}, order=13, min=0, max=1, modifier=false, summary=true)
3491    @Description(shortDefinition="Human-readable explanation of task", formalDefinition="A free-text description of what is to be performed." )
3492    protected StringType description;
3493
3494    /**
3495     * The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task.
3496     */
3497    @Child(name = "focus", type = {Reference.class}, order=14, min=0, max=1, modifier=false, summary=true)
3498    @Description(shortDefinition="What task is acting on", formalDefinition="The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task." )
3499    protected Reference focus;
3500
3501    /**
3502     * The entity who benefits from the performance of the service specified in the task (e.g., the patient).
3503     */
3504    @Child(name = "for", type = {Reference.class}, order=15, min=0, max=1, modifier=false, summary=true)
3505    @Description(shortDefinition="Beneficiary of the Task", formalDefinition="The entity who benefits from the performance of the service specified in the task (e.g., the patient)." )
3506    protected Reference for_;
3507
3508    /**
3509     * The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.
3510     */
3511    @Child(name = "encounter", type = {Encounter.class}, order=16, min=0, max=1, modifier=false, summary=true)
3512    @Description(shortDefinition="Healthcare event during which this task originated", formalDefinition="The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created." )
3513    protected Reference encounter;
3514
3515    /**
3516     * Indicates the start and/or end of the period of time when completion of the task is desired to take place.
3517     */
3518    @Child(name = "requestedPeriod", type = {Period.class}, order=17, min=0, max=1, modifier=false, summary=true)
3519    @Description(shortDefinition="When the task should be performed", formalDefinition="Indicates the start and/or end of the period of time when completion of the task is desired to take place." )
3520    protected Period requestedPeriod;
3521
3522    /**
3523     * Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).
3524     */
3525    @Child(name = "executionPeriod", type = {Period.class}, order=18, min=0, max=1, modifier=false, summary=true)
3526    @Description(shortDefinition="Start and end time of execution", formalDefinition="Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end)." )
3527    protected Period executionPeriod;
3528
3529    /**
3530     * The date and time this task was created.
3531     */
3532    @Child(name = "authoredOn", type = {DateTimeType.class}, order=19, min=0, max=1, modifier=false, summary=false)
3533    @Description(shortDefinition="Task Creation Date", formalDefinition="The date and time this task was created." )
3534    protected DateTimeType authoredOn;
3535
3536    /**
3537     * The date and time of last modification to this task.
3538     */
3539    @Child(name = "lastModified", type = {DateTimeType.class}, order=20, min=0, max=1, modifier=false, summary=true)
3540    @Description(shortDefinition="Task Last Modified Date", formalDefinition="The date and time of last modification to this task." )
3541    protected DateTimeType lastModified;
3542
3543    /**
3544     * The creator of the task.
3545     */
3546    @Child(name = "requester", type = {Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class}, order=21, min=0, max=1, modifier=false, summary=true)
3547    @Description(shortDefinition="Who is asking for task to be done", formalDefinition="The creator of the task." )
3548    protected Reference requester;
3549
3550    /**
3551     * The kind of participant or specific participant that should perform the task.
3552     */
3553    @Child(name = "requestedPerformer", type = {CodeableReference.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3554    @Description(shortDefinition="Who should perform Task", formalDefinition="The kind of participant or specific participant that should perform the task." )
3555    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/performer-role")
3556    protected List<CodeableReference> requestedPerformer;
3557
3558    /**
3559     * Individual organization or Device currently responsible for task execution.
3560     */
3561    @Child(name = "owner", type = {Practitioner.class, PractitionerRole.class, Organization.class, CareTeam.class, HealthcareService.class, Patient.class, Device.class, RelatedPerson.class}, order=23, min=0, max=1, modifier=false, summary=true)
3562    @Description(shortDefinition="Responsible individual", formalDefinition="Individual organization or Device currently responsible for task execution." )
3563    protected Reference owner;
3564
3565    /**
3566     * Principal physical location where the this task is performed.
3567     */
3568    @Child(name = "location", type = {Location.class}, order=24, min=0, max=1, modifier=false, summary=true)
3569    @Description(shortDefinition="Where task occurs", formalDefinition="Principal physical location where the this task is performed." )
3570    protected Reference location;
3571
3572    /**
3573     * A description, code, or reference indicating why this task needs to be performed.
3574     */
3575    @Child(name = "reason", type = {CodeableReference.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3576    @Description(shortDefinition="Why task is needed", formalDefinition="A description, code, or reference indicating why this task needs to be performed." )
3577    protected List<CodeableReference> reason;
3578
3579    /**
3580     * Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.
3581     */
3582    @Child(name = "insurance", type = {Coverage.class, ClaimResponse.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3583    @Description(shortDefinition="Associated insurance coverage", formalDefinition="Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task." )
3584    protected List<Reference> insurance;
3585
3586    /**
3587     * Free-text information captured about the task as it progresses.
3588     */
3589    @Child(name = "note", type = {Annotation.class}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3590    @Description(shortDefinition="Comments made about the task", formalDefinition="Free-text information captured about the task as it progresses." )
3591    protected List<Annotation> note;
3592
3593    /**
3594     * Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.
3595     */
3596    @Child(name = "relevantHistory", type = {Provenance.class}, order=28, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3597    @Description(shortDefinition="Key events in history of the Task", formalDefinition="Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task." )
3598    protected List<Reference> relevantHistory;
3599
3600    /**
3601     * If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.
3602     */
3603    @Child(name = "restriction", type = {}, order=29, min=0, max=1, modifier=false, summary=false)
3604    @Description(shortDefinition="Constraints on fulfillment tasks", formalDefinition="If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned." )
3605    protected TaskRestrictionComponent restriction;
3606
3607    /**
3608     * Additional information that may be needed in the execution of the task.
3609     */
3610    @Child(name = "input", type = {}, order=30, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3611    @Description(shortDefinition="Information used to perform task", formalDefinition="Additional information that may be needed in the execution of the task." )
3612    protected List<TaskInputComponent> input;
3613
3614    /**
3615     * Outputs produced by the Task.
3616     */
3617    @Child(name = "output", type = {}, order=31, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3618    @Description(shortDefinition="Information produced as part of task", formalDefinition="Outputs produced by the Task." )
3619    protected List<TaskOutputComponent> output;
3620
3621    private static final long serialVersionUID = -15240003L;
3622
3623  /**
3624   * Constructor
3625   */
3626    public Task() {
3627      super();
3628    }
3629
3630  /**
3631   * Constructor
3632   */
3633    public Task(TaskStatus status, TaskIntent intent) {
3634      super();
3635      this.setStatus(status);
3636      this.setIntent(intent);
3637    }
3638
3639    /**
3640     * @return {@link #identifier} (The business identifier for this task.)
3641     */
3642    public List<Identifier> getIdentifier() { 
3643      if (this.identifier == null)
3644        this.identifier = new ArrayList<Identifier>();
3645      return this.identifier;
3646    }
3647
3648    /**
3649     * @return Returns a reference to <code>this</code> for easy method chaining
3650     */
3651    public Task setIdentifier(List<Identifier> theIdentifier) { 
3652      this.identifier = theIdentifier;
3653      return this;
3654    }
3655
3656    public boolean hasIdentifier() { 
3657      if (this.identifier == null)
3658        return false;
3659      for (Identifier item : this.identifier)
3660        if (!item.isEmpty())
3661          return true;
3662      return false;
3663    }
3664
3665    public Identifier addIdentifier() { //3
3666      Identifier t = new Identifier();
3667      if (this.identifier == null)
3668        this.identifier = new ArrayList<Identifier>();
3669      this.identifier.add(t);
3670      return t;
3671    }
3672
3673    public Task addIdentifier(Identifier t) { //3
3674      if (t == null)
3675        return this;
3676      if (this.identifier == null)
3677        this.identifier = new ArrayList<Identifier>();
3678      this.identifier.add(t);
3679      return this;
3680    }
3681
3682    /**
3683     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
3684     */
3685    public Identifier getIdentifierFirstRep() { 
3686      if (getIdentifier().isEmpty()) {
3687        addIdentifier();
3688      }
3689      return getIdentifier().get(0);
3690    }
3691
3692    /**
3693     * @return {@link #instantiatesCanonical} (The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.). This is the underlying object with id, value and extensions. The accessor "getInstantiatesCanonical" gives direct access to the value
3694     */
3695    public CanonicalType getInstantiatesCanonicalElement() { 
3696      if (this.instantiatesCanonical == null)
3697        if (Configuration.errorOnAutoCreate())
3698          throw new Error("Attempt to auto-create Task.instantiatesCanonical");
3699        else if (Configuration.doAutoCreate())
3700          this.instantiatesCanonical = new CanonicalType(); // bb
3701      return this.instantiatesCanonical;
3702    }
3703
3704    public boolean hasInstantiatesCanonicalElement() { 
3705      return this.instantiatesCanonical != null && !this.instantiatesCanonical.isEmpty();
3706    }
3707
3708    public boolean hasInstantiatesCanonical() { 
3709      return this.instantiatesCanonical != null && !this.instantiatesCanonical.isEmpty();
3710    }
3711
3712    /**
3713     * @param value {@link #instantiatesCanonical} (The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.). This is the underlying object with id, value and extensions. The accessor "getInstantiatesCanonical" gives direct access to the value
3714     */
3715    public Task setInstantiatesCanonicalElement(CanonicalType value) { 
3716      this.instantiatesCanonical = value;
3717      return this;
3718    }
3719
3720    /**
3721     * @return The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3722     */
3723    public String getInstantiatesCanonical() { 
3724      return this.instantiatesCanonical == null ? null : this.instantiatesCanonical.getValue();
3725    }
3726
3727    /**
3728     * @param value The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3729     */
3730    public Task setInstantiatesCanonical(String value) { 
3731      if (Utilities.noString(value))
3732        this.instantiatesCanonical = null;
3733      else {
3734        if (this.instantiatesCanonical == null)
3735          this.instantiatesCanonical = new CanonicalType();
3736        this.instantiatesCanonical.setValue(value);
3737      }
3738      return this;
3739    }
3740
3741    /**
3742     * @return {@link #instantiatesUri} (The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.). This is the underlying object with id, value and extensions. The accessor "getInstantiatesUri" gives direct access to the value
3743     */
3744    public UriType getInstantiatesUriElement() { 
3745      if (this.instantiatesUri == null)
3746        if (Configuration.errorOnAutoCreate())
3747          throw new Error("Attempt to auto-create Task.instantiatesUri");
3748        else if (Configuration.doAutoCreate())
3749          this.instantiatesUri = new UriType(); // bb
3750      return this.instantiatesUri;
3751    }
3752
3753    public boolean hasInstantiatesUriElement() { 
3754      return this.instantiatesUri != null && !this.instantiatesUri.isEmpty();
3755    }
3756
3757    public boolean hasInstantiatesUri() { 
3758      return this.instantiatesUri != null && !this.instantiatesUri.isEmpty();
3759    }
3760
3761    /**
3762     * @param value {@link #instantiatesUri} (The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.). This is the underlying object with id, value and extensions. The accessor "getInstantiatesUri" gives direct access to the value
3763     */
3764    public Task setInstantiatesUriElement(UriType value) { 
3765      this.instantiatesUri = value;
3766      return this;
3767    }
3768
3769    /**
3770     * @return The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3771     */
3772    public String getInstantiatesUri() { 
3773      return this.instantiatesUri == null ? null : this.instantiatesUri.getValue();
3774    }
3775
3776    /**
3777     * @param value The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.
3778     */
3779    public Task setInstantiatesUri(String value) { 
3780      if (Utilities.noString(value))
3781        this.instantiatesUri = null;
3782      else {
3783        if (this.instantiatesUri == null)
3784          this.instantiatesUri = new UriType();
3785        this.instantiatesUri.setValue(value);
3786      }
3787      return this;
3788    }
3789
3790    /**
3791     * @return {@link #basedOn} (BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a "request" resource such as a ServiceRequest, MedicationRequest, CarePlan, etc. which is distinct from the "request" resource the task is seeking to fulfill.  This latter resource is referenced by focus.  For example, based on a CarePlan (= basedOn), a task is created to fulfill a ServiceRequest ( = focus ) to collect a specimen from a patient.)
3792     */
3793    public List<Reference> getBasedOn() { 
3794      if (this.basedOn == null)
3795        this.basedOn = new ArrayList<Reference>();
3796      return this.basedOn;
3797    }
3798
3799    /**
3800     * @return Returns a reference to <code>this</code> for easy method chaining
3801     */
3802    public Task setBasedOn(List<Reference> theBasedOn) { 
3803      this.basedOn = theBasedOn;
3804      return this;
3805    }
3806
3807    public boolean hasBasedOn() { 
3808      if (this.basedOn == null)
3809        return false;
3810      for (Reference item : this.basedOn)
3811        if (!item.isEmpty())
3812          return true;
3813      return false;
3814    }
3815
3816    public Reference addBasedOn() { //3
3817      Reference t = new Reference();
3818      if (this.basedOn == null)
3819        this.basedOn = new ArrayList<Reference>();
3820      this.basedOn.add(t);
3821      return t;
3822    }
3823
3824    public Task addBasedOn(Reference t) { //3
3825      if (t == null)
3826        return this;
3827      if (this.basedOn == null)
3828        this.basedOn = new ArrayList<Reference>();
3829      this.basedOn.add(t);
3830      return this;
3831    }
3832
3833    /**
3834     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
3835     */
3836    public Reference getBasedOnFirstRep() { 
3837      if (getBasedOn().isEmpty()) {
3838        addBasedOn();
3839      }
3840      return getBasedOn().get(0);
3841    }
3842
3843    /**
3844     * @return {@link #groupIdentifier} (An identifier that links together multiple tasks and other requests that were created in the same context.)
3845     */
3846    public Identifier getGroupIdentifier() { 
3847      if (this.groupIdentifier == null)
3848        if (Configuration.errorOnAutoCreate())
3849          throw new Error("Attempt to auto-create Task.groupIdentifier");
3850        else if (Configuration.doAutoCreate())
3851          this.groupIdentifier = new Identifier(); // cc
3852      return this.groupIdentifier;
3853    }
3854
3855    public boolean hasGroupIdentifier() { 
3856      return this.groupIdentifier != null && !this.groupIdentifier.isEmpty();
3857    }
3858
3859    /**
3860     * @param value {@link #groupIdentifier} (An identifier that links together multiple tasks and other requests that were created in the same context.)
3861     */
3862    public Task setGroupIdentifier(Identifier value) { 
3863      this.groupIdentifier = value;
3864      return this;
3865    }
3866
3867    /**
3868     * @return {@link #partOf} (Task that this particular task is part of.)
3869     */
3870    public List<Reference> getPartOf() { 
3871      if (this.partOf == null)
3872        this.partOf = new ArrayList<Reference>();
3873      return this.partOf;
3874    }
3875
3876    /**
3877     * @return Returns a reference to <code>this</code> for easy method chaining
3878     */
3879    public Task setPartOf(List<Reference> thePartOf) { 
3880      this.partOf = thePartOf;
3881      return this;
3882    }
3883
3884    public boolean hasPartOf() { 
3885      if (this.partOf == null)
3886        return false;
3887      for (Reference item : this.partOf)
3888        if (!item.isEmpty())
3889          return true;
3890      return false;
3891    }
3892
3893    public Reference addPartOf() { //3
3894      Reference t = new Reference();
3895      if (this.partOf == null)
3896        this.partOf = new ArrayList<Reference>();
3897      this.partOf.add(t);
3898      return t;
3899    }
3900
3901    public Task addPartOf(Reference t) { //3
3902      if (t == null)
3903        return this;
3904      if (this.partOf == null)
3905        this.partOf = new ArrayList<Reference>();
3906      this.partOf.add(t);
3907      return this;
3908    }
3909
3910    /**
3911     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist {3}
3912     */
3913    public Reference getPartOfFirstRep() { 
3914      if (getPartOf().isEmpty()) {
3915        addPartOf();
3916      }
3917      return getPartOf().get(0);
3918    }
3919
3920    /**
3921     * @return {@link #status} (The current status of the task.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3922     */
3923    public Enumeration<TaskStatus> getStatusElement() { 
3924      if (this.status == null)
3925        if (Configuration.errorOnAutoCreate())
3926          throw new Error("Attempt to auto-create Task.status");
3927        else if (Configuration.doAutoCreate())
3928          this.status = new Enumeration<TaskStatus>(new TaskStatusEnumFactory()); // bb
3929      return this.status;
3930    }
3931
3932    public boolean hasStatusElement() { 
3933      return this.status != null && !this.status.isEmpty();
3934    }
3935
3936    public boolean hasStatus() { 
3937      return this.status != null && !this.status.isEmpty();
3938    }
3939
3940    /**
3941     * @param value {@link #status} (The current status of the task.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3942     */
3943    public Task setStatusElement(Enumeration<TaskStatus> value) { 
3944      this.status = value;
3945      return this;
3946    }
3947
3948    /**
3949     * @return The current status of the task.
3950     */
3951    public TaskStatus getStatus() { 
3952      return this.status == null ? null : this.status.getValue();
3953    }
3954
3955    /**
3956     * @param value The current status of the task.
3957     */
3958    public Task setStatus(TaskStatus value) { 
3959        if (this.status == null)
3960          this.status = new Enumeration<TaskStatus>(new TaskStatusEnumFactory());
3961        this.status.setValue(value);
3962      return this;
3963    }
3964
3965    /**
3966     * @return {@link #statusReason} (An explanation as to why this task is held, failed, was refused, etc.)
3967     */
3968    public CodeableReference getStatusReason() { 
3969      if (this.statusReason == null)
3970        if (Configuration.errorOnAutoCreate())
3971          throw new Error("Attempt to auto-create Task.statusReason");
3972        else if (Configuration.doAutoCreate())
3973          this.statusReason = new CodeableReference(); // cc
3974      return this.statusReason;
3975    }
3976
3977    public boolean hasStatusReason() { 
3978      return this.statusReason != null && !this.statusReason.isEmpty();
3979    }
3980
3981    /**
3982     * @param value {@link #statusReason} (An explanation as to why this task is held, failed, was refused, etc.)
3983     */
3984    public Task setStatusReason(CodeableReference value) { 
3985      this.statusReason = value;
3986      return this;
3987    }
3988
3989    /**
3990     * @return {@link #businessStatus} (Contains business-specific nuances of the business state.)
3991     */
3992    public CodeableConcept getBusinessStatus() { 
3993      if (this.businessStatus == null)
3994        if (Configuration.errorOnAutoCreate())
3995          throw new Error("Attempt to auto-create Task.businessStatus");
3996        else if (Configuration.doAutoCreate())
3997          this.businessStatus = new CodeableConcept(); // cc
3998      return this.businessStatus;
3999    }
4000
4001    public boolean hasBusinessStatus() { 
4002      return this.businessStatus != null && !this.businessStatus.isEmpty();
4003    }
4004
4005    /**
4006     * @param value {@link #businessStatus} (Contains business-specific nuances of the business state.)
4007     */
4008    public Task setBusinessStatus(CodeableConcept value) { 
4009      this.businessStatus = value;
4010      return this;
4011    }
4012
4013    /**
4014     * @return {@link #intent} (Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
4015     */
4016    public Enumeration<TaskIntent> getIntentElement() { 
4017      if (this.intent == null)
4018        if (Configuration.errorOnAutoCreate())
4019          throw new Error("Attempt to auto-create Task.intent");
4020        else if (Configuration.doAutoCreate())
4021          this.intent = new Enumeration<TaskIntent>(new TaskIntentEnumFactory()); // bb
4022      return this.intent;
4023    }
4024
4025    public boolean hasIntentElement() { 
4026      return this.intent != null && !this.intent.isEmpty();
4027    }
4028
4029    public boolean hasIntent() { 
4030      return this.intent != null && !this.intent.isEmpty();
4031    }
4032
4033    /**
4034     * @param value {@link #intent} (Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
4035     */
4036    public Task setIntentElement(Enumeration<TaskIntent> value) { 
4037      this.intent = value;
4038      return this;
4039    }
4040
4041    /**
4042     * @return Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.
4043     */
4044    public TaskIntent getIntent() { 
4045      return this.intent == null ? null : this.intent.getValue();
4046    }
4047
4048    /**
4049     * @param value Indicates the "level" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.
4050     */
4051    public Task setIntent(TaskIntent value) { 
4052        if (this.intent == null)
4053          this.intent = new Enumeration<TaskIntent>(new TaskIntentEnumFactory());
4054        this.intent.setValue(value);
4055      return this;
4056    }
4057
4058    /**
4059     * @return {@link #priority} (Indicates how quickly the Task 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
4060     */
4061    public Enumeration<RequestPriority> getPriorityElement() { 
4062      if (this.priority == null)
4063        if (Configuration.errorOnAutoCreate())
4064          throw new Error("Attempt to auto-create Task.priority");
4065        else if (Configuration.doAutoCreate())
4066          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
4067      return this.priority;
4068    }
4069
4070    public boolean hasPriorityElement() { 
4071      return this.priority != null && !this.priority.isEmpty();
4072    }
4073
4074    public boolean hasPriority() { 
4075      return this.priority != null && !this.priority.isEmpty();
4076    }
4077
4078    /**
4079     * @param value {@link #priority} (Indicates how quickly the Task 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
4080     */
4081    public Task setPriorityElement(Enumeration<RequestPriority> value) { 
4082      this.priority = value;
4083      return this;
4084    }
4085
4086    /**
4087     * @return Indicates how quickly the Task should be addressed with respect to other requests.
4088     */
4089    public RequestPriority getPriority() { 
4090      return this.priority == null ? null : this.priority.getValue();
4091    }
4092
4093    /**
4094     * @param value Indicates how quickly the Task should be addressed with respect to other requests.
4095     */
4096    public Task setPriority(RequestPriority value) { 
4097      if (value == null)
4098        this.priority = null;
4099      else {
4100        if (this.priority == null)
4101          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
4102        this.priority.setValue(value);
4103      }
4104      return this;
4105    }
4106
4107    /**
4108     * @return {@link #doNotPerform} (If true indicates that the Task is asking for the specified action to *not* occur.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
4109     */
4110    public BooleanType getDoNotPerformElement() { 
4111      if (this.doNotPerform == null)
4112        if (Configuration.errorOnAutoCreate())
4113          throw new Error("Attempt to auto-create Task.doNotPerform");
4114        else if (Configuration.doAutoCreate())
4115          this.doNotPerform = new BooleanType(); // bb
4116      return this.doNotPerform;
4117    }
4118
4119    public boolean hasDoNotPerformElement() { 
4120      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
4121    }
4122
4123    public boolean hasDoNotPerform() { 
4124      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
4125    }
4126
4127    /**
4128     * @param value {@link #doNotPerform} (If true indicates that the Task is asking for the specified action to *not* occur.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
4129     */
4130    public Task setDoNotPerformElement(BooleanType value) { 
4131      this.doNotPerform = value;
4132      return this;
4133    }
4134
4135    /**
4136     * @return If true indicates that the Task is asking for the specified action to *not* occur.
4137     */
4138    public boolean getDoNotPerform() { 
4139      return this.doNotPerform == null || this.doNotPerform.isEmpty() ? false : this.doNotPerform.getValue();
4140    }
4141
4142    /**
4143     * @param value If true indicates that the Task is asking for the specified action to *not* occur.
4144     */
4145    public Task setDoNotPerform(boolean value) { 
4146        if (this.doNotPerform == null)
4147          this.doNotPerform = new BooleanType();
4148        this.doNotPerform.setValue(value);
4149      return this;
4150    }
4151
4152    /**
4153     * @return {@link #code} (A name or code (or both) briefly describing what the task involves.)
4154     */
4155    public CodeableConcept getCode() { 
4156      if (this.code == null)
4157        if (Configuration.errorOnAutoCreate())
4158          throw new Error("Attempt to auto-create Task.code");
4159        else if (Configuration.doAutoCreate())
4160          this.code = new CodeableConcept(); // cc
4161      return this.code;
4162    }
4163
4164    public boolean hasCode() { 
4165      return this.code != null && !this.code.isEmpty();
4166    }
4167
4168    /**
4169     * @param value {@link #code} (A name or code (or both) briefly describing what the task involves.)
4170     */
4171    public Task setCode(CodeableConcept value) { 
4172      this.code = value;
4173      return this;
4174    }
4175
4176    /**
4177     * @return {@link #description} (A free-text description of what is to be performed.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4178     */
4179    public StringType getDescriptionElement() { 
4180      if (this.description == null)
4181        if (Configuration.errorOnAutoCreate())
4182          throw new Error("Attempt to auto-create Task.description");
4183        else if (Configuration.doAutoCreate())
4184          this.description = new StringType(); // bb
4185      return this.description;
4186    }
4187
4188    public boolean hasDescriptionElement() { 
4189      return this.description != null && !this.description.isEmpty();
4190    }
4191
4192    public boolean hasDescription() { 
4193      return this.description != null && !this.description.isEmpty();
4194    }
4195
4196    /**
4197     * @param value {@link #description} (A free-text description of what is to be performed.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4198     */
4199    public Task setDescriptionElement(StringType value) { 
4200      this.description = value;
4201      return this;
4202    }
4203
4204    /**
4205     * @return A free-text description of what is to be performed.
4206     */
4207    public String getDescription() { 
4208      return this.description == null ? null : this.description.getValue();
4209    }
4210
4211    /**
4212     * @param value A free-text description of what is to be performed.
4213     */
4214    public Task setDescription(String value) { 
4215      if (Utilities.noString(value))
4216        this.description = null;
4217      else {
4218        if (this.description == null)
4219          this.description = new StringType();
4220        this.description.setValue(value);
4221      }
4222      return this;
4223    }
4224
4225    /**
4226     * @return {@link #focus} (The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task.)
4227     */
4228    public Reference getFocus() { 
4229      if (this.focus == null)
4230        if (Configuration.errorOnAutoCreate())
4231          throw new Error("Attempt to auto-create Task.focus");
4232        else if (Configuration.doAutoCreate())
4233          this.focus = new Reference(); // cc
4234      return this.focus;
4235    }
4236
4237    public boolean hasFocus() { 
4238      return this.focus != null && !this.focus.isEmpty();
4239    }
4240
4241    /**
4242     * @param value {@link #focus} (The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task.)
4243     */
4244    public Task setFocus(Reference value) { 
4245      this.focus = value;
4246      return this;
4247    }
4248
4249    /**
4250     * @return {@link #for_} (The entity who benefits from the performance of the service specified in the task (e.g., the patient).)
4251     */
4252    public Reference getFor() { 
4253      if (this.for_ == null)
4254        if (Configuration.errorOnAutoCreate())
4255          throw new Error("Attempt to auto-create Task.for_");
4256        else if (Configuration.doAutoCreate())
4257          this.for_ = new Reference(); // cc
4258      return this.for_;
4259    }
4260
4261    public boolean hasFor() { 
4262      return this.for_ != null && !this.for_.isEmpty();
4263    }
4264
4265    /**
4266     * @param value {@link #for_} (The entity who benefits from the performance of the service specified in the task (e.g., the patient).)
4267     */
4268    public Task setFor(Reference value) { 
4269      this.for_ = value;
4270      return this;
4271    }
4272
4273    /**
4274     * @return {@link #encounter} (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.)
4275     */
4276    public Reference getEncounter() { 
4277      if (this.encounter == null)
4278        if (Configuration.errorOnAutoCreate())
4279          throw new Error("Attempt to auto-create Task.encounter");
4280        else if (Configuration.doAutoCreate())
4281          this.encounter = new Reference(); // cc
4282      return this.encounter;
4283    }
4284
4285    public boolean hasEncounter() { 
4286      return this.encounter != null && !this.encounter.isEmpty();
4287    }
4288
4289    /**
4290     * @param value {@link #encounter} (The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.)
4291     */
4292    public Task setEncounter(Reference value) { 
4293      this.encounter = value;
4294      return this;
4295    }
4296
4297    /**
4298     * @return {@link #requestedPeriod} (Indicates the start and/or end of the period of time when completion of the task is desired to take place.)
4299     */
4300    public Period getRequestedPeriod() { 
4301      if (this.requestedPeriod == null)
4302        if (Configuration.errorOnAutoCreate())
4303          throw new Error("Attempt to auto-create Task.requestedPeriod");
4304        else if (Configuration.doAutoCreate())
4305          this.requestedPeriod = new Period(); // cc
4306      return this.requestedPeriod;
4307    }
4308
4309    public boolean hasRequestedPeriod() { 
4310      return this.requestedPeriod != null && !this.requestedPeriod.isEmpty();
4311    }
4312
4313    /**
4314     * @param value {@link #requestedPeriod} (Indicates the start and/or end of the period of time when completion of the task is desired to take place.)
4315     */
4316    public Task setRequestedPeriod(Period value) { 
4317      this.requestedPeriod = value;
4318      return this;
4319    }
4320
4321    /**
4322     * @return {@link #executionPeriod} (Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).)
4323     */
4324    public Period getExecutionPeriod() { 
4325      if (this.executionPeriod == null)
4326        if (Configuration.errorOnAutoCreate())
4327          throw new Error("Attempt to auto-create Task.executionPeriod");
4328        else if (Configuration.doAutoCreate())
4329          this.executionPeriod = new Period(); // cc
4330      return this.executionPeriod;
4331    }
4332
4333    public boolean hasExecutionPeriod() { 
4334      return this.executionPeriod != null && !this.executionPeriod.isEmpty();
4335    }
4336
4337    /**
4338     * @param value {@link #executionPeriod} (Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).)
4339     */
4340    public Task setExecutionPeriod(Period value) { 
4341      this.executionPeriod = value;
4342      return this;
4343    }
4344
4345    /**
4346     * @return {@link #authoredOn} (The date and time this task was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
4347     */
4348    public DateTimeType getAuthoredOnElement() { 
4349      if (this.authoredOn == null)
4350        if (Configuration.errorOnAutoCreate())
4351          throw new Error("Attempt to auto-create Task.authoredOn");
4352        else if (Configuration.doAutoCreate())
4353          this.authoredOn = new DateTimeType(); // bb
4354      return this.authoredOn;
4355    }
4356
4357    public boolean hasAuthoredOnElement() { 
4358      return this.authoredOn != null && !this.authoredOn.isEmpty();
4359    }
4360
4361    public boolean hasAuthoredOn() { 
4362      return this.authoredOn != null && !this.authoredOn.isEmpty();
4363    }
4364
4365    /**
4366     * @param value {@link #authoredOn} (The date and time this task was created.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
4367     */
4368    public Task setAuthoredOnElement(DateTimeType value) { 
4369      this.authoredOn = value;
4370      return this;
4371    }
4372
4373    /**
4374     * @return The date and time this task was created.
4375     */
4376    public Date getAuthoredOn() { 
4377      return this.authoredOn == null ? null : this.authoredOn.getValue();
4378    }
4379
4380    /**
4381     * @param value The date and time this task was created.
4382     */
4383    public Task setAuthoredOn(Date value) { 
4384      if (value == null)
4385        this.authoredOn = null;
4386      else {
4387        if (this.authoredOn == null)
4388          this.authoredOn = new DateTimeType();
4389        this.authoredOn.setValue(value);
4390      }
4391      return this;
4392    }
4393
4394    /**
4395     * @return {@link #lastModified} (The date and time of last modification to this task.). This is the underlying object with id, value and extensions. The accessor "getLastModified" gives direct access to the value
4396     */
4397    public DateTimeType getLastModifiedElement() { 
4398      if (this.lastModified == null)
4399        if (Configuration.errorOnAutoCreate())
4400          throw new Error("Attempt to auto-create Task.lastModified");
4401        else if (Configuration.doAutoCreate())
4402          this.lastModified = new DateTimeType(); // bb
4403      return this.lastModified;
4404    }
4405
4406    public boolean hasLastModifiedElement() { 
4407      return this.lastModified != null && !this.lastModified.isEmpty();
4408    }
4409
4410    public boolean hasLastModified() { 
4411      return this.lastModified != null && !this.lastModified.isEmpty();
4412    }
4413
4414    /**
4415     * @param value {@link #lastModified} (The date and time of last modification to this task.). This is the underlying object with id, value and extensions. The accessor "getLastModified" gives direct access to the value
4416     */
4417    public Task setLastModifiedElement(DateTimeType value) { 
4418      this.lastModified = value;
4419      return this;
4420    }
4421
4422    /**
4423     * @return The date and time of last modification to this task.
4424     */
4425    public Date getLastModified() { 
4426      return this.lastModified == null ? null : this.lastModified.getValue();
4427    }
4428
4429    /**
4430     * @param value The date and time of last modification to this task.
4431     */
4432    public Task setLastModified(Date value) { 
4433      if (value == null)
4434        this.lastModified = null;
4435      else {
4436        if (this.lastModified == null)
4437          this.lastModified = new DateTimeType();
4438        this.lastModified.setValue(value);
4439      }
4440      return this;
4441    }
4442
4443    /**
4444     * @return {@link #requester} (The creator of the task.)
4445     */
4446    public Reference getRequester() { 
4447      if (this.requester == null)
4448        if (Configuration.errorOnAutoCreate())
4449          throw new Error("Attempt to auto-create Task.requester");
4450        else if (Configuration.doAutoCreate())
4451          this.requester = new Reference(); // cc
4452      return this.requester;
4453    }
4454
4455    public boolean hasRequester() { 
4456      return this.requester != null && !this.requester.isEmpty();
4457    }
4458
4459    /**
4460     * @param value {@link #requester} (The creator of the task.)
4461     */
4462    public Task setRequester(Reference value) { 
4463      this.requester = value;
4464      return this;
4465    }
4466
4467    /**
4468     * @return {@link #requestedPerformer} (The kind of participant or specific participant that should perform the task.)
4469     */
4470    public List<CodeableReference> getRequestedPerformer() { 
4471      if (this.requestedPerformer == null)
4472        this.requestedPerformer = new ArrayList<CodeableReference>();
4473      return this.requestedPerformer;
4474    }
4475
4476    /**
4477     * @return Returns a reference to <code>this</code> for easy method chaining
4478     */
4479    public Task setRequestedPerformer(List<CodeableReference> theRequestedPerformer) { 
4480      this.requestedPerformer = theRequestedPerformer;
4481      return this;
4482    }
4483
4484    public boolean hasRequestedPerformer() { 
4485      if (this.requestedPerformer == null)
4486        return false;
4487      for (CodeableReference item : this.requestedPerformer)
4488        if (!item.isEmpty())
4489          return true;
4490      return false;
4491    }
4492
4493    public CodeableReference addRequestedPerformer() { //3
4494      CodeableReference t = new CodeableReference();
4495      if (this.requestedPerformer == null)
4496        this.requestedPerformer = new ArrayList<CodeableReference>();
4497      this.requestedPerformer.add(t);
4498      return t;
4499    }
4500
4501    public Task addRequestedPerformer(CodeableReference t) { //3
4502      if (t == null)
4503        return this;
4504      if (this.requestedPerformer == null)
4505        this.requestedPerformer = new ArrayList<CodeableReference>();
4506      this.requestedPerformer.add(t);
4507      return this;
4508    }
4509
4510    /**
4511     * @return The first repetition of repeating field {@link #requestedPerformer}, creating it if it does not already exist {3}
4512     */
4513    public CodeableReference getRequestedPerformerFirstRep() { 
4514      if (getRequestedPerformer().isEmpty()) {
4515        addRequestedPerformer();
4516      }
4517      return getRequestedPerformer().get(0);
4518    }
4519
4520    /**
4521     * @return {@link #owner} (Individual organization or Device currently responsible for task execution.)
4522     */
4523    public Reference getOwner() { 
4524      if (this.owner == null)
4525        if (Configuration.errorOnAutoCreate())
4526          throw new Error("Attempt to auto-create Task.owner");
4527        else if (Configuration.doAutoCreate())
4528          this.owner = new Reference(); // cc
4529      return this.owner;
4530    }
4531
4532    public boolean hasOwner() { 
4533      return this.owner != null && !this.owner.isEmpty();
4534    }
4535
4536    /**
4537     * @param value {@link #owner} (Individual organization or Device currently responsible for task execution.)
4538     */
4539    public Task setOwner(Reference value) { 
4540      this.owner = value;
4541      return this;
4542    }
4543
4544    /**
4545     * @return {@link #location} (Principal physical location where the this task is performed.)
4546     */
4547    public Reference getLocation() { 
4548      if (this.location == null)
4549        if (Configuration.errorOnAutoCreate())
4550          throw new Error("Attempt to auto-create Task.location");
4551        else if (Configuration.doAutoCreate())
4552          this.location = new Reference(); // cc
4553      return this.location;
4554    }
4555
4556    public boolean hasLocation() { 
4557      return this.location != null && !this.location.isEmpty();
4558    }
4559
4560    /**
4561     * @param value {@link #location} (Principal physical location where the this task is performed.)
4562     */
4563    public Task setLocation(Reference value) { 
4564      this.location = value;
4565      return this;
4566    }
4567
4568    /**
4569     * @return {@link #reason} (A description, code, or reference indicating why this task needs to be performed.)
4570     */
4571    public List<CodeableReference> getReason() { 
4572      if (this.reason == null)
4573        this.reason = new ArrayList<CodeableReference>();
4574      return this.reason;
4575    }
4576
4577    /**
4578     * @return Returns a reference to <code>this</code> for easy method chaining
4579     */
4580    public Task setReason(List<CodeableReference> theReason) { 
4581      this.reason = theReason;
4582      return this;
4583    }
4584
4585    public boolean hasReason() { 
4586      if (this.reason == null)
4587        return false;
4588      for (CodeableReference item : this.reason)
4589        if (!item.isEmpty())
4590          return true;
4591      return false;
4592    }
4593
4594    public CodeableReference addReason() { //3
4595      CodeableReference t = new CodeableReference();
4596      if (this.reason == null)
4597        this.reason = new ArrayList<CodeableReference>();
4598      this.reason.add(t);
4599      return t;
4600    }
4601
4602    public Task addReason(CodeableReference t) { //3
4603      if (t == null)
4604        return this;
4605      if (this.reason == null)
4606        this.reason = new ArrayList<CodeableReference>();
4607      this.reason.add(t);
4608      return this;
4609    }
4610
4611    /**
4612     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist {3}
4613     */
4614    public CodeableReference getReasonFirstRep() { 
4615      if (getReason().isEmpty()) {
4616        addReason();
4617      }
4618      return getReason().get(0);
4619    }
4620
4621    /**
4622     * @return {@link #insurance} (Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.)
4623     */
4624    public List<Reference> getInsurance() { 
4625      if (this.insurance == null)
4626        this.insurance = new ArrayList<Reference>();
4627      return this.insurance;
4628    }
4629
4630    /**
4631     * @return Returns a reference to <code>this</code> for easy method chaining
4632     */
4633    public Task setInsurance(List<Reference> theInsurance) { 
4634      this.insurance = theInsurance;
4635      return this;
4636    }
4637
4638    public boolean hasInsurance() { 
4639      if (this.insurance == null)
4640        return false;
4641      for (Reference item : this.insurance)
4642        if (!item.isEmpty())
4643          return true;
4644      return false;
4645    }
4646
4647    public Reference addInsurance() { //3
4648      Reference t = new Reference();
4649      if (this.insurance == null)
4650        this.insurance = new ArrayList<Reference>();
4651      this.insurance.add(t);
4652      return t;
4653    }
4654
4655    public Task addInsurance(Reference t) { //3
4656      if (t == null)
4657        return this;
4658      if (this.insurance == null)
4659        this.insurance = new ArrayList<Reference>();
4660      this.insurance.add(t);
4661      return this;
4662    }
4663
4664    /**
4665     * @return The first repetition of repeating field {@link #insurance}, creating it if it does not already exist {3}
4666     */
4667    public Reference getInsuranceFirstRep() { 
4668      if (getInsurance().isEmpty()) {
4669        addInsurance();
4670      }
4671      return getInsurance().get(0);
4672    }
4673
4674    /**
4675     * @return {@link #note} (Free-text information captured about the task as it progresses.)
4676     */
4677    public List<Annotation> getNote() { 
4678      if (this.note == null)
4679        this.note = new ArrayList<Annotation>();
4680      return this.note;
4681    }
4682
4683    /**
4684     * @return Returns a reference to <code>this</code> for easy method chaining
4685     */
4686    public Task setNote(List<Annotation> theNote) { 
4687      this.note = theNote;
4688      return this;
4689    }
4690
4691    public boolean hasNote() { 
4692      if (this.note == null)
4693        return false;
4694      for (Annotation item : this.note)
4695        if (!item.isEmpty())
4696          return true;
4697      return false;
4698    }
4699
4700    public Annotation addNote() { //3
4701      Annotation t = new Annotation();
4702      if (this.note == null)
4703        this.note = new ArrayList<Annotation>();
4704      this.note.add(t);
4705      return t;
4706    }
4707
4708    public Task addNote(Annotation t) { //3
4709      if (t == null)
4710        return this;
4711      if (this.note == null)
4712        this.note = new ArrayList<Annotation>();
4713      this.note.add(t);
4714      return this;
4715    }
4716
4717    /**
4718     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
4719     */
4720    public Annotation getNoteFirstRep() { 
4721      if (getNote().isEmpty()) {
4722        addNote();
4723      }
4724      return getNote().get(0);
4725    }
4726
4727    /**
4728     * @return {@link #relevantHistory} (Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.)
4729     */
4730    public List<Reference> getRelevantHistory() { 
4731      if (this.relevantHistory == null)
4732        this.relevantHistory = new ArrayList<Reference>();
4733      return this.relevantHistory;
4734    }
4735
4736    /**
4737     * @return Returns a reference to <code>this</code> for easy method chaining
4738     */
4739    public Task setRelevantHistory(List<Reference> theRelevantHistory) { 
4740      this.relevantHistory = theRelevantHistory;
4741      return this;
4742    }
4743
4744    public boolean hasRelevantHistory() { 
4745      if (this.relevantHistory == null)
4746        return false;
4747      for (Reference item : this.relevantHistory)
4748        if (!item.isEmpty())
4749          return true;
4750      return false;
4751    }
4752
4753    public Reference addRelevantHistory() { //3
4754      Reference t = new Reference();
4755      if (this.relevantHistory == null)
4756        this.relevantHistory = new ArrayList<Reference>();
4757      this.relevantHistory.add(t);
4758      return t;
4759    }
4760
4761    public Task addRelevantHistory(Reference t) { //3
4762      if (t == null)
4763        return this;
4764      if (this.relevantHistory == null)
4765        this.relevantHistory = new ArrayList<Reference>();
4766      this.relevantHistory.add(t);
4767      return this;
4768    }
4769
4770    /**
4771     * @return The first repetition of repeating field {@link #relevantHistory}, creating it if it does not already exist {3}
4772     */
4773    public Reference getRelevantHistoryFirstRep() { 
4774      if (getRelevantHistory().isEmpty()) {
4775        addRelevantHistory();
4776      }
4777      return getRelevantHistory().get(0);
4778    }
4779
4780    /**
4781     * @return {@link #restriction} (If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.)
4782     */
4783    public TaskRestrictionComponent getRestriction() { 
4784      if (this.restriction == null)
4785        if (Configuration.errorOnAutoCreate())
4786          throw new Error("Attempt to auto-create Task.restriction");
4787        else if (Configuration.doAutoCreate())
4788          this.restriction = new TaskRestrictionComponent(); // cc
4789      return this.restriction;
4790    }
4791
4792    public boolean hasRestriction() { 
4793      return this.restriction != null && !this.restriction.isEmpty();
4794    }
4795
4796    /**
4797     * @param value {@link #restriction} (If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.)
4798     */
4799    public Task setRestriction(TaskRestrictionComponent value) { 
4800      this.restriction = value;
4801      return this;
4802    }
4803
4804    /**
4805     * @return {@link #input} (Additional information that may be needed in the execution of the task.)
4806     */
4807    public List<TaskInputComponent> getInput() { 
4808      if (this.input == null)
4809        this.input = new ArrayList<TaskInputComponent>();
4810      return this.input;
4811    }
4812
4813    /**
4814     * @return Returns a reference to <code>this</code> for easy method chaining
4815     */
4816    public Task setInput(List<TaskInputComponent> theInput) { 
4817      this.input = theInput;
4818      return this;
4819    }
4820
4821    public boolean hasInput() { 
4822      if (this.input == null)
4823        return false;
4824      for (TaskInputComponent item : this.input)
4825        if (!item.isEmpty())
4826          return true;
4827      return false;
4828    }
4829
4830    public TaskInputComponent addInput() { //3
4831      TaskInputComponent t = new TaskInputComponent();
4832      if (this.input == null)
4833        this.input = new ArrayList<TaskInputComponent>();
4834      this.input.add(t);
4835      return t;
4836    }
4837
4838    public Task addInput(TaskInputComponent t) { //3
4839      if (t == null)
4840        return this;
4841      if (this.input == null)
4842        this.input = new ArrayList<TaskInputComponent>();
4843      this.input.add(t);
4844      return this;
4845    }
4846
4847    /**
4848     * @return The first repetition of repeating field {@link #input}, creating it if it does not already exist {3}
4849     */
4850    public TaskInputComponent getInputFirstRep() { 
4851      if (getInput().isEmpty()) {
4852        addInput();
4853      }
4854      return getInput().get(0);
4855    }
4856
4857    /**
4858     * @return {@link #output} (Outputs produced by the Task.)
4859     */
4860    public List<TaskOutputComponent> getOutput() { 
4861      if (this.output == null)
4862        this.output = new ArrayList<TaskOutputComponent>();
4863      return this.output;
4864    }
4865
4866    /**
4867     * @return Returns a reference to <code>this</code> for easy method chaining
4868     */
4869    public Task setOutput(List<TaskOutputComponent> theOutput) { 
4870      this.output = theOutput;
4871      return this;
4872    }
4873
4874    public boolean hasOutput() { 
4875      if (this.output == null)
4876        return false;
4877      for (TaskOutputComponent item : this.output)
4878        if (!item.isEmpty())
4879          return true;
4880      return false;
4881    }
4882
4883    public TaskOutputComponent addOutput() { //3
4884      TaskOutputComponent t = new TaskOutputComponent();
4885      if (this.output == null)
4886        this.output = new ArrayList<TaskOutputComponent>();
4887      this.output.add(t);
4888      return t;
4889    }
4890
4891    public Task addOutput(TaskOutputComponent t) { //3
4892      if (t == null)
4893        return this;
4894      if (this.output == null)
4895        this.output = new ArrayList<TaskOutputComponent>();
4896      this.output.add(t);
4897      return this;
4898    }
4899
4900    /**
4901     * @return The first repetition of repeating field {@link #output}, creating it if it does not already exist {3}
4902     */
4903    public TaskOutputComponent getOutputFirstRep() { 
4904      if (getOutput().isEmpty()) {
4905        addOutput();
4906      }
4907      return getOutput().get(0);
4908    }
4909
4910      protected void listChildren(List<Property> children) {
4911        super.listChildren(children);
4912        children.add(new Property("identifier", "Identifier", "The business identifier for this task.", 0, java.lang.Integer.MAX_VALUE, identifier));
4913        children.add(new Property("instantiatesCanonical", "canonical(ActivityDefinition)", "The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", 0, 1, instantiatesCanonical));
4914        children.add(new Property("instantiatesUri", "uri", "The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", 0, 1, instantiatesUri));
4915        children.add(new Property("basedOn", "Reference(Any)", "BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a \"request\" resource such as a ServiceRequest, MedicationRequest, CarePlan, etc. which is distinct from the \"request\" resource the task is seeking to fulfill.  This latter resource is referenced by focus.  For example, based on a CarePlan (= basedOn), a task is created to fulfill a ServiceRequest ( = focus ) to collect a specimen from a patient.", 0, java.lang.Integer.MAX_VALUE, basedOn));
4916        children.add(new Property("groupIdentifier", "Identifier", "An identifier that links together multiple tasks and other requests that were created in the same context.", 0, 1, groupIdentifier));
4917        children.add(new Property("partOf", "Reference(Task)", "Task that this particular task is part of.", 0, java.lang.Integer.MAX_VALUE, partOf));
4918        children.add(new Property("status", "code", "The current status of the task.", 0, 1, status));
4919        children.add(new Property("statusReason", "CodeableReference", "An explanation as to why this task is held, failed, was refused, etc.", 0, 1, statusReason));
4920        children.add(new Property("businessStatus", "CodeableConcept", "Contains business-specific nuances of the business state.", 0, 1, businessStatus));
4921        children.add(new Property("intent", "code", "Indicates the \"level\" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.", 0, 1, intent));
4922        children.add(new Property("priority", "code", "Indicates how quickly the Task should be addressed with respect to other requests.", 0, 1, priority));
4923        children.add(new Property("doNotPerform", "boolean", "If true indicates that the Task is asking for the specified action to *not* occur.", 0, 1, doNotPerform));
4924        children.add(new Property("code", "CodeableConcept", "A name or code (or both) briefly describing what the task involves.", 0, 1, code));
4925        children.add(new Property("description", "string", "A free-text description of what is to be performed.", 0, 1, description));
4926        children.add(new Property("focus", "Reference(Any)", "The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task.", 0, 1, focus));
4927        children.add(new Property("for", "Reference(Any)", "The entity who benefits from the performance of the service specified in the task (e.g., the patient).", 0, 1, for_));
4928        children.add(new Property("encounter", "Reference(Encounter)", "The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.", 0, 1, encounter));
4929        children.add(new Property("requestedPeriod", "Period", "Indicates the start and/or end of the period of time when completion of the task is desired to take place.", 0, 1, requestedPeriod));
4930        children.add(new Property("executionPeriod", "Period", "Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).", 0, 1, executionPeriod));
4931        children.add(new Property("authoredOn", "dateTime", "The date and time this task was created.", 0, 1, authoredOn));
4932        children.add(new Property("lastModified", "dateTime", "The date and time of last modification to this task.", 0, 1, lastModified));
4933        children.add(new Property("requester", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "The creator of the task.", 0, 1, requester));
4934        children.add(new Property("requestedPerformer", "CodeableReference(Practitioner|PractitionerRole|Organization|CareTeam|HealthcareService|Patient|Device|RelatedPerson)", "The kind of participant or specific participant that should perform the task.", 0, java.lang.Integer.MAX_VALUE, requestedPerformer));
4935        children.add(new Property("owner", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|HealthcareService|Patient|Device|RelatedPerson)", "Individual organization or Device currently responsible for task execution.", 0, 1, owner));
4936        children.add(new Property("location", "Reference(Location)", "Principal physical location where the this task is performed.", 0, 1, location));
4937        children.add(new Property("reason", "CodeableReference", "A description, code, or reference indicating why this task needs to be performed.", 0, java.lang.Integer.MAX_VALUE, reason));
4938        children.add(new Property("insurance", "Reference(Coverage|ClaimResponse)", "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.", 0, java.lang.Integer.MAX_VALUE, insurance));
4939        children.add(new Property("note", "Annotation", "Free-text information captured about the task as it progresses.", 0, java.lang.Integer.MAX_VALUE, note));
4940        children.add(new Property("relevantHistory", "Reference(Provenance)", "Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.", 0, java.lang.Integer.MAX_VALUE, relevantHistory));
4941        children.add(new Property("restriction", "", "If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.", 0, 1, restriction));
4942        children.add(new Property("input", "", "Additional information that may be needed in the execution of the task.", 0, java.lang.Integer.MAX_VALUE, input));
4943        children.add(new Property("output", "", "Outputs produced by the Task.", 0, java.lang.Integer.MAX_VALUE, output));
4944      }
4945
4946      @Override
4947      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4948        switch (_hash) {
4949        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "The business identifier for this task.", 0, java.lang.Integer.MAX_VALUE, identifier);
4950        case 8911915: /*instantiatesCanonical*/  return new Property("instantiatesCanonical", "canonical(ActivityDefinition)", "The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", 0, 1, instantiatesCanonical);
4951        case -1926393373: /*instantiatesUri*/  return new Property("instantiatesUri", "uri", "The URL pointing to an *externally* maintained  protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", 0, 1, instantiatesUri);
4952        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "BasedOn refers to a higher-level authorization that triggered the creation of the task.  It references a \"request\" resource such as a ServiceRequest, MedicationRequest, CarePlan, etc. which is distinct from the \"request\" resource the task is seeking to fulfill.  This latter resource is referenced by focus.  For example, based on a CarePlan (= basedOn), a task is created to fulfill a ServiceRequest ( = focus ) to collect a specimen from a patient.", 0, java.lang.Integer.MAX_VALUE, basedOn);
4953        case -445338488: /*groupIdentifier*/  return new Property("groupIdentifier", "Identifier", "An identifier that links together multiple tasks and other requests that were created in the same context.", 0, 1, groupIdentifier);
4954        case -995410646: /*partOf*/  return new Property("partOf", "Reference(Task)", "Task that this particular task is part of.", 0, java.lang.Integer.MAX_VALUE, partOf);
4955        case -892481550: /*status*/  return new Property("status", "code", "The current status of the task.", 0, 1, status);
4956        case 2051346646: /*statusReason*/  return new Property("statusReason", "CodeableReference", "An explanation as to why this task is held, failed, was refused, etc.", 0, 1, statusReason);
4957        case 2008591314: /*businessStatus*/  return new Property("businessStatus", "CodeableConcept", "Contains business-specific nuances of the business state.", 0, 1, businessStatus);
4958        case -1183762788: /*intent*/  return new Property("intent", "code", "Indicates the \"level\" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.", 0, 1, intent);
4959        case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the Task should be addressed with respect to other requests.", 0, 1, priority);
4960        case -1788508167: /*doNotPerform*/  return new Property("doNotPerform", "boolean", "If true indicates that the Task is asking for the specified action to *not* occur.", 0, 1, doNotPerform);
4961        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A name or code (or both) briefly describing what the task involves.", 0, 1, code);
4962        case -1724546052: /*description*/  return new Property("description", "string", "A free-text description of what is to be performed.", 0, 1, description);
4963        case 97604824: /*focus*/  return new Property("focus", "Reference(Any)", "The request being fulfilled or the resource being manipulated (changed, suspended, etc.) by this task.", 0, 1, focus);
4964        case 101577: /*for*/  return new Property("for", "Reference(Any)", "The entity who benefits from the performance of the service specified in the task (e.g., the patient).", 0, 1, for_);
4965        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "The healthcare event  (e.g. a patient and healthcare provider interaction) during which this task was created.", 0, 1, encounter);
4966        case -897241393: /*requestedPeriod*/  return new Property("requestedPeriod", "Period", "Indicates the start and/or end of the period of time when completion of the task is desired to take place.", 0, 1, requestedPeriod);
4967        case 1218624249: /*executionPeriod*/  return new Property("executionPeriod", "Period", "Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).", 0, 1, executionPeriod);
4968        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "The date and time this task was created.", 0, 1, authoredOn);
4969        case 1959003007: /*lastModified*/  return new Property("lastModified", "dateTime", "The date and time of last modification to this task.", 0, 1, lastModified);
4970        case 693933948: /*requester*/  return new Property("requester", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson)", "The creator of the task.", 0, 1, requester);
4971        case 2072749056: /*requestedPerformer*/  return new Property("requestedPerformer", "CodeableReference(Practitioner|PractitionerRole|Organization|CareTeam|HealthcareService|Patient|Device|RelatedPerson)", "The kind of participant or specific participant that should perform the task.", 0, java.lang.Integer.MAX_VALUE, requestedPerformer);
4972        case 106164915: /*owner*/  return new Property("owner", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|HealthcareService|Patient|Device|RelatedPerson)", "Individual organization or Device currently responsible for task execution.", 0, 1, owner);
4973        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "Principal physical location where the this task is performed.", 0, 1, location);
4974        case -934964668: /*reason*/  return new Property("reason", "CodeableReference", "A description, code, or reference indicating why this task needs to be performed.", 0, java.lang.Integer.MAX_VALUE, reason);
4975        case 73049818: /*insurance*/  return new Property("insurance", "Reference(Coverage|ClaimResponse)", "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.", 0, java.lang.Integer.MAX_VALUE, insurance);
4976        case 3387378: /*note*/  return new Property("note", "Annotation", "Free-text information captured about the task as it progresses.", 0, java.lang.Integer.MAX_VALUE, note);
4977        case 1538891575: /*relevantHistory*/  return new Property("relevantHistory", "Reference(Provenance)", "Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.", 0, java.lang.Integer.MAX_VALUE, relevantHistory);
4978        case -1561062452: /*restriction*/  return new Property("restriction", "", "If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.", 0, 1, restriction);
4979        case 100358090: /*input*/  return new Property("input", "", "Additional information that may be needed in the execution of the task.", 0, java.lang.Integer.MAX_VALUE, input);
4980        case -1005512447: /*output*/  return new Property("output", "", "Outputs produced by the Task.", 0, java.lang.Integer.MAX_VALUE, output);
4981        default: return super.getNamedProperty(_hash, _name, _checkValid);
4982        }
4983
4984      }
4985
4986      @Override
4987      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4988        switch (hash) {
4989        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4990        case 8911915: /*instantiatesCanonical*/ return this.instantiatesCanonical == null ? new Base[0] : new Base[] {this.instantiatesCanonical}; // CanonicalType
4991        case -1926393373: /*instantiatesUri*/ return this.instantiatesUri == null ? new Base[0] : new Base[] {this.instantiatesUri}; // UriType
4992        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
4993        case -445338488: /*groupIdentifier*/ return this.groupIdentifier == null ? new Base[0] : new Base[] {this.groupIdentifier}; // Identifier
4994        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
4995        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<TaskStatus>
4996        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // CodeableReference
4997        case 2008591314: /*businessStatus*/ return this.businessStatus == null ? new Base[0] : new Base[] {this.businessStatus}; // CodeableConcept
4998        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // Enumeration<TaskIntent>
4999        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
5000        case -1788508167: /*doNotPerform*/ return this.doNotPerform == null ? new Base[0] : new Base[] {this.doNotPerform}; // BooleanType
5001        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
5002        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
5003        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : new Base[] {this.focus}; // Reference
5004        case 101577: /*for*/ return this.for_ == null ? new Base[0] : new Base[] {this.for_}; // Reference
5005        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
5006        case -897241393: /*requestedPeriod*/ return this.requestedPeriod == null ? new Base[0] : new Base[] {this.requestedPeriod}; // Period
5007        case 1218624249: /*executionPeriod*/ return this.executionPeriod == null ? new Base[0] : new Base[] {this.executionPeriod}; // Period
5008        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
5009        case 1959003007: /*lastModified*/ return this.lastModified == null ? new Base[0] : new Base[] {this.lastModified}; // DateTimeType
5010        case 693933948: /*requester*/ return this.requester == null ? new Base[0] : new Base[] {this.requester}; // Reference
5011        case 2072749056: /*requestedPerformer*/ return this.requestedPerformer == null ? new Base[0] : this.requestedPerformer.toArray(new Base[this.requestedPerformer.size()]); // CodeableReference
5012        case 106164915: /*owner*/ return this.owner == null ? new Base[0] : new Base[] {this.owner}; // Reference
5013        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
5014        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableReference
5015        case 73049818: /*insurance*/ return this.insurance == null ? new Base[0] : this.insurance.toArray(new Base[this.insurance.size()]); // Reference
5016        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
5017        case 1538891575: /*relevantHistory*/ return this.relevantHistory == null ? new Base[0] : this.relevantHistory.toArray(new Base[this.relevantHistory.size()]); // Reference
5018        case -1561062452: /*restriction*/ return this.restriction == null ? new Base[0] : new Base[] {this.restriction}; // TaskRestrictionComponent
5019        case 100358090: /*input*/ return this.input == null ? new Base[0] : this.input.toArray(new Base[this.input.size()]); // TaskInputComponent
5020        case -1005512447: /*output*/ return this.output == null ? new Base[0] : this.output.toArray(new Base[this.output.size()]); // TaskOutputComponent
5021        default: return super.getProperty(hash, name, checkValid);
5022        }
5023
5024      }
5025
5026      @Override
5027      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5028        switch (hash) {
5029        case -1618432855: // identifier
5030          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
5031          return value;
5032        case 8911915: // instantiatesCanonical
5033          this.instantiatesCanonical = TypeConvertor.castToCanonical(value); // CanonicalType
5034          return value;
5035        case -1926393373: // instantiatesUri
5036          this.instantiatesUri = TypeConvertor.castToUri(value); // UriType
5037          return value;
5038        case -332612366: // basedOn
5039          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
5040          return value;
5041        case -445338488: // groupIdentifier
5042          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
5043          return value;
5044        case -995410646: // partOf
5045          this.getPartOf().add(TypeConvertor.castToReference(value)); // Reference
5046          return value;
5047        case -892481550: // status
5048          value = new TaskStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5049          this.status = (Enumeration) value; // Enumeration<TaskStatus>
5050          return value;
5051        case 2051346646: // statusReason
5052          this.statusReason = TypeConvertor.castToCodeableReference(value); // CodeableReference
5053          return value;
5054        case 2008591314: // businessStatus
5055          this.businessStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5056          return value;
5057        case -1183762788: // intent
5058          value = new TaskIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
5059          this.intent = (Enumeration) value; // Enumeration<TaskIntent>
5060          return value;
5061        case -1165461084: // priority
5062          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
5063          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
5064          return value;
5065        case -1788508167: // doNotPerform
5066          this.doNotPerform = TypeConvertor.castToBoolean(value); // BooleanType
5067          return value;
5068        case 3059181: // code
5069          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5070          return value;
5071        case -1724546052: // description
5072          this.description = TypeConvertor.castToString(value); // StringType
5073          return value;
5074        case 97604824: // focus
5075          this.focus = TypeConvertor.castToReference(value); // Reference
5076          return value;
5077        case 101577: // for
5078          this.for_ = TypeConvertor.castToReference(value); // Reference
5079          return value;
5080        case 1524132147: // encounter
5081          this.encounter = TypeConvertor.castToReference(value); // Reference
5082          return value;
5083        case -897241393: // requestedPeriod
5084          this.requestedPeriod = TypeConvertor.castToPeriod(value); // Period
5085          return value;
5086        case 1218624249: // executionPeriod
5087          this.executionPeriod = TypeConvertor.castToPeriod(value); // Period
5088          return value;
5089        case -1500852503: // authoredOn
5090          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
5091          return value;
5092        case 1959003007: // lastModified
5093          this.lastModified = TypeConvertor.castToDateTime(value); // DateTimeType
5094          return value;
5095        case 693933948: // requester
5096          this.requester = TypeConvertor.castToReference(value); // Reference
5097          return value;
5098        case 2072749056: // requestedPerformer
5099          this.getRequestedPerformer().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
5100          return value;
5101        case 106164915: // owner
5102          this.owner = TypeConvertor.castToReference(value); // Reference
5103          return value;
5104        case 1901043637: // location
5105          this.location = TypeConvertor.castToReference(value); // Reference
5106          return value;
5107        case -934964668: // reason
5108          this.getReason().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
5109          return value;
5110        case 73049818: // insurance
5111          this.getInsurance().add(TypeConvertor.castToReference(value)); // Reference
5112          return value;
5113        case 3387378: // note
5114          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
5115          return value;
5116        case 1538891575: // relevantHistory
5117          this.getRelevantHistory().add(TypeConvertor.castToReference(value)); // Reference
5118          return value;
5119        case -1561062452: // restriction
5120          this.restriction = (TaskRestrictionComponent) value; // TaskRestrictionComponent
5121          return value;
5122        case 100358090: // input
5123          this.getInput().add((TaskInputComponent) value); // TaskInputComponent
5124          return value;
5125        case -1005512447: // output
5126          this.getOutput().add((TaskOutputComponent) value); // TaskOutputComponent
5127          return value;
5128        default: return super.setProperty(hash, name, value);
5129        }
5130
5131      }
5132
5133      @Override
5134      public Base setProperty(String name, Base value) throws FHIRException {
5135        if (name.equals("identifier")) {
5136          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
5137        } else if (name.equals("instantiatesCanonical")) {
5138          this.instantiatesCanonical = TypeConvertor.castToCanonical(value); // CanonicalType
5139        } else if (name.equals("instantiatesUri")) {
5140          this.instantiatesUri = TypeConvertor.castToUri(value); // UriType
5141        } else if (name.equals("basedOn")) {
5142          this.getBasedOn().add(TypeConvertor.castToReference(value));
5143        } else if (name.equals("groupIdentifier")) {
5144          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
5145        } else if (name.equals("partOf")) {
5146          this.getPartOf().add(TypeConvertor.castToReference(value));
5147        } else if (name.equals("status")) {
5148          value = new TaskStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5149          this.status = (Enumeration) value; // Enumeration<TaskStatus>
5150        } else if (name.equals("statusReason")) {
5151          this.statusReason = TypeConvertor.castToCodeableReference(value); // CodeableReference
5152        } else if (name.equals("businessStatus")) {
5153          this.businessStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5154        } else if (name.equals("intent")) {
5155          value = new TaskIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
5156          this.intent = (Enumeration) value; // Enumeration<TaskIntent>
5157        } else if (name.equals("priority")) {
5158          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
5159          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
5160        } else if (name.equals("doNotPerform")) {
5161          this.doNotPerform = TypeConvertor.castToBoolean(value); // BooleanType
5162        } else if (name.equals("code")) {
5163          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5164        } else if (name.equals("description")) {
5165          this.description = TypeConvertor.castToString(value); // StringType
5166        } else if (name.equals("focus")) {
5167          this.focus = TypeConvertor.castToReference(value); // Reference
5168        } else if (name.equals("for")) {
5169          this.for_ = TypeConvertor.castToReference(value); // Reference
5170        } else if (name.equals("encounter")) {
5171          this.encounter = TypeConvertor.castToReference(value); // Reference
5172        } else if (name.equals("requestedPeriod")) {
5173          this.requestedPeriod = TypeConvertor.castToPeriod(value); // Period
5174        } else if (name.equals("executionPeriod")) {
5175          this.executionPeriod = TypeConvertor.castToPeriod(value); // Period
5176        } else if (name.equals("authoredOn")) {
5177          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
5178        } else if (name.equals("lastModified")) {
5179          this.lastModified = TypeConvertor.castToDateTime(value); // DateTimeType
5180        } else if (name.equals("requester")) {
5181          this.requester = TypeConvertor.castToReference(value); // Reference
5182        } else if (name.equals("requestedPerformer")) {
5183          this.getRequestedPerformer().add(TypeConvertor.castToCodeableReference(value));
5184        } else if (name.equals("owner")) {
5185          this.owner = TypeConvertor.castToReference(value); // Reference
5186        } else if (name.equals("location")) {
5187          this.location = TypeConvertor.castToReference(value); // Reference
5188        } else if (name.equals("reason")) {
5189          this.getReason().add(TypeConvertor.castToCodeableReference(value));
5190        } else if (name.equals("insurance")) {
5191          this.getInsurance().add(TypeConvertor.castToReference(value));
5192        } else if (name.equals("note")) {
5193          this.getNote().add(TypeConvertor.castToAnnotation(value));
5194        } else if (name.equals("relevantHistory")) {
5195          this.getRelevantHistory().add(TypeConvertor.castToReference(value));
5196        } else if (name.equals("restriction")) {
5197          this.restriction = (TaskRestrictionComponent) value; // TaskRestrictionComponent
5198        } else if (name.equals("input")) {
5199          this.getInput().add((TaskInputComponent) value);
5200        } else if (name.equals("output")) {
5201          this.getOutput().add((TaskOutputComponent) value);
5202        } else
5203          return super.setProperty(name, value);
5204        return value;
5205      }
5206
5207      @Override
5208      public Base makeProperty(int hash, String name) throws FHIRException {
5209        switch (hash) {
5210        case -1618432855:  return addIdentifier(); 
5211        case 8911915:  return getInstantiatesCanonicalElement();
5212        case -1926393373:  return getInstantiatesUriElement();
5213        case -332612366:  return addBasedOn(); 
5214        case -445338488:  return getGroupIdentifier();
5215        case -995410646:  return addPartOf(); 
5216        case -892481550:  return getStatusElement();
5217        case 2051346646:  return getStatusReason();
5218        case 2008591314:  return getBusinessStatus();
5219        case -1183762788:  return getIntentElement();
5220        case -1165461084:  return getPriorityElement();
5221        case -1788508167:  return getDoNotPerformElement();
5222        case 3059181:  return getCode();
5223        case -1724546052:  return getDescriptionElement();
5224        case 97604824:  return getFocus();
5225        case 101577:  return getFor();
5226        case 1524132147:  return getEncounter();
5227        case -897241393:  return getRequestedPeriod();
5228        case 1218624249:  return getExecutionPeriod();
5229        case -1500852503:  return getAuthoredOnElement();
5230        case 1959003007:  return getLastModifiedElement();
5231        case 693933948:  return getRequester();
5232        case 2072749056:  return addRequestedPerformer(); 
5233        case 106164915:  return getOwner();
5234        case 1901043637:  return getLocation();
5235        case -934964668:  return addReason(); 
5236        case 73049818:  return addInsurance(); 
5237        case 3387378:  return addNote(); 
5238        case 1538891575:  return addRelevantHistory(); 
5239        case -1561062452:  return getRestriction();
5240        case 100358090:  return addInput(); 
5241        case -1005512447:  return addOutput(); 
5242        default: return super.makeProperty(hash, name);
5243        }
5244
5245      }
5246
5247      @Override
5248      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5249        switch (hash) {
5250        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
5251        case 8911915: /*instantiatesCanonical*/ return new String[] {"canonical"};
5252        case -1926393373: /*instantiatesUri*/ return new String[] {"uri"};
5253        case -332612366: /*basedOn*/ return new String[] {"Reference"};
5254        case -445338488: /*groupIdentifier*/ return new String[] {"Identifier"};
5255        case -995410646: /*partOf*/ return new String[] {"Reference"};
5256        case -892481550: /*status*/ return new String[] {"code"};
5257        case 2051346646: /*statusReason*/ return new String[] {"CodeableReference"};
5258        case 2008591314: /*businessStatus*/ return new String[] {"CodeableConcept"};
5259        case -1183762788: /*intent*/ return new String[] {"code"};
5260        case -1165461084: /*priority*/ return new String[] {"code"};
5261        case -1788508167: /*doNotPerform*/ return new String[] {"boolean"};
5262        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
5263        case -1724546052: /*description*/ return new String[] {"string"};
5264        case 97604824: /*focus*/ return new String[] {"Reference"};
5265        case 101577: /*for*/ return new String[] {"Reference"};
5266        case 1524132147: /*encounter*/ return new String[] {"Reference"};
5267        case -897241393: /*requestedPeriod*/ return new String[] {"Period"};
5268        case 1218624249: /*executionPeriod*/ return new String[] {"Period"};
5269        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
5270        case 1959003007: /*lastModified*/ return new String[] {"dateTime"};
5271        case 693933948: /*requester*/ return new String[] {"Reference"};
5272        case 2072749056: /*requestedPerformer*/ return new String[] {"CodeableReference"};
5273        case 106164915: /*owner*/ return new String[] {"Reference"};
5274        case 1901043637: /*location*/ return new String[] {"Reference"};
5275        case -934964668: /*reason*/ return new String[] {"CodeableReference"};
5276        case 73049818: /*insurance*/ return new String[] {"Reference"};
5277        case 3387378: /*note*/ return new String[] {"Annotation"};
5278        case 1538891575: /*relevantHistory*/ return new String[] {"Reference"};
5279        case -1561062452: /*restriction*/ return new String[] {};
5280        case 100358090: /*input*/ return new String[] {};
5281        case -1005512447: /*output*/ return new String[] {};
5282        default: return super.getTypesForProperty(hash, name);
5283        }
5284
5285      }
5286
5287      @Override
5288      public Base addChild(String name) throws FHIRException {
5289        if (name.equals("identifier")) {
5290          return addIdentifier();
5291        }
5292        else if (name.equals("instantiatesCanonical")) {
5293          throw new FHIRException("Cannot call addChild on a primitive type Task.instantiatesCanonical");
5294        }
5295        else if (name.equals("instantiatesUri")) {
5296          throw new FHIRException("Cannot call addChild on a primitive type Task.instantiatesUri");
5297        }
5298        else if (name.equals("basedOn")) {
5299          return addBasedOn();
5300        }
5301        else if (name.equals("groupIdentifier")) {
5302          this.groupIdentifier = new Identifier();
5303          return this.groupIdentifier;
5304        }
5305        else if (name.equals("partOf")) {
5306          return addPartOf();
5307        }
5308        else if (name.equals("status")) {
5309          throw new FHIRException("Cannot call addChild on a primitive type Task.status");
5310        }
5311        else if (name.equals("statusReason")) {
5312          this.statusReason = new CodeableReference();
5313          return this.statusReason;
5314        }
5315        else if (name.equals("businessStatus")) {
5316          this.businessStatus = new CodeableConcept();
5317          return this.businessStatus;
5318        }
5319        else if (name.equals("intent")) {
5320          throw new FHIRException("Cannot call addChild on a primitive type Task.intent");
5321        }
5322        else if (name.equals("priority")) {
5323          throw new FHIRException("Cannot call addChild on a primitive type Task.priority");
5324        }
5325        else if (name.equals("doNotPerform")) {
5326          throw new FHIRException("Cannot call addChild on a primitive type Task.doNotPerform");
5327        }
5328        else if (name.equals("code")) {
5329          this.code = new CodeableConcept();
5330          return this.code;
5331        }
5332        else if (name.equals("description")) {
5333          throw new FHIRException("Cannot call addChild on a primitive type Task.description");
5334        }
5335        else if (name.equals("focus")) {
5336          this.focus = new Reference();
5337          return this.focus;
5338        }
5339        else if (name.equals("for")) {
5340          this.for_ = new Reference();
5341          return this.for_;
5342        }
5343        else if (name.equals("encounter")) {
5344          this.encounter = new Reference();
5345          return this.encounter;
5346        }
5347        else if (name.equals("requestedPeriod")) {
5348          this.requestedPeriod = new Period();
5349          return this.requestedPeriod;
5350        }
5351        else if (name.equals("executionPeriod")) {
5352          this.executionPeriod = new Period();
5353          return this.executionPeriod;
5354        }
5355        else if (name.equals("authoredOn")) {
5356          throw new FHIRException("Cannot call addChild on a primitive type Task.authoredOn");
5357        }
5358        else if (name.equals("lastModified")) {
5359          throw new FHIRException("Cannot call addChild on a primitive type Task.lastModified");
5360        }
5361        else if (name.equals("requester")) {
5362          this.requester = new Reference();
5363          return this.requester;
5364        }
5365        else if (name.equals("requestedPerformer")) {
5366          return addRequestedPerformer();
5367        }
5368        else if (name.equals("owner")) {
5369          this.owner = new Reference();
5370          return this.owner;
5371        }
5372        else if (name.equals("location")) {
5373          this.location = new Reference();
5374          return this.location;
5375        }
5376        else if (name.equals("reason")) {
5377          return addReason();
5378        }
5379        else if (name.equals("insurance")) {
5380          return addInsurance();
5381        }
5382        else if (name.equals("note")) {
5383          return addNote();
5384        }
5385        else if (name.equals("relevantHistory")) {
5386          return addRelevantHistory();
5387        }
5388        else if (name.equals("restriction")) {
5389          this.restriction = new TaskRestrictionComponent();
5390          return this.restriction;
5391        }
5392        else if (name.equals("input")) {
5393          return addInput();
5394        }
5395        else if (name.equals("output")) {
5396          return addOutput();
5397        }
5398        else
5399          return super.addChild(name);
5400      }
5401
5402  public String fhirType() {
5403    return "Task";
5404
5405  }
5406
5407      public Task copy() {
5408        Task dst = new Task();
5409        copyValues(dst);
5410        return dst;
5411      }
5412
5413      public void copyValues(Task dst) {
5414        super.copyValues(dst);
5415        if (identifier != null) {
5416          dst.identifier = new ArrayList<Identifier>();
5417          for (Identifier i : identifier)
5418            dst.identifier.add(i.copy());
5419        };
5420        dst.instantiatesCanonical = instantiatesCanonical == null ? null : instantiatesCanonical.copy();
5421        dst.instantiatesUri = instantiatesUri == null ? null : instantiatesUri.copy();
5422        if (basedOn != null) {
5423          dst.basedOn = new ArrayList<Reference>();
5424          for (Reference i : basedOn)
5425            dst.basedOn.add(i.copy());
5426        };
5427        dst.groupIdentifier = groupIdentifier == null ? null : groupIdentifier.copy();
5428        if (partOf != null) {
5429          dst.partOf = new ArrayList<Reference>();
5430          for (Reference i : partOf)
5431            dst.partOf.add(i.copy());
5432        };
5433        dst.status = status == null ? null : status.copy();
5434        dst.statusReason = statusReason == null ? null : statusReason.copy();
5435        dst.businessStatus = businessStatus == null ? null : businessStatus.copy();
5436        dst.intent = intent == null ? null : intent.copy();
5437        dst.priority = priority == null ? null : priority.copy();
5438        dst.doNotPerform = doNotPerform == null ? null : doNotPerform.copy();
5439        dst.code = code == null ? null : code.copy();
5440        dst.description = description == null ? null : description.copy();
5441        dst.focus = focus == null ? null : focus.copy();
5442        dst.for_ = for_ == null ? null : for_.copy();
5443        dst.encounter = encounter == null ? null : encounter.copy();
5444        dst.requestedPeriod = requestedPeriod == null ? null : requestedPeriod.copy();
5445        dst.executionPeriod = executionPeriod == null ? null : executionPeriod.copy();
5446        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
5447        dst.lastModified = lastModified == null ? null : lastModified.copy();
5448        dst.requester = requester == null ? null : requester.copy();
5449        if (requestedPerformer != null) {
5450          dst.requestedPerformer = new ArrayList<CodeableReference>();
5451          for (CodeableReference i : requestedPerformer)
5452            dst.requestedPerformer.add(i.copy());
5453        };
5454        dst.owner = owner == null ? null : owner.copy();
5455        dst.location = location == null ? null : location.copy();
5456        if (reason != null) {
5457          dst.reason = new ArrayList<CodeableReference>();
5458          for (CodeableReference i : reason)
5459            dst.reason.add(i.copy());
5460        };
5461        if (insurance != null) {
5462          dst.insurance = new ArrayList<Reference>();
5463          for (Reference i : insurance)
5464            dst.insurance.add(i.copy());
5465        };
5466        if (note != null) {
5467          dst.note = new ArrayList<Annotation>();
5468          for (Annotation i : note)
5469            dst.note.add(i.copy());
5470        };
5471        if (relevantHistory != null) {
5472          dst.relevantHistory = new ArrayList<Reference>();
5473          for (Reference i : relevantHistory)
5474            dst.relevantHistory.add(i.copy());
5475        };
5476        dst.restriction = restriction == null ? null : restriction.copy();
5477        if (input != null) {
5478          dst.input = new ArrayList<TaskInputComponent>();
5479          for (TaskInputComponent i : input)
5480            dst.input.add(i.copy());
5481        };
5482        if (output != null) {
5483          dst.output = new ArrayList<TaskOutputComponent>();
5484          for (TaskOutputComponent i : output)
5485            dst.output.add(i.copy());
5486        };
5487      }
5488
5489      protected Task typedCopy() {
5490        return copy();
5491      }
5492
5493      @Override
5494      public boolean equalsDeep(Base other_) {
5495        if (!super.equalsDeep(other_))
5496          return false;
5497        if (!(other_ instanceof Task))
5498          return false;
5499        Task o = (Task) other_;
5500        return compareDeep(identifier, o.identifier, true) && compareDeep(instantiatesCanonical, o.instantiatesCanonical, true)
5501           && compareDeep(instantiatesUri, o.instantiatesUri, true) && compareDeep(basedOn, o.basedOn, true)
5502           && compareDeep(groupIdentifier, o.groupIdentifier, true) && compareDeep(partOf, o.partOf, true)
5503           && compareDeep(status, o.status, true) && compareDeep(statusReason, o.statusReason, true) && compareDeep(businessStatus, o.businessStatus, true)
5504           && compareDeep(intent, o.intent, true) && compareDeep(priority, o.priority, true) && compareDeep(doNotPerform, o.doNotPerform, true)
5505           && compareDeep(code, o.code, true) && compareDeep(description, o.description, true) && compareDeep(focus, o.focus, true)
5506           && compareDeep(for_, o.for_, true) && compareDeep(encounter, o.encounter, true) && compareDeep(requestedPeriod, o.requestedPeriod, true)
5507           && compareDeep(executionPeriod, o.executionPeriod, true) && compareDeep(authoredOn, o.authoredOn, true)
5508           && compareDeep(lastModified, o.lastModified, true) && compareDeep(requester, o.requester, true)
5509           && compareDeep(requestedPerformer, o.requestedPerformer, true) && compareDeep(owner, o.owner, true)
5510           && compareDeep(location, o.location, true) && compareDeep(reason, o.reason, true) && compareDeep(insurance, o.insurance, true)
5511           && compareDeep(note, o.note, true) && compareDeep(relevantHistory, o.relevantHistory, true) && compareDeep(restriction, o.restriction, true)
5512           && compareDeep(input, o.input, true) && compareDeep(output, o.output, true);
5513      }
5514
5515      @Override
5516      public boolean equalsShallow(Base other_) {
5517        if (!super.equalsShallow(other_))
5518          return false;
5519        if (!(other_ instanceof Task))
5520          return false;
5521        Task o = (Task) other_;
5522        return compareValues(instantiatesCanonical, o.instantiatesCanonical, true) && compareValues(instantiatesUri, o.instantiatesUri, true)
5523           && compareValues(status, o.status, true) && compareValues(intent, o.intent, true) && compareValues(priority, o.priority, true)
5524           && compareValues(doNotPerform, o.doNotPerform, true) && compareValues(description, o.description, true)
5525           && compareValues(authoredOn, o.authoredOn, true) && compareValues(lastModified, o.lastModified, true)
5526          ;
5527      }
5528
5529      public boolean isEmpty() {
5530        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, instantiatesCanonical
5531          , instantiatesUri, basedOn, groupIdentifier, partOf, status, statusReason, businessStatus
5532          , intent, priority, doNotPerform, code, description, focus, for_, encounter
5533          , requestedPeriod, executionPeriod, authoredOn, lastModified, requester, requestedPerformer
5534          , owner, location, reason, insurance, note, relevantHistory, restriction, input
5535          , output);
5536      }
5537
5538  @Override
5539  public ResourceType getResourceType() {
5540    return ResourceType.Task;
5541   }
5542
5543 /**
5544   * Search parameter: <b>authored-on</b>
5545   * <p>
5546   * Description: <b>Search by creation date</b><br>
5547   * Type: <b>date</b><br>
5548   * Path: <b>Task.authoredOn</b><br>
5549   * </p>
5550   */
5551  @SearchParamDefinition(name="authored-on", path="Task.authoredOn", description="Search by creation date", type="date" )
5552  public static final String SP_AUTHORED_ON = "authored-on";
5553 /**
5554   * <b>Fluent Client</b> search parameter constant for <b>authored-on</b>
5555   * <p>
5556   * Description: <b>Search by creation date</b><br>
5557   * Type: <b>date</b><br>
5558   * Path: <b>Task.authoredOn</b><br>
5559   * </p>
5560   */
5561  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED_ON = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED_ON);
5562
5563 /**
5564   * Search parameter: <b>based-on</b>
5565   * <p>
5566   * Description: <b>Search by requests this task is based on</b><br>
5567   * Type: <b>reference</b><br>
5568   * Path: <b>Task.basedOn</b><br>
5569   * </p>
5570   */
5571  @SearchParamDefinition(name="based-on", path="Task.basedOn", description="Search by requests this task is based on", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
5572  public static final String SP_BASED_ON = "based-on";
5573 /**
5574   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
5575   * <p>
5576   * Description: <b>Search by requests this task is based on</b><br>
5577   * Type: <b>reference</b><br>
5578   * Path: <b>Task.basedOn</b><br>
5579   * </p>
5580   */
5581  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
5582
5583/**
5584   * Constant for fluent queries to be used to add include statements. Specifies
5585   * the path value of "<b>Task:based-on</b>".
5586   */
5587  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Task:based-on").toLocked();
5588
5589 /**
5590   * Search parameter: <b>business-status</b>
5591   * <p>
5592   * Description: <b>Search by business status</b><br>
5593   * Type: <b>token</b><br>
5594   * Path: <b>Task.businessStatus</b><br>
5595   * </p>
5596   */
5597  @SearchParamDefinition(name="business-status", path="Task.businessStatus", description="Search by business status", type="token" )
5598  public static final String SP_BUSINESS_STATUS = "business-status";
5599 /**
5600   * <b>Fluent Client</b> search parameter constant for <b>business-status</b>
5601   * <p>
5602   * Description: <b>Search by business status</b><br>
5603   * Type: <b>token</b><br>
5604   * Path: <b>Task.businessStatus</b><br>
5605   * </p>
5606   */
5607  public static final ca.uhn.fhir.rest.gclient.TokenClientParam BUSINESS_STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_BUSINESS_STATUS);
5608
5609 /**
5610   * Search parameter: <b>code</b>
5611   * <p>
5612   * Description: <b>Search by task code</b><br>
5613   * Type: <b>token</b><br>
5614   * Path: <b>Task.code</b><br>
5615   * </p>
5616   */
5617  @SearchParamDefinition(name="code", path="Task.code", description="Search by task code", type="token" )
5618  public static final String SP_CODE = "code";
5619 /**
5620   * <b>Fluent Client</b> search parameter constant for <b>code</b>
5621   * <p>
5622   * Description: <b>Search by task code</b><br>
5623   * Type: <b>token</b><br>
5624   * Path: <b>Task.code</b><br>
5625   * </p>
5626   */
5627  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
5628
5629 /**
5630   * Search parameter: <b>encounter</b>
5631   * <p>
5632   * Description: <b>Search by encounter</b><br>
5633   * Type: <b>reference</b><br>
5634   * Path: <b>Task.encounter</b><br>
5635   * </p>
5636   */
5637  @SearchParamDefinition(name="encounter", path="Task.encounter", description="Search by encounter", type="reference", target={Encounter.class } )
5638  public static final String SP_ENCOUNTER = "encounter";
5639 /**
5640   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
5641   * <p>
5642   * Description: <b>Search by encounter</b><br>
5643   * Type: <b>reference</b><br>
5644   * Path: <b>Task.encounter</b><br>
5645   * </p>
5646   */
5647  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
5648
5649/**
5650   * Constant for fluent queries to be used to add include statements. Specifies
5651   * the path value of "<b>Task:encounter</b>".
5652   */
5653  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Task:encounter").toLocked();
5654
5655 /**
5656   * Search parameter: <b>focus</b>
5657   * <p>
5658   * Description: <b>Search by task focus</b><br>
5659   * Type: <b>reference</b><br>
5660   * Path: <b>Task.focus</b><br>
5661   * </p>
5662   */
5663  @SearchParamDefinition(name="focus", path="Task.focus", description="Search by task focus", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
5664  public static final String SP_FOCUS = "focus";
5665 /**
5666   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
5667   * <p>
5668   * Description: <b>Search by task focus</b><br>
5669   * Type: <b>reference</b><br>
5670   * Path: <b>Task.focus</b><br>
5671   * </p>
5672   */
5673  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam FOCUS = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_FOCUS);
5674
5675/**
5676   * Constant for fluent queries to be used to add include statements. Specifies
5677   * the path value of "<b>Task:focus</b>".
5678   */
5679  public static final ca.uhn.fhir.model.api.Include INCLUDE_FOCUS = new ca.uhn.fhir.model.api.Include("Task:focus").toLocked();
5680
5681 /**
5682   * Search parameter: <b>group-identifier</b>
5683   * <p>
5684   * Description: <b>Search by group identifier</b><br>
5685   * Type: <b>token</b><br>
5686   * Path: <b>Task.groupIdentifier</b><br>
5687   * </p>
5688   */
5689  @SearchParamDefinition(name="group-identifier", path="Task.groupIdentifier", description="Search by group identifier", type="token" )
5690  public static final String SP_GROUP_IDENTIFIER = "group-identifier";
5691 /**
5692   * <b>Fluent Client</b> search parameter constant for <b>group-identifier</b>
5693   * <p>
5694   * Description: <b>Search by group identifier</b><br>
5695   * Type: <b>token</b><br>
5696   * Path: <b>Task.groupIdentifier</b><br>
5697   * </p>
5698   */
5699  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GROUP_IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GROUP_IDENTIFIER);
5700
5701 /**
5702   * Search parameter: <b>identifier</b>
5703   * <p>
5704   * Description: <b>Search for a task instance by its business identifier</b><br>
5705   * Type: <b>token</b><br>
5706   * Path: <b>Task.identifier</b><br>
5707   * </p>
5708   */
5709  @SearchParamDefinition(name="identifier", path="Task.identifier", description="Search for a task instance by its business identifier", type="token" )
5710  public static final String SP_IDENTIFIER = "identifier";
5711 /**
5712   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
5713   * <p>
5714   * Description: <b>Search for a task instance by its business identifier</b><br>
5715   * Type: <b>token</b><br>
5716   * Path: <b>Task.identifier</b><br>
5717   * </p>
5718   */
5719  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
5720
5721 /**
5722   * Search parameter: <b>intent</b>
5723   * <p>
5724   * Description: <b>Search by task intent</b><br>
5725   * Type: <b>token</b><br>
5726   * Path: <b>Task.intent</b><br>
5727   * </p>
5728   */
5729  @SearchParamDefinition(name="intent", path="Task.intent", description="Search by task intent", type="token" )
5730  public static final String SP_INTENT = "intent";
5731 /**
5732   * <b>Fluent Client</b> search parameter constant for <b>intent</b>
5733   * <p>
5734   * Description: <b>Search by task intent</b><br>
5735   * Type: <b>token</b><br>
5736   * Path: <b>Task.intent</b><br>
5737   * </p>
5738   */
5739  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INTENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INTENT);
5740
5741 /**
5742   * Search parameter: <b>modified</b>
5743   * <p>
5744   * Description: <b>Search by last modification date</b><br>
5745   * Type: <b>date</b><br>
5746   * Path: <b>Task.lastModified</b><br>
5747   * </p>
5748   */
5749  @SearchParamDefinition(name="modified", path="Task.lastModified", description="Search by last modification date", type="date" )
5750  public static final String SP_MODIFIED = "modified";
5751 /**
5752   * <b>Fluent Client</b> search parameter constant for <b>modified</b>
5753   * <p>
5754   * Description: <b>Search by last modification date</b><br>
5755   * Type: <b>date</b><br>
5756   * Path: <b>Task.lastModified</b><br>
5757   * </p>
5758   */
5759  public static final ca.uhn.fhir.rest.gclient.DateClientParam MODIFIED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_MODIFIED);
5760
5761 /**
5762   * Search parameter: <b>output</b>
5763   * <p>
5764   * Description: <b>Search by task output</b><br>
5765   * Type: <b>reference</b><br>
5766   * Path: <b>Task.output</b><br>
5767   * </p>
5768   */
5769  @SearchParamDefinition(name="output", path="Task.output", description="Search by task output", type="reference" )
5770  public static final String SP_OUTPUT = "output";
5771 /**
5772   * <b>Fluent Client</b> search parameter constant for <b>output</b>
5773   * <p>
5774   * Description: <b>Search by task output</b><br>
5775   * Type: <b>reference</b><br>
5776   * Path: <b>Task.output</b><br>
5777   * </p>
5778   */
5779  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OUTPUT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OUTPUT);
5780
5781/**
5782   * Constant for fluent queries to be used to add include statements. Specifies
5783   * the path value of "<b>Task:output</b>".
5784   */
5785  public static final ca.uhn.fhir.model.api.Include INCLUDE_OUTPUT = new ca.uhn.fhir.model.api.Include("Task:output").toLocked();
5786
5787 /**
5788   * Search parameter: <b>owner</b>
5789   * <p>
5790   * Description: <b>Search by task owner</b><br>
5791   * Type: <b>reference</b><br>
5792   * Path: <b>Task.owner</b><br>
5793   * </p>
5794   */
5795  @SearchParamDefinition(name="owner", path="Task.owner", description="Search by task owner", type="reference", target={CareTeam.class, Device.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
5796  public static final String SP_OWNER = "owner";
5797 /**
5798   * <b>Fluent Client</b> search parameter constant for <b>owner</b>
5799   * <p>
5800   * Description: <b>Search by task owner</b><br>
5801   * Type: <b>reference</b><br>
5802   * Path: <b>Task.owner</b><br>
5803   * </p>
5804   */
5805  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OWNER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OWNER);
5806
5807/**
5808   * Constant for fluent queries to be used to add include statements. Specifies
5809   * the path value of "<b>Task:owner</b>".
5810   */
5811  public static final ca.uhn.fhir.model.api.Include INCLUDE_OWNER = new ca.uhn.fhir.model.api.Include("Task:owner").toLocked();
5812
5813 /**
5814   * Search parameter: <b>part-of</b>
5815   * <p>
5816   * Description: <b>Search by task this task is part of</b><br>
5817   * Type: <b>reference</b><br>
5818   * Path: <b>Task.partOf</b><br>
5819   * </p>
5820   */
5821  @SearchParamDefinition(name="part-of", path="Task.partOf", description="Search by task this task is part of", type="reference", target={Task.class } )
5822  public static final String SP_PART_OF = "part-of";
5823 /**
5824   * <b>Fluent Client</b> search parameter constant for <b>part-of</b>
5825   * <p>
5826   * Description: <b>Search by task this task is part of</b><br>
5827   * Type: <b>reference</b><br>
5828   * Path: <b>Task.partOf</b><br>
5829   * </p>
5830   */
5831  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PART_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PART_OF);
5832
5833/**
5834   * Constant for fluent queries to be used to add include statements. Specifies
5835   * the path value of "<b>Task:part-of</b>".
5836   */
5837  public static final ca.uhn.fhir.model.api.Include INCLUDE_PART_OF = new ca.uhn.fhir.model.api.Include("Task:part-of").toLocked();
5838
5839 /**
5840   * Search parameter: <b>patient</b>
5841   * <p>
5842   * Description: <b>Search by patient</b><br>
5843   * Type: <b>reference</b><br>
5844   * Path: <b>Task.for.where(resolve() is Patient)</b><br>
5845   * </p>
5846   */
5847  @SearchParamDefinition(name="patient", path="Task.for.where(resolve() is Patient)", description="Search by patient", type="reference", target={Patient.class } )
5848  public static final String SP_PATIENT = "patient";
5849 /**
5850   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
5851   * <p>
5852   * Description: <b>Search by patient</b><br>
5853   * Type: <b>reference</b><br>
5854   * Path: <b>Task.for.where(resolve() is Patient)</b><br>
5855   * </p>
5856   */
5857  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
5858
5859/**
5860   * Constant for fluent queries to be used to add include statements. Specifies
5861   * the path value of "<b>Task:patient</b>".
5862   */
5863  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Task:patient").toLocked();
5864
5865 /**
5866   * Search parameter: <b>performer</b>
5867   * <p>
5868   * Description: <b>Search by specific requested performer.</b><br>
5869   * Type: <b>reference</b><br>
5870   * Path: <b>Task.requestedPerformer.reference</b><br>
5871   * </p>
5872   */
5873  @SearchParamDefinition(name="performer", path="Task.requestedPerformer.reference", description="Search by specific requested performer.", type="reference" )
5874  public static final String SP_PERFORMER = "performer";
5875 /**
5876   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
5877   * <p>
5878   * Description: <b>Search by specific requested performer.</b><br>
5879   * Type: <b>reference</b><br>
5880   * Path: <b>Task.requestedPerformer.reference</b><br>
5881   * </p>
5882   */
5883  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
5884
5885/**
5886   * Constant for fluent queries to be used to add include statements. Specifies
5887   * the path value of "<b>Task:performer</b>".
5888   */
5889  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("Task:performer").toLocked();
5890
5891 /**
5892   * Search parameter: <b>period</b>
5893   * <p>
5894   * Description: <b>Search by period Task is/was underway</b><br>
5895   * Type: <b>date</b><br>
5896   * Path: <b>Task.executionPeriod</b><br>
5897   * </p>
5898   */
5899  @SearchParamDefinition(name="period", path="Task.executionPeriod", description="Search by period Task is/was underway", type="date" )
5900  public static final String SP_PERIOD = "period";
5901 /**
5902   * <b>Fluent Client</b> search parameter constant for <b>period</b>
5903   * <p>
5904   * Description: <b>Search by period Task is/was underway</b><br>
5905   * Type: <b>date</b><br>
5906   * Path: <b>Task.executionPeriod</b><br>
5907   * </p>
5908   */
5909  public static final ca.uhn.fhir.rest.gclient.DateClientParam PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PERIOD);
5910
5911 /**
5912   * Search parameter: <b>priority</b>
5913   * <p>
5914   * Description: <b>Search by task priority</b><br>
5915   * Type: <b>token</b><br>
5916   * Path: <b>Task.priority</b><br>
5917   * </p>
5918   */
5919  @SearchParamDefinition(name="priority", path="Task.priority", description="Search by task priority", type="token" )
5920  public static final String SP_PRIORITY = "priority";
5921 /**
5922   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
5923   * <p>
5924   * Description: <b>Search by task priority</b><br>
5925   * Type: <b>token</b><br>
5926   * Path: <b>Task.priority</b><br>
5927   * </p>
5928   */
5929  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
5930
5931 /**
5932   * Search parameter: <b>requester</b>
5933   * <p>
5934   * Description: <b>Search by task requester</b><br>
5935   * Type: <b>reference</b><br>
5936   * Path: <b>Task.requester</b><br>
5937   * </p>
5938   */
5939  @SearchParamDefinition(name="requester", path="Task.requester", description="Search by task requester", type="reference", target={Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
5940  public static final String SP_REQUESTER = "requester";
5941 /**
5942   * <b>Fluent Client</b> search parameter constant for <b>requester</b>
5943   * <p>
5944   * Description: <b>Search by task requester</b><br>
5945   * Type: <b>reference</b><br>
5946   * Path: <b>Task.requester</b><br>
5947   * </p>
5948   */
5949  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTER);
5950
5951/**
5952   * Constant for fluent queries to be used to add include statements. Specifies
5953   * the path value of "<b>Task:requester</b>".
5954   */
5955  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTER = new ca.uhn.fhir.model.api.Include("Task:requester").toLocked();
5956
5957 /**
5958   * Search parameter: <b>status</b>
5959   * <p>
5960   * Description: <b>Search by task status</b><br>
5961   * Type: <b>token</b><br>
5962   * Path: <b>Task.status</b><br>
5963   * </p>
5964   */
5965  @SearchParamDefinition(name="status", path="Task.status", description="Search by task status", type="token" )
5966  public static final String SP_STATUS = "status";
5967 /**
5968   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5969   * <p>
5970   * Description: <b>Search by task status</b><br>
5971   * Type: <b>token</b><br>
5972   * Path: <b>Task.status</b><br>
5973   * </p>
5974   */
5975  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5976
5977 /**
5978   * Search parameter: <b>subject</b>
5979   * <p>
5980   * Description: <b>Search by subject</b><br>
5981   * Type: <b>reference</b><br>
5982   * Path: <b>Task.for</b><br>
5983   * </p>
5984   */
5985  @SearchParamDefinition(name="subject", path="Task.for", description="Search by subject", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
5986  public static final String SP_SUBJECT = "subject";
5987 /**
5988   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
5989   * <p>
5990   * Description: <b>Search by subject</b><br>
5991   * Type: <b>reference</b><br>
5992   * Path: <b>Task.for</b><br>
5993   * </p>
5994   */
5995  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
5996
5997/**
5998   * Constant for fluent queries to be used to add include statements. Specifies
5999   * the path value of "<b>Task:subject</b>".
6000   */
6001  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Task:subject").toLocked();
6002
6003
6004}
6005