001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.ResourceDef;
047import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
048/**
049 * Represents a request for a patient to employ a medical device. The device may be an implantable device, or an external assistive device, such as a walker.
050 */
051@ResourceDef(name="DeviceRequest", profile="http://hl7.org/fhir/Profile/DeviceRequest")
052public class DeviceRequest extends DomainResource {
053
054    public enum DeviceRequestStatus {
055        /**
056         * The request has been created but is not yet complete or ready for action
057         */
058        DRAFT, 
059        /**
060         * The request is ready to be acted upon
061         */
062        ACTIVE, 
063        /**
064         * The authorization/request to act has been temporarily withdrawn but is expected to resume in the future
065         */
066        SUSPENDED, 
067        /**
068         * The authorization/request to act has been terminated prior to the full completion of the intended actions.  No further activity should occur.
069         */
070        CANCELLED, 
071        /**
072         * Activity against the request has been sufficiently completed to the satisfaction of the requester
073         */
074        COMPLETED, 
075        /**
076         * This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be "cancelled" rather than "entered-in-error".)
077         */
078        ENTEREDINERROR, 
079        /**
080         * The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for "other" . One of the listed statuses is presumed to apply,  but the system creating the request doesn't know.
081         */
082        UNKNOWN, 
083        /**
084         * added to help the parsers with the generic types
085         */
086        NULL;
087        public static DeviceRequestStatus fromCode(String codeString) throws FHIRException {
088            if (codeString == null || "".equals(codeString))
089                return null;
090        if ("draft".equals(codeString))
091          return DRAFT;
092        if ("active".equals(codeString))
093          return ACTIVE;
094        if ("suspended".equals(codeString))
095          return SUSPENDED;
096        if ("cancelled".equals(codeString))
097          return CANCELLED;
098        if ("completed".equals(codeString))
099          return COMPLETED;
100        if ("entered-in-error".equals(codeString))
101          return ENTEREDINERROR;
102        if ("unknown".equals(codeString))
103          return UNKNOWN;
104        if (Configuration.isAcceptInvalidEnums())
105          return null;
106        else
107          throw new FHIRException("Unknown DeviceRequestStatus code '"+codeString+"'");
108        }
109        public String toCode() {
110          switch (this) {
111            case DRAFT: return "draft";
112            case ACTIVE: return "active";
113            case SUSPENDED: return "suspended";
114            case CANCELLED: return "cancelled";
115            case COMPLETED: return "completed";
116            case ENTEREDINERROR: return "entered-in-error";
117            case UNKNOWN: return "unknown";
118            case NULL: return null;
119            default: return "?";
120          }
121        }
122        public String getSystem() {
123          switch (this) {
124            case DRAFT: return "http://hl7.org/fhir/request-status";
125            case ACTIVE: return "http://hl7.org/fhir/request-status";
126            case SUSPENDED: return "http://hl7.org/fhir/request-status";
127            case CANCELLED: return "http://hl7.org/fhir/request-status";
128            case COMPLETED: return "http://hl7.org/fhir/request-status";
129            case ENTEREDINERROR: return "http://hl7.org/fhir/request-status";
130            case UNKNOWN: return "http://hl7.org/fhir/request-status";
131            case NULL: return null;
132            default: return "?";
133          }
134        }
135        public String getDefinition() {
136          switch (this) {
137            case DRAFT: return "The request has been created but is not yet complete or ready for action";
138            case ACTIVE: return "The request is ready to be acted upon";
139            case SUSPENDED: return "The authorization/request to act has been temporarily withdrawn but is expected to resume in the future";
140            case CANCELLED: return "The authorization/request to act has been terminated prior to the full completion of the intended actions.  No further activity should occur.";
141            case COMPLETED: return "Activity against the request has been sufficiently completed to the satisfaction of the requester";
142            case ENTEREDINERROR: return "This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be \"cancelled\" rather than \"entered-in-error\".)";
143            case UNKNOWN: return "The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for \"other\" . One of the listed statuses is presumed to apply,  but the system creating the request doesn't know.";
144            case NULL: return null;
145            default: return "?";
146          }
147        }
148        public String getDisplay() {
149          switch (this) {
150            case DRAFT: return "Draft";
151            case ACTIVE: return "Active";
152            case SUSPENDED: return "Suspended";
153            case CANCELLED: return "Cancelled";
154            case COMPLETED: return "Completed";
155            case ENTEREDINERROR: return "Entered in Error";
156            case UNKNOWN: return "Unknown";
157            case NULL: return null;
158            default: return "?";
159          }
160        }
161    }
162
163  public static class DeviceRequestStatusEnumFactory implements EnumFactory<DeviceRequestStatus> {
164    public DeviceRequestStatus fromCode(String codeString) throws IllegalArgumentException {
165      if (codeString == null || "".equals(codeString))
166            if (codeString == null || "".equals(codeString))
167                return null;
168        if ("draft".equals(codeString))
169          return DeviceRequestStatus.DRAFT;
170        if ("active".equals(codeString))
171          return DeviceRequestStatus.ACTIVE;
172        if ("suspended".equals(codeString))
173          return DeviceRequestStatus.SUSPENDED;
174        if ("cancelled".equals(codeString))
175          return DeviceRequestStatus.CANCELLED;
176        if ("completed".equals(codeString))
177          return DeviceRequestStatus.COMPLETED;
178        if ("entered-in-error".equals(codeString))
179          return DeviceRequestStatus.ENTEREDINERROR;
180        if ("unknown".equals(codeString))
181          return DeviceRequestStatus.UNKNOWN;
182        throw new IllegalArgumentException("Unknown DeviceRequestStatus code '"+codeString+"'");
183        }
184        public Enumeration<DeviceRequestStatus> fromType(Base code) throws FHIRException {
185          if (code == null)
186            return null;
187          if (code.isEmpty())
188            return new Enumeration<DeviceRequestStatus>(this);
189          String codeString = ((PrimitiveType) code).asStringValue();
190          if (codeString == null || "".equals(codeString))
191            return null;
192        if ("draft".equals(codeString))
193          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.DRAFT);
194        if ("active".equals(codeString))
195          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.ACTIVE);
196        if ("suspended".equals(codeString))
197          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.SUSPENDED);
198        if ("cancelled".equals(codeString))
199          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.CANCELLED);
200        if ("completed".equals(codeString))
201          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.COMPLETED);
202        if ("entered-in-error".equals(codeString))
203          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.ENTEREDINERROR);
204        if ("unknown".equals(codeString))
205          return new Enumeration<DeviceRequestStatus>(this, DeviceRequestStatus.UNKNOWN);
206        throw new FHIRException("Unknown DeviceRequestStatus code '"+codeString+"'");
207        }
208    public String toCode(DeviceRequestStatus code) {
209      if (code == DeviceRequestStatus.DRAFT)
210        return "draft";
211      if (code == DeviceRequestStatus.ACTIVE)
212        return "active";
213      if (code == DeviceRequestStatus.SUSPENDED)
214        return "suspended";
215      if (code == DeviceRequestStatus.CANCELLED)
216        return "cancelled";
217      if (code == DeviceRequestStatus.COMPLETED)
218        return "completed";
219      if (code == DeviceRequestStatus.ENTEREDINERROR)
220        return "entered-in-error";
221      if (code == DeviceRequestStatus.UNKNOWN)
222        return "unknown";
223      return "?";
224      }
225    public String toSystem(DeviceRequestStatus code) {
226      return code.getSystem();
227      }
228    }
229
230    public enum RequestPriority {
231        /**
232         * The request has normal priority
233         */
234        ROUTINE, 
235        /**
236         * The request should be actioned promptly - higher priority than routine
237         */
238        URGENT, 
239        /**
240         * The request should be actioned as soon as possible - higher priority than urgent
241         */
242        ASAP, 
243        /**
244         * The request should be actioned immediately - highest possible priority.  E.g. an emergency
245         */
246        STAT, 
247        /**
248         * added to help the parsers with the generic types
249         */
250        NULL;
251        public static RequestPriority fromCode(String codeString) throws FHIRException {
252            if (codeString == null || "".equals(codeString))
253                return null;
254        if ("routine".equals(codeString))
255          return ROUTINE;
256        if ("urgent".equals(codeString))
257          return URGENT;
258        if ("asap".equals(codeString))
259          return ASAP;
260        if ("stat".equals(codeString))
261          return STAT;
262        if (Configuration.isAcceptInvalidEnums())
263          return null;
264        else
265          throw new FHIRException("Unknown RequestPriority code '"+codeString+"'");
266        }
267        public String toCode() {
268          switch (this) {
269            case ROUTINE: return "routine";
270            case URGENT: return "urgent";
271            case ASAP: return "asap";
272            case STAT: return "stat";
273            case NULL: return null;
274            default: return "?";
275          }
276        }
277        public String getSystem() {
278          switch (this) {
279            case ROUTINE: return "http://hl7.org/fhir/request-priority";
280            case URGENT: return "http://hl7.org/fhir/request-priority";
281            case ASAP: return "http://hl7.org/fhir/request-priority";
282            case STAT: return "http://hl7.org/fhir/request-priority";
283            case NULL: return null;
284            default: return "?";
285          }
286        }
287        public String getDefinition() {
288          switch (this) {
289            case ROUTINE: return "The request has normal priority";
290            case URGENT: return "The request should be actioned promptly - higher priority than routine";
291            case ASAP: return "The request should be actioned as soon as possible - higher priority than urgent";
292            case STAT: return "The request should be actioned immediately - highest possible priority.  E.g. an emergency";
293            case NULL: return null;
294            default: return "?";
295          }
296        }
297        public String getDisplay() {
298          switch (this) {
299            case ROUTINE: return "Routine";
300            case URGENT: return "Urgent";
301            case ASAP: return "ASAP";
302            case STAT: return "STAT";
303            case NULL: return null;
304            default: return "?";
305          }
306        }
307    }
308
309  public static class RequestPriorityEnumFactory implements EnumFactory<RequestPriority> {
310    public RequestPriority fromCode(String codeString) throws IllegalArgumentException {
311      if (codeString == null || "".equals(codeString))
312            if (codeString == null || "".equals(codeString))
313                return null;
314        if ("routine".equals(codeString))
315          return RequestPriority.ROUTINE;
316        if ("urgent".equals(codeString))
317          return RequestPriority.URGENT;
318        if ("asap".equals(codeString))
319          return RequestPriority.ASAP;
320        if ("stat".equals(codeString))
321          return RequestPriority.STAT;
322        throw new IllegalArgumentException("Unknown RequestPriority code '"+codeString+"'");
323        }
324        public Enumeration<RequestPriority> fromType(Base code) throws FHIRException {
325          if (code == null)
326            return null;
327          if (code.isEmpty())
328            return new Enumeration<RequestPriority>(this);
329          String codeString = ((PrimitiveType) code).asStringValue();
330          if (codeString == null || "".equals(codeString))
331            return null;
332        if ("routine".equals(codeString))
333          return new Enumeration<RequestPriority>(this, RequestPriority.ROUTINE);
334        if ("urgent".equals(codeString))
335          return new Enumeration<RequestPriority>(this, RequestPriority.URGENT);
336        if ("asap".equals(codeString))
337          return new Enumeration<RequestPriority>(this, RequestPriority.ASAP);
338        if ("stat".equals(codeString))
339          return new Enumeration<RequestPriority>(this, RequestPriority.STAT);
340        throw new FHIRException("Unknown RequestPriority code '"+codeString+"'");
341        }
342    public String toCode(RequestPriority code) {
343      if (code == RequestPriority.ROUTINE)
344        return "routine";
345      if (code == RequestPriority.URGENT)
346        return "urgent";
347      if (code == RequestPriority.ASAP)
348        return "asap";
349      if (code == RequestPriority.STAT)
350        return "stat";
351      return "?";
352      }
353    public String toSystem(RequestPriority code) {
354      return code.getSystem();
355      }
356    }
357
358    @Block()
359    public static class DeviceRequestRequesterComponent extends BackboneElement implements IBaseBackboneElement {
360        /**
361         * The device, practitioner, etc. who initiated the request.
362         */
363        @Child(name = "agent", type = {Device.class, Practitioner.class, Organization.class}, order=1, min=1, max=1, modifier=false, summary=true)
364        @Description(shortDefinition="Individual making the request", formalDefinition="The device, practitioner, etc. who initiated the request." )
365        protected Reference agent;
366
367        /**
368         * The actual object that is the target of the reference (The device, practitioner, etc. who initiated the request.)
369         */
370        protected Resource agentTarget;
371
372        /**
373         * The organization the device or practitioner was acting on behalf of.
374         */
375        @Child(name = "onBehalfOf", type = {Organization.class}, order=2, min=0, max=1, modifier=false, summary=true)
376        @Description(shortDefinition="Organization agent is acting for", formalDefinition="The organization the device or practitioner was acting on behalf of." )
377        protected Reference onBehalfOf;
378
379        /**
380         * The actual object that is the target of the reference (The organization the device or practitioner was acting on behalf of.)
381         */
382        protected Organization onBehalfOfTarget;
383
384        private static final long serialVersionUID = -71453027L;
385
386    /**
387     * Constructor
388     */
389      public DeviceRequestRequesterComponent() {
390        super();
391      }
392
393    /**
394     * Constructor
395     */
396      public DeviceRequestRequesterComponent(Reference agent) {
397        super();
398        this.agent = agent;
399      }
400
401        /**
402         * @return {@link #agent} (The device, practitioner, etc. who initiated the request.)
403         */
404        public Reference getAgent() { 
405          if (this.agent == null)
406            if (Configuration.errorOnAutoCreate())
407              throw new Error("Attempt to auto-create DeviceRequestRequesterComponent.agent");
408            else if (Configuration.doAutoCreate())
409              this.agent = new Reference(); // cc
410          return this.agent;
411        }
412
413        public boolean hasAgent() { 
414          return this.agent != null && !this.agent.isEmpty();
415        }
416
417        /**
418         * @param value {@link #agent} (The device, practitioner, etc. who initiated the request.)
419         */
420        public DeviceRequestRequesterComponent setAgent(Reference value)  { 
421          this.agent = value;
422          return this;
423        }
424
425        /**
426         * @return {@link #agent} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who initiated the request.)
427         */
428        public Resource getAgentTarget() { 
429          return this.agentTarget;
430        }
431
432        /**
433         * @param value {@link #agent} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The device, practitioner, etc. who initiated the request.)
434         */
435        public DeviceRequestRequesterComponent setAgentTarget(Resource value) { 
436          this.agentTarget = value;
437          return this;
438        }
439
440        /**
441         * @return {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
442         */
443        public Reference getOnBehalfOf() { 
444          if (this.onBehalfOf == null)
445            if (Configuration.errorOnAutoCreate())
446              throw new Error("Attempt to auto-create DeviceRequestRequesterComponent.onBehalfOf");
447            else if (Configuration.doAutoCreate())
448              this.onBehalfOf = new Reference(); // cc
449          return this.onBehalfOf;
450        }
451
452        public boolean hasOnBehalfOf() { 
453          return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
454        }
455
456        /**
457         * @param value {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
458         */
459        public DeviceRequestRequesterComponent setOnBehalfOf(Reference value)  { 
460          this.onBehalfOf = value;
461          return this;
462        }
463
464        /**
465         * @return {@link #onBehalfOf} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The organization the device or practitioner was acting on behalf of.)
466         */
467        public Organization getOnBehalfOfTarget() { 
468          if (this.onBehalfOfTarget == null)
469            if (Configuration.errorOnAutoCreate())
470              throw new Error("Attempt to auto-create DeviceRequestRequesterComponent.onBehalfOf");
471            else if (Configuration.doAutoCreate())
472              this.onBehalfOfTarget = new Organization(); // aa
473          return this.onBehalfOfTarget;
474        }
475
476        /**
477         * @param value {@link #onBehalfOf} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The organization the device or practitioner was acting on behalf of.)
478         */
479        public DeviceRequestRequesterComponent setOnBehalfOfTarget(Organization value) { 
480          this.onBehalfOfTarget = value;
481          return this;
482        }
483
484        protected void listChildren(List<Property> children) {
485          super.listChildren(children);
486          children.add(new Property("agent", "Reference(Device|Practitioner|Organization)", "The device, practitioner, etc. who initiated the request.", 0, 1, agent));
487          children.add(new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf));
488        }
489
490        @Override
491        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
492          switch (_hash) {
493          case 92750597: /*agent*/  return new Property("agent", "Reference(Device|Practitioner|Organization)", "The device, practitioner, etc. who initiated the request.", 0, 1, agent);
494          case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf);
495          default: return super.getNamedProperty(_hash, _name, _checkValid);
496          }
497
498        }
499
500      @Override
501      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
502        switch (hash) {
503        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : new Base[] {this.agent}; // Reference
504        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Reference
505        default: return super.getProperty(hash, name, checkValid);
506        }
507
508      }
509
510      @Override
511      public Base setProperty(int hash, String name, Base value) throws FHIRException {
512        switch (hash) {
513        case 92750597: // agent
514          this.agent = castToReference(value); // Reference
515          return value;
516        case -14402964: // onBehalfOf
517          this.onBehalfOf = castToReference(value); // Reference
518          return value;
519        default: return super.setProperty(hash, name, value);
520        }
521
522      }
523
524      @Override
525      public Base setProperty(String name, Base value) throws FHIRException {
526        if (name.equals("agent")) {
527          this.agent = castToReference(value); // Reference
528        } else if (name.equals("onBehalfOf")) {
529          this.onBehalfOf = castToReference(value); // Reference
530        } else
531          return super.setProperty(name, value);
532        return value;
533      }
534
535      @Override
536      public Base makeProperty(int hash, String name) throws FHIRException {
537        switch (hash) {
538        case 92750597:  return getAgent(); 
539        case -14402964:  return getOnBehalfOf(); 
540        default: return super.makeProperty(hash, name);
541        }
542
543      }
544
545      @Override
546      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
547        switch (hash) {
548        case 92750597: /*agent*/ return new String[] {"Reference"};
549        case -14402964: /*onBehalfOf*/ return new String[] {"Reference"};
550        default: return super.getTypesForProperty(hash, name);
551        }
552
553      }
554
555      @Override
556      public Base addChild(String name) throws FHIRException {
557        if (name.equals("agent")) {
558          this.agent = new Reference();
559          return this.agent;
560        }
561        else if (name.equals("onBehalfOf")) {
562          this.onBehalfOf = new Reference();
563          return this.onBehalfOf;
564        }
565        else
566          return super.addChild(name);
567      }
568
569      public DeviceRequestRequesterComponent copy() {
570        DeviceRequestRequesterComponent dst = new DeviceRequestRequesterComponent();
571        copyValues(dst);
572        dst.agent = agent == null ? null : agent.copy();
573        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
574        return dst;
575      }
576
577      @Override
578      public boolean equalsDeep(Base other_) {
579        if (!super.equalsDeep(other_))
580          return false;
581        if (!(other_ instanceof DeviceRequestRequesterComponent))
582          return false;
583        DeviceRequestRequesterComponent o = (DeviceRequestRequesterComponent) other_;
584        return compareDeep(agent, o.agent, true) && compareDeep(onBehalfOf, o.onBehalfOf, true);
585      }
586
587      @Override
588      public boolean equalsShallow(Base other_) {
589        if (!super.equalsShallow(other_))
590          return false;
591        if (!(other_ instanceof DeviceRequestRequesterComponent))
592          return false;
593        DeviceRequestRequesterComponent o = (DeviceRequestRequesterComponent) other_;
594        return true;
595      }
596
597      public boolean isEmpty() {
598        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(agent, onBehalfOf);
599      }
600
601  public String fhirType() {
602    return "DeviceRequest.requester";
603
604  }
605
606  }
607
608    /**
609     * Identifiers assigned to this order by the orderer or by the receiver.
610     */
611    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
612    @Description(shortDefinition="External Request identifier", formalDefinition="Identifiers assigned to this order by the orderer or by the receiver." )
613    protected List<Identifier> identifier;
614
615    /**
616     * Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.
617     */
618    @Child(name = "definition", type = {ActivityDefinition.class, PlanDefinition.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
619    @Description(shortDefinition="Protocol or definition", formalDefinition="Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%." )
620    protected List<Reference> definition;
621    /**
622     * The actual objects that are the target of the reference (Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.)
623     */
624    protected List<Resource> definitionTarget;
625
626
627    /**
628     * Plan/proposal/order fulfilled by this request.
629     */
630    @Child(name = "basedOn", type = {Reference.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
631    @Description(shortDefinition="What request fulfills", formalDefinition="Plan/proposal/order fulfilled by this request." )
632    protected List<Reference> basedOn;
633    /**
634     * The actual objects that are the target of the reference (Plan/proposal/order fulfilled by this request.)
635     */
636    protected List<Resource> basedOnTarget;
637
638
639    /**
640     * The request takes the place of the referenced completed or terminated request(s).
641     */
642    @Child(name = "priorRequest", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
643    @Description(shortDefinition="What request replaces", formalDefinition="The request takes the place of the referenced completed or terminated request(s)." )
644    protected List<Reference> priorRequest;
645    /**
646     * The actual objects that are the target of the reference (The request takes the place of the referenced completed or terminated request(s).)
647     */
648    protected List<Resource> priorRequestTarget;
649
650
651    /**
652     * Composite request this is part of.
653     */
654    @Child(name = "groupIdentifier", type = {Identifier.class}, order=4, min=0, max=1, modifier=false, summary=true)
655    @Description(shortDefinition="Identifier of composite request", formalDefinition="Composite request this is part of." )
656    protected Identifier groupIdentifier;
657
658    /**
659     * The status of the request.
660     */
661    @Child(name = "status", type = {CodeType.class}, order=5, min=0, max=1, modifier=true, summary=true)
662    @Description(shortDefinition="draft | active | suspended | completed | entered-in-error | cancelled", formalDefinition="The status of the request." )
663    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-status")
664    protected Enumeration<DeviceRequestStatus> status;
665
666    /**
667     * Whether the request is a proposal, plan, an original order or a reflex order.
668     */
669    @Child(name = "intent", type = {CodeableConcept.class}, order=6, min=1, max=1, modifier=true, summary=true)
670    @Description(shortDefinition="proposal | plan | original-order | encoded | reflex-order", formalDefinition="Whether the request is a proposal, plan, an original order or a reflex order." )
671    protected CodeableConcept intent;
672
673    /**
674     * Indicates how quickly the {{title}} should be addressed with respect to other requests.
675     */
676    @Child(name = "priority", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
677    @Description(shortDefinition="Indicates how quickly the {{title}} should be addressed with respect to other requests", formalDefinition="Indicates how quickly the {{title}} should be addressed with respect to other requests." )
678    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
679    protected Enumeration<RequestPriority> priority;
680
681    /**
682     * The details of the device to be used.
683     */
684    @Child(name = "code", type = {Device.class, CodeableConcept.class}, order=8, min=1, max=1, modifier=false, summary=true)
685    @Description(shortDefinition="Device requested", formalDefinition="The details of the device to be used." )
686    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-kind")
687    protected Type code;
688
689    /**
690     * The patient who will use the device.
691     */
692    @Child(name = "subject", type = {Patient.class, Group.class, Location.class, Device.class}, order=9, min=1, max=1, modifier=false, summary=true)
693    @Description(shortDefinition="Focus of request", formalDefinition="The patient who will use the device." )
694    protected Reference subject;
695
696    /**
697     * The actual object that is the target of the reference (The patient who will use the device.)
698     */
699    protected Resource subjectTarget;
700
701    /**
702     * An encounter that provides additional context in which this request is made.
703     */
704    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=10, min=0, max=1, modifier=false, summary=true)
705    @Description(shortDefinition="Encounter or Episode motivating request", formalDefinition="An encounter that provides additional context in which this request is made." )
706    protected Reference context;
707
708    /**
709     * The actual object that is the target of the reference (An encounter that provides additional context in which this request is made.)
710     */
711    protected Resource contextTarget;
712
713    /**
714     * The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".
715     */
716    @Child(name = "occurrence", type = {DateTimeType.class, Period.class, Timing.class}, order=11, min=0, max=1, modifier=false, summary=true)
717    @Description(shortDefinition="Desired time or schedule for use", formalDefinition="The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\"." )
718    protected Type occurrence;
719
720    /**
721     * When the request transitioned to being actionable.
722     */
723    @Child(name = "authoredOn", type = {DateTimeType.class}, order=12, min=0, max=1, modifier=false, summary=true)
724    @Description(shortDefinition="When recorded", formalDefinition="When the request transitioned to being actionable." )
725    protected DateTimeType authoredOn;
726
727    /**
728     * The individual who initiated the request and has responsibility for its activation.
729     */
730    @Child(name = "requester", type = {}, order=13, min=0, max=1, modifier=false, summary=true)
731    @Description(shortDefinition="Who/what is requesting diagnostics", formalDefinition="The individual who initiated the request and has responsibility for its activation." )
732    protected DeviceRequestRequesterComponent requester;
733
734    /**
735     * Desired type of performer for doing the diagnostic testing.
736     */
737    @Child(name = "performerType", type = {CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=true)
738    @Description(shortDefinition="Fille role", formalDefinition="Desired type of performer for doing the diagnostic testing." )
739    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participant-role")
740    protected CodeableConcept performerType;
741
742    /**
743     * The desired perfomer for doing the diagnostic testing.
744     */
745    @Child(name = "performer", type = {Practitioner.class, Organization.class, Patient.class, Device.class, RelatedPerson.class, HealthcareService.class}, order=15, min=0, max=1, modifier=false, summary=true)
746    @Description(shortDefinition="Requested Filler", formalDefinition="The desired perfomer for doing the diagnostic testing." )
747    protected Reference performer;
748
749    /**
750     * The actual object that is the target of the reference (The desired perfomer for doing the diagnostic testing.)
751     */
752    protected Resource performerTarget;
753
754    /**
755     * Reason or justification for the use of this device.
756     */
757    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
758    @Description(shortDefinition="Coded Reason for request", formalDefinition="Reason or justification for the use of this device." )
759    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
760    protected List<CodeableConcept> reasonCode;
761
762    /**
763     * Reason or justification for the use of this device.
764     */
765    @Child(name = "reasonReference", type = {Reference.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
766    @Description(shortDefinition="Linked Reason for request", formalDefinition="Reason or justification for the use of this device." )
767    protected List<Reference> reasonReference;
768    /**
769     * The actual objects that are the target of the reference (Reason or justification for the use of this device.)
770     */
771    protected List<Resource> reasonReferenceTarget;
772
773
774    /**
775     * Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).
776     */
777    @Child(name = "supportingInfo", type = {Reference.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
778    @Description(shortDefinition="Additional clinical information", formalDefinition="Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site)." )
779    protected List<Reference> supportingInfo;
780    /**
781     * The actual objects that are the target of the reference (Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).)
782     */
783    protected List<Resource> supportingInfoTarget;
784
785
786    /**
787     * Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.
788     */
789    @Child(name = "note", type = {Annotation.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
790    @Description(shortDefinition="Notes or comments", formalDefinition="Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement." )
791    protected List<Annotation> note;
792
793    /**
794     * Key events in the history of the request.
795     */
796    @Child(name = "relevantHistory", type = {Provenance.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
797    @Description(shortDefinition="Request provenance", formalDefinition="Key events in the history of the request." )
798    protected List<Reference> relevantHistory;
799    /**
800     * The actual objects that are the target of the reference (Key events in the history of the request.)
801     */
802    protected List<Provenance> relevantHistoryTarget;
803
804
805    private static final long serialVersionUID = -2002514925L;
806
807  /**
808   * Constructor
809   */
810    public DeviceRequest() {
811      super();
812    }
813
814  /**
815   * Constructor
816   */
817    public DeviceRequest(CodeableConcept intent, Type code, Reference subject) {
818      super();
819      this.intent = intent;
820      this.code = code;
821      this.subject = subject;
822    }
823
824    /**
825     * @return {@link #identifier} (Identifiers assigned to this order by the orderer or by the receiver.)
826     */
827    public List<Identifier> getIdentifier() { 
828      if (this.identifier == null)
829        this.identifier = new ArrayList<Identifier>();
830      return this.identifier;
831    }
832
833    /**
834     * @return Returns a reference to <code>this</code> for easy method chaining
835     */
836    public DeviceRequest setIdentifier(List<Identifier> theIdentifier) { 
837      this.identifier = theIdentifier;
838      return this;
839    }
840
841    public boolean hasIdentifier() { 
842      if (this.identifier == null)
843        return false;
844      for (Identifier item : this.identifier)
845        if (!item.isEmpty())
846          return true;
847      return false;
848    }
849
850    public Identifier addIdentifier() { //3
851      Identifier t = new Identifier();
852      if (this.identifier == null)
853        this.identifier = new ArrayList<Identifier>();
854      this.identifier.add(t);
855      return t;
856    }
857
858    public DeviceRequest addIdentifier(Identifier t) { //3
859      if (t == null)
860        return this;
861      if (this.identifier == null)
862        this.identifier = new ArrayList<Identifier>();
863      this.identifier.add(t);
864      return this;
865    }
866
867    /**
868     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
869     */
870    public Identifier getIdentifierFirstRep() { 
871      if (getIdentifier().isEmpty()) {
872        addIdentifier();
873      }
874      return getIdentifier().get(0);
875    }
876
877    /**
878     * @return {@link #definition} (Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.)
879     */
880    public List<Reference> getDefinition() { 
881      if (this.definition == null)
882        this.definition = new ArrayList<Reference>();
883      return this.definition;
884    }
885
886    /**
887     * @return Returns a reference to <code>this</code> for easy method chaining
888     */
889    public DeviceRequest setDefinition(List<Reference> theDefinition) { 
890      this.definition = theDefinition;
891      return this;
892    }
893
894    public boolean hasDefinition() { 
895      if (this.definition == null)
896        return false;
897      for (Reference item : this.definition)
898        if (!item.isEmpty())
899          return true;
900      return false;
901    }
902
903    public Reference addDefinition() { //3
904      Reference t = new Reference();
905      if (this.definition == null)
906        this.definition = new ArrayList<Reference>();
907      this.definition.add(t);
908      return t;
909    }
910
911    public DeviceRequest addDefinition(Reference t) { //3
912      if (t == null)
913        return this;
914      if (this.definition == null)
915        this.definition = new ArrayList<Reference>();
916      this.definition.add(t);
917      return this;
918    }
919
920    /**
921     * @return The first repetition of repeating field {@link #definition}, creating it if it does not already exist
922     */
923    public Reference getDefinitionFirstRep() { 
924      if (getDefinition().isEmpty()) {
925        addDefinition();
926      }
927      return getDefinition().get(0);
928    }
929
930    /**
931     * @deprecated Use Reference#setResource(IBaseResource) instead
932     */
933    @Deprecated
934    public List<Resource> getDefinitionTarget() { 
935      if (this.definitionTarget == null)
936        this.definitionTarget = new ArrayList<Resource>();
937      return this.definitionTarget;
938    }
939
940    /**
941     * @return {@link #basedOn} (Plan/proposal/order fulfilled by this request.)
942     */
943    public List<Reference> getBasedOn() { 
944      if (this.basedOn == null)
945        this.basedOn = new ArrayList<Reference>();
946      return this.basedOn;
947    }
948
949    /**
950     * @return Returns a reference to <code>this</code> for easy method chaining
951     */
952    public DeviceRequest setBasedOn(List<Reference> theBasedOn) { 
953      this.basedOn = theBasedOn;
954      return this;
955    }
956
957    public boolean hasBasedOn() { 
958      if (this.basedOn == null)
959        return false;
960      for (Reference item : this.basedOn)
961        if (!item.isEmpty())
962          return true;
963      return false;
964    }
965
966    public Reference addBasedOn() { //3
967      Reference t = new Reference();
968      if (this.basedOn == null)
969        this.basedOn = new ArrayList<Reference>();
970      this.basedOn.add(t);
971      return t;
972    }
973
974    public DeviceRequest addBasedOn(Reference t) { //3
975      if (t == null)
976        return this;
977      if (this.basedOn == null)
978        this.basedOn = new ArrayList<Reference>();
979      this.basedOn.add(t);
980      return this;
981    }
982
983    /**
984     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
985     */
986    public Reference getBasedOnFirstRep() { 
987      if (getBasedOn().isEmpty()) {
988        addBasedOn();
989      }
990      return getBasedOn().get(0);
991    }
992
993    /**
994     * @deprecated Use Reference#setResource(IBaseResource) instead
995     */
996    @Deprecated
997    public List<Resource> getBasedOnTarget() { 
998      if (this.basedOnTarget == null)
999        this.basedOnTarget = new ArrayList<Resource>();
1000      return this.basedOnTarget;
1001    }
1002
1003    /**
1004     * @return {@link #priorRequest} (The request takes the place of the referenced completed or terminated request(s).)
1005     */
1006    public List<Reference> getPriorRequest() { 
1007      if (this.priorRequest == null)
1008        this.priorRequest = new ArrayList<Reference>();
1009      return this.priorRequest;
1010    }
1011
1012    /**
1013     * @return Returns a reference to <code>this</code> for easy method chaining
1014     */
1015    public DeviceRequest setPriorRequest(List<Reference> thePriorRequest) { 
1016      this.priorRequest = thePriorRequest;
1017      return this;
1018    }
1019
1020    public boolean hasPriorRequest() { 
1021      if (this.priorRequest == null)
1022        return false;
1023      for (Reference item : this.priorRequest)
1024        if (!item.isEmpty())
1025          return true;
1026      return false;
1027    }
1028
1029    public Reference addPriorRequest() { //3
1030      Reference t = new Reference();
1031      if (this.priorRequest == null)
1032        this.priorRequest = new ArrayList<Reference>();
1033      this.priorRequest.add(t);
1034      return t;
1035    }
1036
1037    public DeviceRequest addPriorRequest(Reference t) { //3
1038      if (t == null)
1039        return this;
1040      if (this.priorRequest == null)
1041        this.priorRequest = new ArrayList<Reference>();
1042      this.priorRequest.add(t);
1043      return this;
1044    }
1045
1046    /**
1047     * @return The first repetition of repeating field {@link #priorRequest}, creating it if it does not already exist
1048     */
1049    public Reference getPriorRequestFirstRep() { 
1050      if (getPriorRequest().isEmpty()) {
1051        addPriorRequest();
1052      }
1053      return getPriorRequest().get(0);
1054    }
1055
1056    /**
1057     * @deprecated Use Reference#setResource(IBaseResource) instead
1058     */
1059    @Deprecated
1060    public List<Resource> getPriorRequestTarget() { 
1061      if (this.priorRequestTarget == null)
1062        this.priorRequestTarget = new ArrayList<Resource>();
1063      return this.priorRequestTarget;
1064    }
1065
1066    /**
1067     * @return {@link #groupIdentifier} (Composite request this is part of.)
1068     */
1069    public Identifier getGroupIdentifier() { 
1070      if (this.groupIdentifier == null)
1071        if (Configuration.errorOnAutoCreate())
1072          throw new Error("Attempt to auto-create DeviceRequest.groupIdentifier");
1073        else if (Configuration.doAutoCreate())
1074          this.groupIdentifier = new Identifier(); // cc
1075      return this.groupIdentifier;
1076    }
1077
1078    public boolean hasGroupIdentifier() { 
1079      return this.groupIdentifier != null && !this.groupIdentifier.isEmpty();
1080    }
1081
1082    /**
1083     * @param value {@link #groupIdentifier} (Composite request this is part of.)
1084     */
1085    public DeviceRequest setGroupIdentifier(Identifier value)  { 
1086      this.groupIdentifier = value;
1087      return this;
1088    }
1089
1090    /**
1091     * @return {@link #status} (The status of the request.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1092     */
1093    public Enumeration<DeviceRequestStatus> getStatusElement() { 
1094      if (this.status == null)
1095        if (Configuration.errorOnAutoCreate())
1096          throw new Error("Attempt to auto-create DeviceRequest.status");
1097        else if (Configuration.doAutoCreate())
1098          this.status = new Enumeration<DeviceRequestStatus>(new DeviceRequestStatusEnumFactory()); // bb
1099      return this.status;
1100    }
1101
1102    public boolean hasStatusElement() { 
1103      return this.status != null && !this.status.isEmpty();
1104    }
1105
1106    public boolean hasStatus() { 
1107      return this.status != null && !this.status.isEmpty();
1108    }
1109
1110    /**
1111     * @param value {@link #status} (The status of the request.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1112     */
1113    public DeviceRequest setStatusElement(Enumeration<DeviceRequestStatus> value) { 
1114      this.status = value;
1115      return this;
1116    }
1117
1118    /**
1119     * @return The status of the request.
1120     */
1121    public DeviceRequestStatus getStatus() { 
1122      return this.status == null ? null : this.status.getValue();
1123    }
1124
1125    /**
1126     * @param value The status of the request.
1127     */
1128    public DeviceRequest setStatus(DeviceRequestStatus value) { 
1129      if (value == null)
1130        this.status = null;
1131      else {
1132        if (this.status == null)
1133          this.status = new Enumeration<DeviceRequestStatus>(new DeviceRequestStatusEnumFactory());
1134        this.status.setValue(value);
1135      }
1136      return this;
1137    }
1138
1139    /**
1140     * @return {@link #intent} (Whether the request is a proposal, plan, an original order or a reflex order.)
1141     */
1142    public CodeableConcept getIntent() { 
1143      if (this.intent == null)
1144        if (Configuration.errorOnAutoCreate())
1145          throw new Error("Attempt to auto-create DeviceRequest.intent");
1146        else if (Configuration.doAutoCreate())
1147          this.intent = new CodeableConcept(); // cc
1148      return this.intent;
1149    }
1150
1151    public boolean hasIntent() { 
1152      return this.intent != null && !this.intent.isEmpty();
1153    }
1154
1155    /**
1156     * @param value {@link #intent} (Whether the request is a proposal, plan, an original order or a reflex order.)
1157     */
1158    public DeviceRequest setIntent(CodeableConcept value)  { 
1159      this.intent = value;
1160      return this;
1161    }
1162
1163    /**
1164     * @return {@link #priority} (Indicates how quickly the {{title}} 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
1165     */
1166    public Enumeration<RequestPriority> getPriorityElement() { 
1167      if (this.priority == null)
1168        if (Configuration.errorOnAutoCreate())
1169          throw new Error("Attempt to auto-create DeviceRequest.priority");
1170        else if (Configuration.doAutoCreate())
1171          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
1172      return this.priority;
1173    }
1174
1175    public boolean hasPriorityElement() { 
1176      return this.priority != null && !this.priority.isEmpty();
1177    }
1178
1179    public boolean hasPriority() { 
1180      return this.priority != null && !this.priority.isEmpty();
1181    }
1182
1183    /**
1184     * @param value {@link #priority} (Indicates how quickly the {{title}} 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
1185     */
1186    public DeviceRequest setPriorityElement(Enumeration<RequestPriority> value) { 
1187      this.priority = value;
1188      return this;
1189    }
1190
1191    /**
1192     * @return Indicates how quickly the {{title}} should be addressed with respect to other requests.
1193     */
1194    public RequestPriority getPriority() { 
1195      return this.priority == null ? null : this.priority.getValue();
1196    }
1197
1198    /**
1199     * @param value Indicates how quickly the {{title}} should be addressed with respect to other requests.
1200     */
1201    public DeviceRequest setPriority(RequestPriority value) { 
1202      if (value == null)
1203        this.priority = null;
1204      else {
1205        if (this.priority == null)
1206          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
1207        this.priority.setValue(value);
1208      }
1209      return this;
1210    }
1211
1212    /**
1213     * @return {@link #code} (The details of the device to be used.)
1214     */
1215    public Type getCode() { 
1216      return this.code;
1217    }
1218
1219    /**
1220     * @return {@link #code} (The details of the device to be used.)
1221     */
1222    public Reference getCodeReference() throws FHIRException { 
1223      if (this.code == null)
1224        return null;
1225      if (!(this.code instanceof Reference))
1226        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.code.getClass().getName()+" was encountered");
1227      return (Reference) this.code;
1228    }
1229
1230    public boolean hasCodeReference() { 
1231      return this != null && this.code instanceof Reference;
1232    }
1233
1234    /**
1235     * @return {@link #code} (The details of the device to be used.)
1236     */
1237    public CodeableConcept getCodeCodeableConcept() throws FHIRException { 
1238      if (this.code == null)
1239        return null;
1240      if (!(this.code instanceof CodeableConcept))
1241        throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.code.getClass().getName()+" was encountered");
1242      return (CodeableConcept) this.code;
1243    }
1244
1245    public boolean hasCodeCodeableConcept() { 
1246      return this != null && this.code instanceof CodeableConcept;
1247    }
1248
1249    public boolean hasCode() { 
1250      return this.code != null && !this.code.isEmpty();
1251    }
1252
1253    /**
1254     * @param value {@link #code} (The details of the device to be used.)
1255     */
1256    public DeviceRequest setCode(Type value) throws FHIRFormatError { 
1257      if (value != null && !(value instanceof Reference || value instanceof CodeableConcept))
1258        throw new FHIRFormatError("Not the right type for DeviceRequest.code[x]: "+value.fhirType());
1259      this.code = value;
1260      return this;
1261    }
1262
1263    /**
1264     * @return {@link #subject} (The patient who will use the device.)
1265     */
1266    public Reference getSubject() { 
1267      if (this.subject == null)
1268        if (Configuration.errorOnAutoCreate())
1269          throw new Error("Attempt to auto-create DeviceRequest.subject");
1270        else if (Configuration.doAutoCreate())
1271          this.subject = new Reference(); // cc
1272      return this.subject;
1273    }
1274
1275    public boolean hasSubject() { 
1276      return this.subject != null && !this.subject.isEmpty();
1277    }
1278
1279    /**
1280     * @param value {@link #subject} (The patient who will use the device.)
1281     */
1282    public DeviceRequest setSubject(Reference value)  { 
1283      this.subject = value;
1284      return this;
1285    }
1286
1287    /**
1288     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The patient who will use the device.)
1289     */
1290    public Resource getSubjectTarget() { 
1291      return this.subjectTarget;
1292    }
1293
1294    /**
1295     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The patient who will use the device.)
1296     */
1297    public DeviceRequest setSubjectTarget(Resource value) { 
1298      this.subjectTarget = value;
1299      return this;
1300    }
1301
1302    /**
1303     * @return {@link #context} (An encounter that provides additional context in which this request is made.)
1304     */
1305    public Reference getContext() { 
1306      if (this.context == null)
1307        if (Configuration.errorOnAutoCreate())
1308          throw new Error("Attempt to auto-create DeviceRequest.context");
1309        else if (Configuration.doAutoCreate())
1310          this.context = new Reference(); // cc
1311      return this.context;
1312    }
1313
1314    public boolean hasContext() { 
1315      return this.context != null && !this.context.isEmpty();
1316    }
1317
1318    /**
1319     * @param value {@link #context} (An encounter that provides additional context in which this request is made.)
1320     */
1321    public DeviceRequest setContext(Reference value)  { 
1322      this.context = value;
1323      return this;
1324    }
1325
1326    /**
1327     * @return {@link #context} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (An encounter that provides additional context in which this request is made.)
1328     */
1329    public Resource getContextTarget() { 
1330      return this.contextTarget;
1331    }
1332
1333    /**
1334     * @param value {@link #context} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (An encounter that provides additional context in which this request is made.)
1335     */
1336    public DeviceRequest setContextTarget(Resource value) { 
1337      this.contextTarget = value;
1338      return this;
1339    }
1340
1341    /**
1342     * @return {@link #occurrence} (The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".)
1343     */
1344    public Type getOccurrence() { 
1345      return this.occurrence;
1346    }
1347
1348    /**
1349     * @return {@link #occurrence} (The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".)
1350     */
1351    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1352      if (this.occurrence == null)
1353        return null;
1354      if (!(this.occurrence instanceof DateTimeType))
1355        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1356      return (DateTimeType) this.occurrence;
1357    }
1358
1359    public boolean hasOccurrenceDateTimeType() { 
1360      return this != null && this.occurrence instanceof DateTimeType;
1361    }
1362
1363    /**
1364     * @return {@link #occurrence} (The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".)
1365     */
1366    public Period getOccurrencePeriod() throws FHIRException { 
1367      if (this.occurrence == null)
1368        return null;
1369      if (!(this.occurrence instanceof Period))
1370        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1371      return (Period) this.occurrence;
1372    }
1373
1374    public boolean hasOccurrencePeriod() { 
1375      return this != null && this.occurrence instanceof Period;
1376    }
1377
1378    /**
1379     * @return {@link #occurrence} (The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".)
1380     */
1381    public Timing getOccurrenceTiming() throws FHIRException { 
1382      if (this.occurrence == null)
1383        return null;
1384      if (!(this.occurrence instanceof Timing))
1385        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1386      return (Timing) this.occurrence;
1387    }
1388
1389    public boolean hasOccurrenceTiming() { 
1390      return this != null && this.occurrence instanceof Timing;
1391    }
1392
1393    public boolean hasOccurrence() { 
1394      return this.occurrence != null && !this.occurrence.isEmpty();
1395    }
1396
1397    /**
1398     * @param value {@link #occurrence} (The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. "Every 8 hours"; "Three times a day"; "1/2 an hour before breakfast for 10 days from 23-Dec 2011:"; "15 Oct 2013, 17 Oct 2013 and 1 Nov 2013".)
1399     */
1400    public DeviceRequest setOccurrence(Type value) throws FHIRFormatError { 
1401      if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof Timing))
1402        throw new FHIRFormatError("Not the right type for DeviceRequest.occurrence[x]: "+value.fhirType());
1403      this.occurrence = value;
1404      return this;
1405    }
1406
1407    /**
1408     * @return {@link #authoredOn} (When the request transitioned to being actionable.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1409     */
1410    public DateTimeType getAuthoredOnElement() { 
1411      if (this.authoredOn == null)
1412        if (Configuration.errorOnAutoCreate())
1413          throw new Error("Attempt to auto-create DeviceRequest.authoredOn");
1414        else if (Configuration.doAutoCreate())
1415          this.authoredOn = new DateTimeType(); // bb
1416      return this.authoredOn;
1417    }
1418
1419    public boolean hasAuthoredOnElement() { 
1420      return this.authoredOn != null && !this.authoredOn.isEmpty();
1421    }
1422
1423    public boolean hasAuthoredOn() { 
1424      return this.authoredOn != null && !this.authoredOn.isEmpty();
1425    }
1426
1427    /**
1428     * @param value {@link #authoredOn} (When the request transitioned to being actionable.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1429     */
1430    public DeviceRequest setAuthoredOnElement(DateTimeType value) { 
1431      this.authoredOn = value;
1432      return this;
1433    }
1434
1435    /**
1436     * @return When the request transitioned to being actionable.
1437     */
1438    public Date getAuthoredOn() { 
1439      return this.authoredOn == null ? null : this.authoredOn.getValue();
1440    }
1441
1442    /**
1443     * @param value When the request transitioned to being actionable.
1444     */
1445    public DeviceRequest setAuthoredOn(Date value) { 
1446      if (value == null)
1447        this.authoredOn = null;
1448      else {
1449        if (this.authoredOn == null)
1450          this.authoredOn = new DateTimeType();
1451        this.authoredOn.setValue(value);
1452      }
1453      return this;
1454    }
1455
1456    /**
1457     * @return {@link #requester} (The individual who initiated the request and has responsibility for its activation.)
1458     */
1459    public DeviceRequestRequesterComponent getRequester() { 
1460      if (this.requester == null)
1461        if (Configuration.errorOnAutoCreate())
1462          throw new Error("Attempt to auto-create DeviceRequest.requester");
1463        else if (Configuration.doAutoCreate())
1464          this.requester = new DeviceRequestRequesterComponent(); // cc
1465      return this.requester;
1466    }
1467
1468    public boolean hasRequester() { 
1469      return this.requester != null && !this.requester.isEmpty();
1470    }
1471
1472    /**
1473     * @param value {@link #requester} (The individual who initiated the request and has responsibility for its activation.)
1474     */
1475    public DeviceRequest setRequester(DeviceRequestRequesterComponent value)  { 
1476      this.requester = value;
1477      return this;
1478    }
1479
1480    /**
1481     * @return {@link #performerType} (Desired type of performer for doing the diagnostic testing.)
1482     */
1483    public CodeableConcept getPerformerType() { 
1484      if (this.performerType == null)
1485        if (Configuration.errorOnAutoCreate())
1486          throw new Error("Attempt to auto-create DeviceRequest.performerType");
1487        else if (Configuration.doAutoCreate())
1488          this.performerType = new CodeableConcept(); // cc
1489      return this.performerType;
1490    }
1491
1492    public boolean hasPerformerType() { 
1493      return this.performerType != null && !this.performerType.isEmpty();
1494    }
1495
1496    /**
1497     * @param value {@link #performerType} (Desired type of performer for doing the diagnostic testing.)
1498     */
1499    public DeviceRequest setPerformerType(CodeableConcept value)  { 
1500      this.performerType = value;
1501      return this;
1502    }
1503
1504    /**
1505     * @return {@link #performer} (The desired perfomer for doing the diagnostic testing.)
1506     */
1507    public Reference getPerformer() { 
1508      if (this.performer == null)
1509        if (Configuration.errorOnAutoCreate())
1510          throw new Error("Attempt to auto-create DeviceRequest.performer");
1511        else if (Configuration.doAutoCreate())
1512          this.performer = new Reference(); // cc
1513      return this.performer;
1514    }
1515
1516    public boolean hasPerformer() { 
1517      return this.performer != null && !this.performer.isEmpty();
1518    }
1519
1520    /**
1521     * @param value {@link #performer} (The desired perfomer for doing the diagnostic testing.)
1522     */
1523    public DeviceRequest setPerformer(Reference value)  { 
1524      this.performer = value;
1525      return this;
1526    }
1527
1528    /**
1529     * @return {@link #performer} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The desired perfomer for doing the diagnostic testing.)
1530     */
1531    public Resource getPerformerTarget() { 
1532      return this.performerTarget;
1533    }
1534
1535    /**
1536     * @param value {@link #performer} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The desired perfomer for doing the diagnostic testing.)
1537     */
1538    public DeviceRequest setPerformerTarget(Resource value) { 
1539      this.performerTarget = value;
1540      return this;
1541    }
1542
1543    /**
1544     * @return {@link #reasonCode} (Reason or justification for the use of this device.)
1545     */
1546    public List<CodeableConcept> getReasonCode() { 
1547      if (this.reasonCode == null)
1548        this.reasonCode = new ArrayList<CodeableConcept>();
1549      return this.reasonCode;
1550    }
1551
1552    /**
1553     * @return Returns a reference to <code>this</code> for easy method chaining
1554     */
1555    public DeviceRequest setReasonCode(List<CodeableConcept> theReasonCode) { 
1556      this.reasonCode = theReasonCode;
1557      return this;
1558    }
1559
1560    public boolean hasReasonCode() { 
1561      if (this.reasonCode == null)
1562        return false;
1563      for (CodeableConcept item : this.reasonCode)
1564        if (!item.isEmpty())
1565          return true;
1566      return false;
1567    }
1568
1569    public CodeableConcept addReasonCode() { //3
1570      CodeableConcept t = new CodeableConcept();
1571      if (this.reasonCode == null)
1572        this.reasonCode = new ArrayList<CodeableConcept>();
1573      this.reasonCode.add(t);
1574      return t;
1575    }
1576
1577    public DeviceRequest addReasonCode(CodeableConcept t) { //3
1578      if (t == null)
1579        return this;
1580      if (this.reasonCode == null)
1581        this.reasonCode = new ArrayList<CodeableConcept>();
1582      this.reasonCode.add(t);
1583      return this;
1584    }
1585
1586    /**
1587     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist
1588     */
1589    public CodeableConcept getReasonCodeFirstRep() { 
1590      if (getReasonCode().isEmpty()) {
1591        addReasonCode();
1592      }
1593      return getReasonCode().get(0);
1594    }
1595
1596    /**
1597     * @return {@link #reasonReference} (Reason or justification for the use of this device.)
1598     */
1599    public List<Reference> getReasonReference() { 
1600      if (this.reasonReference == null)
1601        this.reasonReference = new ArrayList<Reference>();
1602      return this.reasonReference;
1603    }
1604
1605    /**
1606     * @return Returns a reference to <code>this</code> for easy method chaining
1607     */
1608    public DeviceRequest setReasonReference(List<Reference> theReasonReference) { 
1609      this.reasonReference = theReasonReference;
1610      return this;
1611    }
1612
1613    public boolean hasReasonReference() { 
1614      if (this.reasonReference == null)
1615        return false;
1616      for (Reference item : this.reasonReference)
1617        if (!item.isEmpty())
1618          return true;
1619      return false;
1620    }
1621
1622    public Reference addReasonReference() { //3
1623      Reference t = new Reference();
1624      if (this.reasonReference == null)
1625        this.reasonReference = new ArrayList<Reference>();
1626      this.reasonReference.add(t);
1627      return t;
1628    }
1629
1630    public DeviceRequest addReasonReference(Reference t) { //3
1631      if (t == null)
1632        return this;
1633      if (this.reasonReference == null)
1634        this.reasonReference = new ArrayList<Reference>();
1635      this.reasonReference.add(t);
1636      return this;
1637    }
1638
1639    /**
1640     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist
1641     */
1642    public Reference getReasonReferenceFirstRep() { 
1643      if (getReasonReference().isEmpty()) {
1644        addReasonReference();
1645      }
1646      return getReasonReference().get(0);
1647    }
1648
1649    /**
1650     * @deprecated Use Reference#setResource(IBaseResource) instead
1651     */
1652    @Deprecated
1653    public List<Resource> getReasonReferenceTarget() { 
1654      if (this.reasonReferenceTarget == null)
1655        this.reasonReferenceTarget = new ArrayList<Resource>();
1656      return this.reasonReferenceTarget;
1657    }
1658
1659    /**
1660     * @return {@link #supportingInfo} (Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).)
1661     */
1662    public List<Reference> getSupportingInfo() { 
1663      if (this.supportingInfo == null)
1664        this.supportingInfo = new ArrayList<Reference>();
1665      return this.supportingInfo;
1666    }
1667
1668    /**
1669     * @return Returns a reference to <code>this</code> for easy method chaining
1670     */
1671    public DeviceRequest setSupportingInfo(List<Reference> theSupportingInfo) { 
1672      this.supportingInfo = theSupportingInfo;
1673      return this;
1674    }
1675
1676    public boolean hasSupportingInfo() { 
1677      if (this.supportingInfo == null)
1678        return false;
1679      for (Reference item : this.supportingInfo)
1680        if (!item.isEmpty())
1681          return true;
1682      return false;
1683    }
1684
1685    public Reference addSupportingInfo() { //3
1686      Reference t = new Reference();
1687      if (this.supportingInfo == null)
1688        this.supportingInfo = new ArrayList<Reference>();
1689      this.supportingInfo.add(t);
1690      return t;
1691    }
1692
1693    public DeviceRequest addSupportingInfo(Reference t) { //3
1694      if (t == null)
1695        return this;
1696      if (this.supportingInfo == null)
1697        this.supportingInfo = new ArrayList<Reference>();
1698      this.supportingInfo.add(t);
1699      return this;
1700    }
1701
1702    /**
1703     * @return The first repetition of repeating field {@link #supportingInfo}, creating it if it does not already exist
1704     */
1705    public Reference getSupportingInfoFirstRep() { 
1706      if (getSupportingInfo().isEmpty()) {
1707        addSupportingInfo();
1708      }
1709      return getSupportingInfo().get(0);
1710    }
1711
1712    /**
1713     * @deprecated Use Reference#setResource(IBaseResource) instead
1714     */
1715    @Deprecated
1716    public List<Resource> getSupportingInfoTarget() { 
1717      if (this.supportingInfoTarget == null)
1718        this.supportingInfoTarget = new ArrayList<Resource>();
1719      return this.supportingInfoTarget;
1720    }
1721
1722    /**
1723     * @return {@link #note} (Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.)
1724     */
1725    public List<Annotation> getNote() { 
1726      if (this.note == null)
1727        this.note = new ArrayList<Annotation>();
1728      return this.note;
1729    }
1730
1731    /**
1732     * @return Returns a reference to <code>this</code> for easy method chaining
1733     */
1734    public DeviceRequest setNote(List<Annotation> theNote) { 
1735      this.note = theNote;
1736      return this;
1737    }
1738
1739    public boolean hasNote() { 
1740      if (this.note == null)
1741        return false;
1742      for (Annotation item : this.note)
1743        if (!item.isEmpty())
1744          return true;
1745      return false;
1746    }
1747
1748    public Annotation addNote() { //3
1749      Annotation t = new Annotation();
1750      if (this.note == null)
1751        this.note = new ArrayList<Annotation>();
1752      this.note.add(t);
1753      return t;
1754    }
1755
1756    public DeviceRequest addNote(Annotation t) { //3
1757      if (t == null)
1758        return this;
1759      if (this.note == null)
1760        this.note = new ArrayList<Annotation>();
1761      this.note.add(t);
1762      return this;
1763    }
1764
1765    /**
1766     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1767     */
1768    public Annotation getNoteFirstRep() { 
1769      if (getNote().isEmpty()) {
1770        addNote();
1771      }
1772      return getNote().get(0);
1773    }
1774
1775    /**
1776     * @return {@link #relevantHistory} (Key events in the history of the request.)
1777     */
1778    public List<Reference> getRelevantHistory() { 
1779      if (this.relevantHistory == null)
1780        this.relevantHistory = new ArrayList<Reference>();
1781      return this.relevantHistory;
1782    }
1783
1784    /**
1785     * @return Returns a reference to <code>this</code> for easy method chaining
1786     */
1787    public DeviceRequest setRelevantHistory(List<Reference> theRelevantHistory) { 
1788      this.relevantHistory = theRelevantHistory;
1789      return this;
1790    }
1791
1792    public boolean hasRelevantHistory() { 
1793      if (this.relevantHistory == null)
1794        return false;
1795      for (Reference item : this.relevantHistory)
1796        if (!item.isEmpty())
1797          return true;
1798      return false;
1799    }
1800
1801    public Reference addRelevantHistory() { //3
1802      Reference t = new Reference();
1803      if (this.relevantHistory == null)
1804        this.relevantHistory = new ArrayList<Reference>();
1805      this.relevantHistory.add(t);
1806      return t;
1807    }
1808
1809    public DeviceRequest addRelevantHistory(Reference t) { //3
1810      if (t == null)
1811        return this;
1812      if (this.relevantHistory == null)
1813        this.relevantHistory = new ArrayList<Reference>();
1814      this.relevantHistory.add(t);
1815      return this;
1816    }
1817
1818    /**
1819     * @return The first repetition of repeating field {@link #relevantHistory}, creating it if it does not already exist
1820     */
1821    public Reference getRelevantHistoryFirstRep() { 
1822      if (getRelevantHistory().isEmpty()) {
1823        addRelevantHistory();
1824      }
1825      return getRelevantHistory().get(0);
1826    }
1827
1828    /**
1829     * @deprecated Use Reference#setResource(IBaseResource) instead
1830     */
1831    @Deprecated
1832    public List<Provenance> getRelevantHistoryTarget() { 
1833      if (this.relevantHistoryTarget == null)
1834        this.relevantHistoryTarget = new ArrayList<Provenance>();
1835      return this.relevantHistoryTarget;
1836    }
1837
1838    /**
1839     * @deprecated Use Reference#setResource(IBaseResource) instead
1840     */
1841    @Deprecated
1842    public Provenance addRelevantHistoryTarget() { 
1843      Provenance r = new Provenance();
1844      if (this.relevantHistoryTarget == null)
1845        this.relevantHistoryTarget = new ArrayList<Provenance>();
1846      this.relevantHistoryTarget.add(r);
1847      return r;
1848    }
1849
1850      protected void listChildren(List<Property> children) {
1851        super.listChildren(children);
1852        children.add(new Property("identifier", "Identifier", "Identifiers assigned to this order by the orderer or by the receiver.", 0, java.lang.Integer.MAX_VALUE, identifier));
1853        children.add(new Property("definition", "Reference(ActivityDefinition|PlanDefinition)", "Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.", 0, java.lang.Integer.MAX_VALUE, definition));
1854        children.add(new Property("basedOn", "Reference(Any)", "Plan/proposal/order fulfilled by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn));
1855        children.add(new Property("priorRequest", "Reference(Any)", "The request takes the place of the referenced completed or terminated request(s).", 0, java.lang.Integer.MAX_VALUE, priorRequest));
1856        children.add(new Property("groupIdentifier", "Identifier", "Composite request this is part of.", 0, 1, groupIdentifier));
1857        children.add(new Property("status", "code", "The status of the request.", 0, 1, status));
1858        children.add(new Property("intent", "CodeableConcept", "Whether the request is a proposal, plan, an original order or a reflex order.", 0, 1, intent));
1859        children.add(new Property("priority", "code", "Indicates how quickly the {{title}} should be addressed with respect to other requests.", 0, 1, priority));
1860        children.add(new Property("code[x]", "Reference(Device)|CodeableConcept", "The details of the device to be used.", 0, 1, code));
1861        children.add(new Property("subject", "Reference(Patient|Group|Location|Device)", "The patient who will use the device.", 0, 1, subject));
1862        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "An encounter that provides additional context in which this request is made.", 0, 1, context));
1863        children.add(new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence));
1864        children.add(new Property("authoredOn", "dateTime", "When the request transitioned to being actionable.", 0, 1, authoredOn));
1865        children.add(new Property("requester", "", "The individual who initiated the request and has responsibility for its activation.", 0, 1, requester));
1866        children.add(new Property("performerType", "CodeableConcept", "Desired type of performer for doing the diagnostic testing.", 0, 1, performerType));
1867        children.add(new Property("performer", "Reference(Practitioner|Organization|Patient|Device|RelatedPerson|HealthcareService)", "The desired perfomer for doing the diagnostic testing.", 0, 1, performer));
1868        children.add(new Property("reasonCode", "CodeableConcept", "Reason or justification for the use of this device.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
1869        children.add(new Property("reasonReference", "Reference(Any)", "Reason or justification for the use of this device.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
1870        children.add(new Property("supportingInfo", "Reference(Any)", "Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).", 0, java.lang.Integer.MAX_VALUE, supportingInfo));
1871        children.add(new Property("note", "Annotation", "Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.", 0, java.lang.Integer.MAX_VALUE, note));
1872        children.add(new Property("relevantHistory", "Reference(Provenance)", "Key events in the history of the request.", 0, java.lang.Integer.MAX_VALUE, relevantHistory));
1873      }
1874
1875      @Override
1876      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1877        switch (_hash) {
1878        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers assigned to this order by the orderer or by the receiver.", 0, java.lang.Integer.MAX_VALUE, identifier);
1879        case -1014418093: /*definition*/  return new Property("definition", "Reference(ActivityDefinition|PlanDefinition)", "Protocol or definition followed by this request. For example: The proposed act must be performed if the indicated conditions occur, e.g.., shortness of breath, SpO2 less than x%.", 0, java.lang.Integer.MAX_VALUE, definition);
1880        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "Plan/proposal/order fulfilled by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn);
1881        case 237568101: /*priorRequest*/  return new Property("priorRequest", "Reference(Any)", "The request takes the place of the referenced completed or terminated request(s).", 0, java.lang.Integer.MAX_VALUE, priorRequest);
1882        case -445338488: /*groupIdentifier*/  return new Property("groupIdentifier", "Identifier", "Composite request this is part of.", 0, 1, groupIdentifier);
1883        case -892481550: /*status*/  return new Property("status", "code", "The status of the request.", 0, 1, status);
1884        case -1183762788: /*intent*/  return new Property("intent", "CodeableConcept", "Whether the request is a proposal, plan, an original order or a reflex order.", 0, 1, intent);
1885        case -1165461084: /*priority*/  return new Property("priority", "code", "Indicates how quickly the {{title}} should be addressed with respect to other requests.", 0, 1, priority);
1886        case 941839219: /*code[x]*/  return new Property("code[x]", "Reference(Device)|CodeableConcept", "The details of the device to be used.", 0, 1, code);
1887        case 3059181: /*code*/  return new Property("code[x]", "Reference(Device)|CodeableConcept", "The details of the device to be used.", 0, 1, code);
1888        case 1565461470: /*codeReference*/  return new Property("code[x]", "Reference(Device)|CodeableConcept", "The details of the device to be used.", 0, 1, code);
1889        case 4899316: /*codeCodeableConcept*/  return new Property("code[x]", "Reference(Device)|CodeableConcept", "The details of the device to be used.", 0, 1, code);
1890        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group|Location|Device)", "The patient who will use the device.", 0, 1, subject);
1891        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "An encounter that provides additional context in which this request is made.", 0, 1, context);
1892        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence);
1893        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence);
1894        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence);
1895        case 1397156594: /*occurrencePeriod*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence);
1896        case 1515218299: /*occurrenceTiming*/  return new Property("occurrence[x]", "dateTime|Period|Timing", "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", 0, 1, occurrence);
1897        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "When the request transitioned to being actionable.", 0, 1, authoredOn);
1898        case 693933948: /*requester*/  return new Property("requester", "", "The individual who initiated the request and has responsibility for its activation.", 0, 1, requester);
1899        case -901444568: /*performerType*/  return new Property("performerType", "CodeableConcept", "Desired type of performer for doing the diagnostic testing.", 0, 1, performerType);
1900        case 481140686: /*performer*/  return new Property("performer", "Reference(Practitioner|Organization|Patient|Device|RelatedPerson|HealthcareService)", "The desired perfomer for doing the diagnostic testing.", 0, 1, performer);
1901        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "Reason or justification for the use of this device.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
1902        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Any)", "Reason or justification for the use of this device.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
1903        case 1922406657: /*supportingInfo*/  return new Property("supportingInfo", "Reference(Any)", "Additional clinical information about the patient that may influence the request fulfilment.  For example, this may includes body where on the subject's the device will be used ( i.e. the target site).", 0, java.lang.Integer.MAX_VALUE, supportingInfo);
1904        case 3387378: /*note*/  return new Property("note", "Annotation", "Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.", 0, java.lang.Integer.MAX_VALUE, note);
1905        case 1538891575: /*relevantHistory*/  return new Property("relevantHistory", "Reference(Provenance)", "Key events in the history of the request.", 0, java.lang.Integer.MAX_VALUE, relevantHistory);
1906        default: return super.getNamedProperty(_hash, _name, _checkValid);
1907        }
1908
1909      }
1910
1911      @Override
1912      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1913        switch (hash) {
1914        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1915        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : this.definition.toArray(new Base[this.definition.size()]); // Reference
1916        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
1917        case 237568101: /*priorRequest*/ return this.priorRequest == null ? new Base[0] : this.priorRequest.toArray(new Base[this.priorRequest.size()]); // Reference
1918        case -445338488: /*groupIdentifier*/ return this.groupIdentifier == null ? new Base[0] : new Base[] {this.groupIdentifier}; // Identifier
1919        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<DeviceRequestStatus>
1920        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // CodeableConcept
1921        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
1922        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Type
1923        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
1924        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
1925        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // Type
1926        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
1927        case 693933948: /*requester*/ return this.requester == null ? new Base[0] : new Base[] {this.requester}; // DeviceRequestRequesterComponent
1928        case -901444568: /*performerType*/ return this.performerType == null ? new Base[0] : new Base[] {this.performerType}; // CodeableConcept
1929        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : new Base[] {this.performer}; // Reference
1930        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
1931        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
1932        case 1922406657: /*supportingInfo*/ return this.supportingInfo == null ? new Base[0] : this.supportingInfo.toArray(new Base[this.supportingInfo.size()]); // Reference
1933        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1934        case 1538891575: /*relevantHistory*/ return this.relevantHistory == null ? new Base[0] : this.relevantHistory.toArray(new Base[this.relevantHistory.size()]); // Reference
1935        default: return super.getProperty(hash, name, checkValid);
1936        }
1937
1938      }
1939
1940      @Override
1941      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1942        switch (hash) {
1943        case -1618432855: // identifier
1944          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1945          return value;
1946        case -1014418093: // definition
1947          this.getDefinition().add(castToReference(value)); // Reference
1948          return value;
1949        case -332612366: // basedOn
1950          this.getBasedOn().add(castToReference(value)); // Reference
1951          return value;
1952        case 237568101: // priorRequest
1953          this.getPriorRequest().add(castToReference(value)); // Reference
1954          return value;
1955        case -445338488: // groupIdentifier
1956          this.groupIdentifier = castToIdentifier(value); // Identifier
1957          return value;
1958        case -892481550: // status
1959          value = new DeviceRequestStatusEnumFactory().fromType(castToCode(value));
1960          this.status = (Enumeration) value; // Enumeration<DeviceRequestStatus>
1961          return value;
1962        case -1183762788: // intent
1963          this.intent = castToCodeableConcept(value); // CodeableConcept
1964          return value;
1965        case -1165461084: // priority
1966          value = new RequestPriorityEnumFactory().fromType(castToCode(value));
1967          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
1968          return value;
1969        case 3059181: // code
1970          this.code = castToType(value); // Type
1971          return value;
1972        case -1867885268: // subject
1973          this.subject = castToReference(value); // Reference
1974          return value;
1975        case 951530927: // context
1976          this.context = castToReference(value); // Reference
1977          return value;
1978        case 1687874001: // occurrence
1979          this.occurrence = castToType(value); // Type
1980          return value;
1981        case -1500852503: // authoredOn
1982          this.authoredOn = castToDateTime(value); // DateTimeType
1983          return value;
1984        case 693933948: // requester
1985          this.requester = (DeviceRequestRequesterComponent) value; // DeviceRequestRequesterComponent
1986          return value;
1987        case -901444568: // performerType
1988          this.performerType = castToCodeableConcept(value); // CodeableConcept
1989          return value;
1990        case 481140686: // performer
1991          this.performer = castToReference(value); // Reference
1992          return value;
1993        case 722137681: // reasonCode
1994          this.getReasonCode().add(castToCodeableConcept(value)); // CodeableConcept
1995          return value;
1996        case -1146218137: // reasonReference
1997          this.getReasonReference().add(castToReference(value)); // Reference
1998          return value;
1999        case 1922406657: // supportingInfo
2000          this.getSupportingInfo().add(castToReference(value)); // Reference
2001          return value;
2002        case 3387378: // note
2003          this.getNote().add(castToAnnotation(value)); // Annotation
2004          return value;
2005        case 1538891575: // relevantHistory
2006          this.getRelevantHistory().add(castToReference(value)); // Reference
2007          return value;
2008        default: return super.setProperty(hash, name, value);
2009        }
2010
2011      }
2012
2013      @Override
2014      public Base setProperty(String name, Base value) throws FHIRException {
2015        if (name.equals("identifier")) {
2016          this.getIdentifier().add(castToIdentifier(value));
2017        } else if (name.equals("definition")) {
2018          this.getDefinition().add(castToReference(value));
2019        } else if (name.equals("basedOn")) {
2020          this.getBasedOn().add(castToReference(value));
2021        } else if (name.equals("priorRequest")) {
2022          this.getPriorRequest().add(castToReference(value));
2023        } else if (name.equals("groupIdentifier")) {
2024          this.groupIdentifier = castToIdentifier(value); // Identifier
2025        } else if (name.equals("status")) {
2026          value = new DeviceRequestStatusEnumFactory().fromType(castToCode(value));
2027          this.status = (Enumeration) value; // Enumeration<DeviceRequestStatus>
2028        } else if (name.equals("intent")) {
2029          this.intent = castToCodeableConcept(value); // CodeableConcept
2030        } else if (name.equals("priority")) {
2031          value = new RequestPriorityEnumFactory().fromType(castToCode(value));
2032          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
2033        } else if (name.equals("code[x]")) {
2034          this.code = castToType(value); // Type
2035        } else if (name.equals("subject")) {
2036          this.subject = castToReference(value); // Reference
2037        } else if (name.equals("context")) {
2038          this.context = castToReference(value); // Reference
2039        } else if (name.equals("occurrence[x]")) {
2040          this.occurrence = castToType(value); // Type
2041        } else if (name.equals("authoredOn")) {
2042          this.authoredOn = castToDateTime(value); // DateTimeType
2043        } else if (name.equals("requester")) {
2044          this.requester = (DeviceRequestRequesterComponent) value; // DeviceRequestRequesterComponent
2045        } else if (name.equals("performerType")) {
2046          this.performerType = castToCodeableConcept(value); // CodeableConcept
2047        } else if (name.equals("performer")) {
2048          this.performer = castToReference(value); // Reference
2049        } else if (name.equals("reasonCode")) {
2050          this.getReasonCode().add(castToCodeableConcept(value));
2051        } else if (name.equals("reasonReference")) {
2052          this.getReasonReference().add(castToReference(value));
2053        } else if (name.equals("supportingInfo")) {
2054          this.getSupportingInfo().add(castToReference(value));
2055        } else if (name.equals("note")) {
2056          this.getNote().add(castToAnnotation(value));
2057        } else if (name.equals("relevantHistory")) {
2058          this.getRelevantHistory().add(castToReference(value));
2059        } else
2060          return super.setProperty(name, value);
2061        return value;
2062      }
2063
2064      @Override
2065      public Base makeProperty(int hash, String name) throws FHIRException {
2066        switch (hash) {
2067        case -1618432855:  return addIdentifier(); 
2068        case -1014418093:  return addDefinition(); 
2069        case -332612366:  return addBasedOn(); 
2070        case 237568101:  return addPriorRequest(); 
2071        case -445338488:  return getGroupIdentifier(); 
2072        case -892481550:  return getStatusElement();
2073        case -1183762788:  return getIntent(); 
2074        case -1165461084:  return getPriorityElement();
2075        case 941839219:  return getCode(); 
2076        case 3059181:  return getCode(); 
2077        case -1867885268:  return getSubject(); 
2078        case 951530927:  return getContext(); 
2079        case -2022646513:  return getOccurrence(); 
2080        case 1687874001:  return getOccurrence(); 
2081        case -1500852503:  return getAuthoredOnElement();
2082        case 693933948:  return getRequester(); 
2083        case -901444568:  return getPerformerType(); 
2084        case 481140686:  return getPerformer(); 
2085        case 722137681:  return addReasonCode(); 
2086        case -1146218137:  return addReasonReference(); 
2087        case 1922406657:  return addSupportingInfo(); 
2088        case 3387378:  return addNote(); 
2089        case 1538891575:  return addRelevantHistory(); 
2090        default: return super.makeProperty(hash, name);
2091        }
2092
2093      }
2094
2095      @Override
2096      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2097        switch (hash) {
2098        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2099        case -1014418093: /*definition*/ return new String[] {"Reference"};
2100        case -332612366: /*basedOn*/ return new String[] {"Reference"};
2101        case 237568101: /*priorRequest*/ return new String[] {"Reference"};
2102        case -445338488: /*groupIdentifier*/ return new String[] {"Identifier"};
2103        case -892481550: /*status*/ return new String[] {"code"};
2104        case -1183762788: /*intent*/ return new String[] {"CodeableConcept"};
2105        case -1165461084: /*priority*/ return new String[] {"code"};
2106        case 3059181: /*code*/ return new String[] {"Reference", "CodeableConcept"};
2107        case -1867885268: /*subject*/ return new String[] {"Reference"};
2108        case 951530927: /*context*/ return new String[] {"Reference"};
2109        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "Period", "Timing"};
2110        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
2111        case 693933948: /*requester*/ return new String[] {};
2112        case -901444568: /*performerType*/ return new String[] {"CodeableConcept"};
2113        case 481140686: /*performer*/ return new String[] {"Reference"};
2114        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
2115        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
2116        case 1922406657: /*supportingInfo*/ return new String[] {"Reference"};
2117        case 3387378: /*note*/ return new String[] {"Annotation"};
2118        case 1538891575: /*relevantHistory*/ return new String[] {"Reference"};
2119        default: return super.getTypesForProperty(hash, name);
2120        }
2121
2122      }
2123
2124      @Override
2125      public Base addChild(String name) throws FHIRException {
2126        if (name.equals("identifier")) {
2127          return addIdentifier();
2128        }
2129        else if (name.equals("definition")) {
2130          return addDefinition();
2131        }
2132        else if (name.equals("basedOn")) {
2133          return addBasedOn();
2134        }
2135        else if (name.equals("priorRequest")) {
2136          return addPriorRequest();
2137        }
2138        else if (name.equals("groupIdentifier")) {
2139          this.groupIdentifier = new Identifier();
2140          return this.groupIdentifier;
2141        }
2142        else if (name.equals("status")) {
2143          throw new FHIRException("Cannot call addChild on a primitive type DeviceRequest.status");
2144        }
2145        else if (name.equals("intent")) {
2146          this.intent = new CodeableConcept();
2147          return this.intent;
2148        }
2149        else if (name.equals("priority")) {
2150          throw new FHIRException("Cannot call addChild on a primitive type DeviceRequest.priority");
2151        }
2152        else if (name.equals("codeReference")) {
2153          this.code = new Reference();
2154          return this.code;
2155        }
2156        else if (name.equals("codeCodeableConcept")) {
2157          this.code = new CodeableConcept();
2158          return this.code;
2159        }
2160        else if (name.equals("subject")) {
2161          this.subject = new Reference();
2162          return this.subject;
2163        }
2164        else if (name.equals("context")) {
2165          this.context = new Reference();
2166          return this.context;
2167        }
2168        else if (name.equals("occurrenceDateTime")) {
2169          this.occurrence = new DateTimeType();
2170          return this.occurrence;
2171        }
2172        else if (name.equals("occurrencePeriod")) {
2173          this.occurrence = new Period();
2174          return this.occurrence;
2175        }
2176        else if (name.equals("occurrenceTiming")) {
2177          this.occurrence = new Timing();
2178          return this.occurrence;
2179        }
2180        else if (name.equals("authoredOn")) {
2181          throw new FHIRException("Cannot call addChild on a primitive type DeviceRequest.authoredOn");
2182        }
2183        else if (name.equals("requester")) {
2184          this.requester = new DeviceRequestRequesterComponent();
2185          return this.requester;
2186        }
2187        else if (name.equals("performerType")) {
2188          this.performerType = new CodeableConcept();
2189          return this.performerType;
2190        }
2191        else if (name.equals("performer")) {
2192          this.performer = new Reference();
2193          return this.performer;
2194        }
2195        else if (name.equals("reasonCode")) {
2196          return addReasonCode();
2197        }
2198        else if (name.equals("reasonReference")) {
2199          return addReasonReference();
2200        }
2201        else if (name.equals("supportingInfo")) {
2202          return addSupportingInfo();
2203        }
2204        else if (name.equals("note")) {
2205          return addNote();
2206        }
2207        else if (name.equals("relevantHistory")) {
2208          return addRelevantHistory();
2209        }
2210        else
2211          return super.addChild(name);
2212      }
2213
2214  public String fhirType() {
2215    return "DeviceRequest";
2216
2217  }
2218
2219      public DeviceRequest copy() {
2220        DeviceRequest dst = new DeviceRequest();
2221        copyValues(dst);
2222        if (identifier != null) {
2223          dst.identifier = new ArrayList<Identifier>();
2224          for (Identifier i : identifier)
2225            dst.identifier.add(i.copy());
2226        };
2227        if (definition != null) {
2228          dst.definition = new ArrayList<Reference>();
2229          for (Reference i : definition)
2230            dst.definition.add(i.copy());
2231        };
2232        if (basedOn != null) {
2233          dst.basedOn = new ArrayList<Reference>();
2234          for (Reference i : basedOn)
2235            dst.basedOn.add(i.copy());
2236        };
2237        if (priorRequest != null) {
2238          dst.priorRequest = new ArrayList<Reference>();
2239          for (Reference i : priorRequest)
2240            dst.priorRequest.add(i.copy());
2241        };
2242        dst.groupIdentifier = groupIdentifier == null ? null : groupIdentifier.copy();
2243        dst.status = status == null ? null : status.copy();
2244        dst.intent = intent == null ? null : intent.copy();
2245        dst.priority = priority == null ? null : priority.copy();
2246        dst.code = code == null ? null : code.copy();
2247        dst.subject = subject == null ? null : subject.copy();
2248        dst.context = context == null ? null : context.copy();
2249        dst.occurrence = occurrence == null ? null : occurrence.copy();
2250        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
2251        dst.requester = requester == null ? null : requester.copy();
2252        dst.performerType = performerType == null ? null : performerType.copy();
2253        dst.performer = performer == null ? null : performer.copy();
2254        if (reasonCode != null) {
2255          dst.reasonCode = new ArrayList<CodeableConcept>();
2256          for (CodeableConcept i : reasonCode)
2257            dst.reasonCode.add(i.copy());
2258        };
2259        if (reasonReference != null) {
2260          dst.reasonReference = new ArrayList<Reference>();
2261          for (Reference i : reasonReference)
2262            dst.reasonReference.add(i.copy());
2263        };
2264        if (supportingInfo != null) {
2265          dst.supportingInfo = new ArrayList<Reference>();
2266          for (Reference i : supportingInfo)
2267            dst.supportingInfo.add(i.copy());
2268        };
2269        if (note != null) {
2270          dst.note = new ArrayList<Annotation>();
2271          for (Annotation i : note)
2272            dst.note.add(i.copy());
2273        };
2274        if (relevantHistory != null) {
2275          dst.relevantHistory = new ArrayList<Reference>();
2276          for (Reference i : relevantHistory)
2277            dst.relevantHistory.add(i.copy());
2278        };
2279        return dst;
2280      }
2281
2282      protected DeviceRequest typedCopy() {
2283        return copy();
2284      }
2285
2286      @Override
2287      public boolean equalsDeep(Base other_) {
2288        if (!super.equalsDeep(other_))
2289          return false;
2290        if (!(other_ instanceof DeviceRequest))
2291          return false;
2292        DeviceRequest o = (DeviceRequest) other_;
2293        return compareDeep(identifier, o.identifier, true) && compareDeep(definition, o.definition, true)
2294           && compareDeep(basedOn, o.basedOn, true) && compareDeep(priorRequest, o.priorRequest, true) && compareDeep(groupIdentifier, o.groupIdentifier, true)
2295           && compareDeep(status, o.status, true) && compareDeep(intent, o.intent, true) && compareDeep(priority, o.priority, true)
2296           && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true) && compareDeep(context, o.context, true)
2297           && compareDeep(occurrence, o.occurrence, true) && compareDeep(authoredOn, o.authoredOn, true) && compareDeep(requester, o.requester, true)
2298           && compareDeep(performerType, o.performerType, true) && compareDeep(performer, o.performer, true)
2299           && compareDeep(reasonCode, o.reasonCode, true) && compareDeep(reasonReference, o.reasonReference, true)
2300           && compareDeep(supportingInfo, o.supportingInfo, true) && compareDeep(note, o.note, true) && compareDeep(relevantHistory, o.relevantHistory, true)
2301          ;
2302      }
2303
2304      @Override
2305      public boolean equalsShallow(Base other_) {
2306        if (!super.equalsShallow(other_))
2307          return false;
2308        if (!(other_ instanceof DeviceRequest))
2309          return false;
2310        DeviceRequest o = (DeviceRequest) other_;
2311        return compareValues(status, o.status, true) && compareValues(priority, o.priority, true) && compareValues(authoredOn, o.authoredOn, true)
2312          ;
2313      }
2314
2315      public boolean isEmpty() {
2316        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, definition, basedOn
2317          , priorRequest, groupIdentifier, status, intent, priority, code, subject, context
2318          , occurrence, authoredOn, requester, performerType, performer, reasonCode, reasonReference
2319          , supportingInfo, note, relevantHistory);
2320      }
2321
2322  @Override
2323  public ResourceType getResourceType() {
2324    return ResourceType.DeviceRequest;
2325   }
2326
2327 /**
2328   * Search parameter: <b>requester</b>
2329   * <p>
2330   * Description: <b>Who/what is requesting service </b><br>
2331   * Type: <b>reference</b><br>
2332   * Path: <b>DeviceRequest.requester.agent</b><br>
2333   * </p>
2334   */
2335  @SearchParamDefinition(name="requester", path="DeviceRequest.requester.agent", description="Who/what is requesting service ", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Device.class, Organization.class, Practitioner.class } )
2336  public static final String SP_REQUESTER = "requester";
2337 /**
2338   * <b>Fluent Client</b> search parameter constant for <b>requester</b>
2339   * <p>
2340   * Description: <b>Who/what is requesting service </b><br>
2341   * Type: <b>reference</b><br>
2342   * Path: <b>DeviceRequest.requester.agent</b><br>
2343   * </p>
2344   */
2345  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTER);
2346
2347/**
2348   * Constant for fluent queries to be used to add include statements. Specifies
2349   * the path value of "<b>DeviceRequest:requester</b>".
2350   */
2351  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTER = new ca.uhn.fhir.model.api.Include("DeviceRequest:requester").toLocked();
2352
2353 /**
2354   * Search parameter: <b>identifier</b>
2355   * <p>
2356   * Description: <b>Business identifier for request/order</b><br>
2357   * Type: <b>token</b><br>
2358   * Path: <b>DeviceRequest.identifier</b><br>
2359   * </p>
2360   */
2361  @SearchParamDefinition(name="identifier", path="DeviceRequest.identifier", description="Business identifier for request/order", type="token" )
2362  public static final String SP_IDENTIFIER = "identifier";
2363 /**
2364   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2365   * <p>
2366   * Description: <b>Business identifier for request/order</b><br>
2367   * Type: <b>token</b><br>
2368   * Path: <b>DeviceRequest.identifier</b><br>
2369   * </p>
2370   */
2371  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2372
2373 /**
2374   * Search parameter: <b>code</b>
2375   * <p>
2376   * Description: <b>Code for what is being requested/ordered</b><br>
2377   * Type: <b>token</b><br>
2378   * Path: <b>DeviceRequest.codeCodeableConcept</b><br>
2379   * </p>
2380   */
2381  @SearchParamDefinition(name="code", path="DeviceRequest.code.as(CodeableConcept)", description="Code for what is being requested/ordered", type="token" )
2382  public static final String SP_CODE = "code";
2383 /**
2384   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2385   * <p>
2386   * Description: <b>Code for what is being requested/ordered</b><br>
2387   * Type: <b>token</b><br>
2388   * Path: <b>DeviceRequest.codeCodeableConcept</b><br>
2389   * </p>
2390   */
2391  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2392
2393 /**
2394   * Search parameter: <b>performer</b>
2395   * <p>
2396   * Description: <b>Desired performer for service</b><br>
2397   * Type: <b>reference</b><br>
2398   * Path: <b>DeviceRequest.performer</b><br>
2399   * </p>
2400   */
2401  @SearchParamDefinition(name="performer", path="DeviceRequest.performer", description="Desired performer for service", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Device.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
2402  public static final String SP_PERFORMER = "performer";
2403 /**
2404   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
2405   * <p>
2406   * Description: <b>Desired performer for service</b><br>
2407   * Type: <b>reference</b><br>
2408   * Path: <b>DeviceRequest.performer</b><br>
2409   * </p>
2410   */
2411  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
2412
2413/**
2414   * Constant for fluent queries to be used to add include statements. Specifies
2415   * the path value of "<b>DeviceRequest:performer</b>".
2416   */
2417  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("DeviceRequest:performer").toLocked();
2418
2419 /**
2420   * Search parameter: <b>event-date</b>
2421   * <p>
2422   * Description: <b>When service should occur</b><br>
2423   * Type: <b>date</b><br>
2424   * Path: <b>DeviceRequest.occurrenceDateTime, DeviceRequest.occurrencePeriod</b><br>
2425   * </p>
2426   */
2427  @SearchParamDefinition(name="event-date", path="DeviceRequest.occurrence.as(DateTime) | DeviceRequest.occurrence.as(Period)", description="When service should occur", type="date" )
2428  public static final String SP_EVENT_DATE = "event-date";
2429 /**
2430   * <b>Fluent Client</b> search parameter constant for <b>event-date</b>
2431   * <p>
2432   * Description: <b>When service should occur</b><br>
2433   * Type: <b>date</b><br>
2434   * Path: <b>DeviceRequest.occurrenceDateTime, DeviceRequest.occurrencePeriod</b><br>
2435   * </p>
2436   */
2437  public static final ca.uhn.fhir.rest.gclient.DateClientParam EVENT_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_EVENT_DATE);
2438
2439 /**
2440   * Search parameter: <b>subject</b>
2441   * <p>
2442   * Description: <b>Individual the service is ordered for</b><br>
2443   * Type: <b>reference</b><br>
2444   * Path: <b>DeviceRequest.subject</b><br>
2445   * </p>
2446   */
2447  @SearchParamDefinition(name="subject", path="DeviceRequest.subject", description="Individual the service is ordered for", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Device.class, Group.class, Location.class, Patient.class } )
2448  public static final String SP_SUBJECT = "subject";
2449 /**
2450   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2451   * <p>
2452   * Description: <b>Individual the service is ordered for</b><br>
2453   * Type: <b>reference</b><br>
2454   * Path: <b>DeviceRequest.subject</b><br>
2455   * </p>
2456   */
2457  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2458
2459/**
2460   * Constant for fluent queries to be used to add include statements. Specifies
2461   * the path value of "<b>DeviceRequest:subject</b>".
2462   */
2463  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("DeviceRequest:subject").toLocked();
2464
2465 /**
2466   * Search parameter: <b>encounter</b>
2467   * <p>
2468   * Description: <b>Encounter or Episode during which request was created</b><br>
2469   * Type: <b>reference</b><br>
2470   * Path: <b>DeviceRequest.context</b><br>
2471   * </p>
2472   */
2473  @SearchParamDefinition(name="encounter", path="DeviceRequest.context", description="Encounter or Episode during which request was created", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
2474  public static final String SP_ENCOUNTER = "encounter";
2475 /**
2476   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
2477   * <p>
2478   * Description: <b>Encounter or Episode during which request was created</b><br>
2479   * Type: <b>reference</b><br>
2480   * Path: <b>DeviceRequest.context</b><br>
2481   * </p>
2482   */
2483  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
2484
2485/**
2486   * Constant for fluent queries to be used to add include statements. Specifies
2487   * the path value of "<b>DeviceRequest:encounter</b>".
2488   */
2489  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("DeviceRequest:encounter").toLocked();
2490
2491 /**
2492   * Search parameter: <b>authored-on</b>
2493   * <p>
2494   * Description: <b>When the request transitioned to being actionable</b><br>
2495   * Type: <b>date</b><br>
2496   * Path: <b>DeviceRequest.authoredOn</b><br>
2497   * </p>
2498   */
2499  @SearchParamDefinition(name="authored-on", path="DeviceRequest.authoredOn", description="When the request transitioned to being actionable", type="date" )
2500  public static final String SP_AUTHORED_ON = "authored-on";
2501 /**
2502   * <b>Fluent Client</b> search parameter constant for <b>authored-on</b>
2503   * <p>
2504   * Description: <b>When the request transitioned to being actionable</b><br>
2505   * Type: <b>date</b><br>
2506   * Path: <b>DeviceRequest.authoredOn</b><br>
2507   * </p>
2508   */
2509  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED_ON = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED_ON);
2510
2511 /**
2512   * Search parameter: <b>intent</b>
2513   * <p>
2514   * Description: <b>proposal | plan | original-order |reflex-order</b><br>
2515   * Type: <b>token</b><br>
2516   * Path: <b>DeviceRequest.intent</b><br>
2517   * </p>
2518   */
2519  @SearchParamDefinition(name="intent", path="DeviceRequest.intent", description="proposal | plan | original-order |reflex-order", type="token" )
2520  public static final String SP_INTENT = "intent";
2521 /**
2522   * <b>Fluent Client</b> search parameter constant for <b>intent</b>
2523   * <p>
2524   * Description: <b>proposal | plan | original-order |reflex-order</b><br>
2525   * Type: <b>token</b><br>
2526   * Path: <b>DeviceRequest.intent</b><br>
2527   * </p>
2528   */
2529  public static final ca.uhn.fhir.rest.gclient.TokenClientParam INTENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_INTENT);
2530
2531 /**
2532   * Search parameter: <b>group-identifier</b>
2533   * <p>
2534   * Description: <b>Composite request this is part of</b><br>
2535   * Type: <b>token</b><br>
2536   * Path: <b>DeviceRequest.groupIdentifier</b><br>
2537   * </p>
2538   */
2539  @SearchParamDefinition(name="group-identifier", path="DeviceRequest.groupIdentifier", description="Composite request this is part of", type="token" )
2540  public static final String SP_GROUP_IDENTIFIER = "group-identifier";
2541 /**
2542   * <b>Fluent Client</b> search parameter constant for <b>group-identifier</b>
2543   * <p>
2544   * Description: <b>Composite request this is part of</b><br>
2545   * Type: <b>token</b><br>
2546   * Path: <b>DeviceRequest.groupIdentifier</b><br>
2547   * </p>
2548   */
2549  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GROUP_IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GROUP_IDENTIFIER);
2550
2551 /**
2552   * Search parameter: <b>based-on</b>
2553   * <p>
2554   * Description: <b>Plan/proposal/order fulfilled by this request</b><br>
2555   * Type: <b>reference</b><br>
2556   * Path: <b>DeviceRequest.basedOn</b><br>
2557   * </p>
2558   */
2559  @SearchParamDefinition(name="based-on", path="DeviceRequest.basedOn", description="Plan/proposal/order fulfilled by this request", type="reference" )
2560  public static final String SP_BASED_ON = "based-on";
2561 /**
2562   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
2563   * <p>
2564   * Description: <b>Plan/proposal/order fulfilled by this request</b><br>
2565   * Type: <b>reference</b><br>
2566   * Path: <b>DeviceRequest.basedOn</b><br>
2567   * </p>
2568   */
2569  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
2570
2571/**
2572   * Constant for fluent queries to be used to add include statements. Specifies
2573   * the path value of "<b>DeviceRequest:based-on</b>".
2574   */
2575  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("DeviceRequest:based-on").toLocked();
2576
2577 /**
2578   * Search parameter: <b>priorrequest</b>
2579   * <p>
2580   * Description: <b>Request takes the place of referenced completed or terminated requests</b><br>
2581   * Type: <b>reference</b><br>
2582   * Path: <b>DeviceRequest.priorRequest</b><br>
2583   * </p>
2584   */
2585  @SearchParamDefinition(name="priorrequest", path="DeviceRequest.priorRequest", description="Request takes the place of referenced completed or terminated requests", type="reference" )
2586  public static final String SP_PRIORREQUEST = "priorrequest";
2587 /**
2588   * <b>Fluent Client</b> search parameter constant for <b>priorrequest</b>
2589   * <p>
2590   * Description: <b>Request takes the place of referenced completed or terminated requests</b><br>
2591   * Type: <b>reference</b><br>
2592   * Path: <b>DeviceRequest.priorRequest</b><br>
2593   * </p>
2594   */
2595  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRIORREQUEST = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRIORREQUEST);
2596
2597/**
2598   * Constant for fluent queries to be used to add include statements. Specifies
2599   * the path value of "<b>DeviceRequest:priorrequest</b>".
2600   */
2601  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRIORREQUEST = new ca.uhn.fhir.model.api.Include("DeviceRequest:priorrequest").toLocked();
2602
2603 /**
2604   * Search parameter: <b>patient</b>
2605   * <p>
2606   * Description: <b>Individual the service is ordered for</b><br>
2607   * Type: <b>reference</b><br>
2608   * Path: <b>DeviceRequest.subject</b><br>
2609   * </p>
2610   */
2611  @SearchParamDefinition(name="patient", path="DeviceRequest.subject", description="Individual the service is ordered for", type="reference", target={Patient.class } )
2612  public static final String SP_PATIENT = "patient";
2613 /**
2614   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2615   * <p>
2616   * Description: <b>Individual the service is ordered for</b><br>
2617   * Type: <b>reference</b><br>
2618   * Path: <b>DeviceRequest.subject</b><br>
2619   * </p>
2620   */
2621  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2622
2623/**
2624   * Constant for fluent queries to be used to add include statements. Specifies
2625   * the path value of "<b>DeviceRequest:patient</b>".
2626   */
2627  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("DeviceRequest:patient").toLocked();
2628
2629 /**
2630   * Search parameter: <b>definition</b>
2631   * <p>
2632   * Description: <b>Protocol or definition followed by this request</b><br>
2633   * Type: <b>reference</b><br>
2634   * Path: <b>DeviceRequest.definition</b><br>
2635   * </p>
2636   */
2637  @SearchParamDefinition(name="definition", path="DeviceRequest.definition", description="Protocol or definition followed by this request", type="reference", target={ActivityDefinition.class, PlanDefinition.class } )
2638  public static final String SP_DEFINITION = "definition";
2639 /**
2640   * <b>Fluent Client</b> search parameter constant for <b>definition</b>
2641   * <p>
2642   * Description: <b>Protocol or definition followed by this request</b><br>
2643   * Type: <b>reference</b><br>
2644   * Path: <b>DeviceRequest.definition</b><br>
2645   * </p>
2646   */
2647  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEFINITION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEFINITION);
2648
2649/**
2650   * Constant for fluent queries to be used to add include statements. Specifies
2651   * the path value of "<b>DeviceRequest:definition</b>".
2652   */
2653  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEFINITION = new ca.uhn.fhir.model.api.Include("DeviceRequest:definition").toLocked();
2654
2655 /**
2656   * Search parameter: <b>device</b>
2657   * <p>
2658   * Description: <b>Reference to resource that is being requested/ordered</b><br>
2659   * Type: <b>reference</b><br>
2660   * Path: <b>DeviceRequest.codeReference</b><br>
2661   * </p>
2662   */
2663  @SearchParamDefinition(name="device", path="DeviceRequest.code.as(Reference)", description="Reference to resource that is being requested/ordered", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device") }, target={Device.class } )
2664  public static final String SP_DEVICE = "device";
2665 /**
2666   * <b>Fluent Client</b> search parameter constant for <b>device</b>
2667   * <p>
2668   * Description: <b>Reference to resource that is being requested/ordered</b><br>
2669   * Type: <b>reference</b><br>
2670   * Path: <b>DeviceRequest.codeReference</b><br>
2671   * </p>
2672   */
2673  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEVICE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEVICE);
2674
2675/**
2676   * Constant for fluent queries to be used to add include statements. Specifies
2677   * the path value of "<b>DeviceRequest:device</b>".
2678   */
2679  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEVICE = new ca.uhn.fhir.model.api.Include("DeviceRequest:device").toLocked();
2680
2681 /**
2682   * Search parameter: <b>status</b>
2683   * <p>
2684   * Description: <b>entered-in-error | draft | active |suspended | completed </b><br>
2685   * Type: <b>token</b><br>
2686   * Path: <b>DeviceRequest.status</b><br>
2687   * </p>
2688   */
2689  @SearchParamDefinition(name="status", path="DeviceRequest.status", description="entered-in-error | draft | active |suspended | completed ", type="token" )
2690  public static final String SP_STATUS = "status";
2691 /**
2692   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2693   * <p>
2694   * Description: <b>entered-in-error | draft | active |suspended | completed </b><br>
2695   * Type: <b>token</b><br>
2696   * Path: <b>DeviceRequest.status</b><br>
2697   * </p>
2698   */
2699  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2700
2701
2702}