001package org.hl7.fhir.r4.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
035// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
036
037import java.util.*;
038
039import org.hl7.fhir.utilities.Utilities;
040import org.hl7.fhir.r4.model.Enumerations.*;
041import ca.uhn.fhir.model.api.annotation.ResourceDef;
042import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
043import ca.uhn.fhir.model.api.annotation.Child;
044import ca.uhn.fhir.model.api.annotation.ChildOrder;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.Block;
047import org.hl7.fhir.instance.model.api.*;
048import org.hl7.fhir.exceptions.FHIRException;
049/**
050 * A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge.  This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques.  A ResearchStudy involves the gathering of information about human or animal subjects.
051 */
052@ResourceDef(name="ResearchStudy", profile="http://hl7.org/fhir/StructureDefinition/ResearchStudy")
053public class ResearchStudy extends DomainResource {
054
055    public enum ResearchStudyStatus {
056        /**
057         * Study is opened for accrual.
058         */
059        ACTIVE, 
060        /**
061         * Study is completed prematurely and will not resume; patients are no longer examined nor treated.
062         */
063        ADMINISTRATIVELYCOMPLETED, 
064        /**
065         * Protocol is approved by the review board.
066         */
067        APPROVED, 
068        /**
069         * Study is closed for accrual; patients can be examined and treated.
070         */
071        CLOSEDTOACCRUAL, 
072        /**
073         * Study is closed to accrual and intervention, i.e. the study is closed to enrollment, all study subjects have completed treatment or intervention but are still being followed according to the primary objective of the study.
074         */
075        CLOSEDTOACCRUALANDINTERVENTION, 
076        /**
077         * Study is closed to accrual and intervention, i.e. the study is closed to enrollment, all study subjects have completed treatment
078or intervention but are still being followed according to the primary objective of the study.
079         */
080        COMPLETED, 
081        /**
082         * Protocol was disapproved by the review board.
083         */
084        DISAPPROVED, 
085        /**
086         * Protocol is submitted to the review board for approval.
087         */
088        INREVIEW, 
089        /**
090         * Study is temporarily closed for accrual; can be potentially resumed in the future; patients can be examined and treated.
091         */
092        TEMPORARILYCLOSEDTOACCRUAL, 
093        /**
094         * Study is temporarily closed for accrual and intervention and potentially can be resumed in the future.
095         */
096        TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION, 
097        /**
098         * Protocol was withdrawn by the lead organization.
099         */
100        WITHDRAWN, 
101        /**
102         * added to help the parsers with the generic types
103         */
104        NULL;
105        public static ResearchStudyStatus fromCode(String codeString) throws FHIRException {
106            if (codeString == null || "".equals(codeString))
107                return null;
108        if ("active".equals(codeString))
109          return ACTIVE;
110        if ("administratively-completed".equals(codeString))
111          return ADMINISTRATIVELYCOMPLETED;
112        if ("approved".equals(codeString))
113          return APPROVED;
114        if ("closed-to-accrual".equals(codeString))
115          return CLOSEDTOACCRUAL;
116        if ("closed-to-accrual-and-intervention".equals(codeString))
117          return CLOSEDTOACCRUALANDINTERVENTION;
118        if ("completed".equals(codeString))
119          return COMPLETED;
120        if ("disapproved".equals(codeString))
121          return DISAPPROVED;
122        if ("in-review".equals(codeString))
123          return INREVIEW;
124        if ("temporarily-closed-to-accrual".equals(codeString))
125          return TEMPORARILYCLOSEDTOACCRUAL;
126        if ("temporarily-closed-to-accrual-and-intervention".equals(codeString))
127          return TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION;
128        if ("withdrawn".equals(codeString))
129          return WITHDRAWN;
130        if (Configuration.isAcceptInvalidEnums())
131          return null;
132        else
133          throw new FHIRException("Unknown ResearchStudyStatus code '"+codeString+"'");
134        }
135        public String toCode() {
136          switch (this) {
137            case ACTIVE: return "active";
138            case ADMINISTRATIVELYCOMPLETED: return "administratively-completed";
139            case APPROVED: return "approved";
140            case CLOSEDTOACCRUAL: return "closed-to-accrual";
141            case CLOSEDTOACCRUALANDINTERVENTION: return "closed-to-accrual-and-intervention";
142            case COMPLETED: return "completed";
143            case DISAPPROVED: return "disapproved";
144            case INREVIEW: return "in-review";
145            case TEMPORARILYCLOSEDTOACCRUAL: return "temporarily-closed-to-accrual";
146            case TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION: return "temporarily-closed-to-accrual-and-intervention";
147            case WITHDRAWN: return "withdrawn";
148            default: return "?";
149          }
150        }
151        public String getSystem() {
152          switch (this) {
153            case ACTIVE: return "http://hl7.org/fhir/research-study-status";
154            case ADMINISTRATIVELYCOMPLETED: return "http://hl7.org/fhir/research-study-status";
155            case APPROVED: return "http://hl7.org/fhir/research-study-status";
156            case CLOSEDTOACCRUAL: return "http://hl7.org/fhir/research-study-status";
157            case CLOSEDTOACCRUALANDINTERVENTION: return "http://hl7.org/fhir/research-study-status";
158            case COMPLETED: return "http://hl7.org/fhir/research-study-status";
159            case DISAPPROVED: return "http://hl7.org/fhir/research-study-status";
160            case INREVIEW: return "http://hl7.org/fhir/research-study-status";
161            case TEMPORARILYCLOSEDTOACCRUAL: return "http://hl7.org/fhir/research-study-status";
162            case TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION: return "http://hl7.org/fhir/research-study-status";
163            case WITHDRAWN: return "http://hl7.org/fhir/research-study-status";
164            default: return "?";
165          }
166        }
167        public String getDefinition() {
168          switch (this) {
169            case ACTIVE: return "Study is opened for accrual.";
170            case ADMINISTRATIVELYCOMPLETED: return "Study is completed prematurely and will not resume; patients are no longer examined nor treated.";
171            case APPROVED: return "Protocol is approved by the review board.";
172            case CLOSEDTOACCRUAL: return "Study is closed for accrual; patients can be examined and treated.";
173            case CLOSEDTOACCRUALANDINTERVENTION: return "Study is closed to accrual and intervention, i.e. the study is closed to enrollment, all study subjects have completed treatment or intervention but are still being followed according to the primary objective of the study.";
174            case COMPLETED: return "Study is closed to accrual and intervention, i.e. the study is closed to enrollment, all study subjects have completed treatment\nor intervention but are still being followed according to the primary objective of the study.";
175            case DISAPPROVED: return "Protocol was disapproved by the review board.";
176            case INREVIEW: return "Protocol is submitted to the review board for approval.";
177            case TEMPORARILYCLOSEDTOACCRUAL: return "Study is temporarily closed for accrual; can be potentially resumed in the future; patients can be examined and treated.";
178            case TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION: return "Study is temporarily closed for accrual and intervention and potentially can be resumed in the future.";
179            case WITHDRAWN: return "Protocol was withdrawn by the lead organization.";
180            default: return "?";
181          }
182        }
183        public String getDisplay() {
184          switch (this) {
185            case ACTIVE: return "Active";
186            case ADMINISTRATIVELYCOMPLETED: return "Administratively Completed";
187            case APPROVED: return "Approved";
188            case CLOSEDTOACCRUAL: return "Closed to Accrual";
189            case CLOSEDTOACCRUALANDINTERVENTION: return "Closed to Accrual and Intervention";
190            case COMPLETED: return "Completed";
191            case DISAPPROVED: return "Disapproved";
192            case INREVIEW: return "In Review";
193            case TEMPORARILYCLOSEDTOACCRUAL: return "Temporarily Closed to Accrual";
194            case TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION: return "Temporarily Closed to Accrual and Intervention";
195            case WITHDRAWN: return "Withdrawn";
196            default: return "?";
197          }
198        }
199    }
200
201  public static class ResearchStudyStatusEnumFactory implements EnumFactory<ResearchStudyStatus> {
202    public ResearchStudyStatus fromCode(String codeString) throws IllegalArgumentException {
203      if (codeString == null || "".equals(codeString))
204            if (codeString == null || "".equals(codeString))
205                return null;
206        if ("active".equals(codeString))
207          return ResearchStudyStatus.ACTIVE;
208        if ("administratively-completed".equals(codeString))
209          return ResearchStudyStatus.ADMINISTRATIVELYCOMPLETED;
210        if ("approved".equals(codeString))
211          return ResearchStudyStatus.APPROVED;
212        if ("closed-to-accrual".equals(codeString))
213          return ResearchStudyStatus.CLOSEDTOACCRUAL;
214        if ("closed-to-accrual-and-intervention".equals(codeString))
215          return ResearchStudyStatus.CLOSEDTOACCRUALANDINTERVENTION;
216        if ("completed".equals(codeString))
217          return ResearchStudyStatus.COMPLETED;
218        if ("disapproved".equals(codeString))
219          return ResearchStudyStatus.DISAPPROVED;
220        if ("in-review".equals(codeString))
221          return ResearchStudyStatus.INREVIEW;
222        if ("temporarily-closed-to-accrual".equals(codeString))
223          return ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUAL;
224        if ("temporarily-closed-to-accrual-and-intervention".equals(codeString))
225          return ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION;
226        if ("withdrawn".equals(codeString))
227          return ResearchStudyStatus.WITHDRAWN;
228        throw new IllegalArgumentException("Unknown ResearchStudyStatus code '"+codeString+"'");
229        }
230        public Enumeration<ResearchStudyStatus> fromType(Base code) throws FHIRException {
231          if (code == null)
232            return null;
233          if (code.isEmpty())
234            return new Enumeration<ResearchStudyStatus>(this);
235          String codeString = ((PrimitiveType) code).asStringValue();
236          if (codeString == null || "".equals(codeString))
237            return null;
238        if ("active".equals(codeString))
239          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.ACTIVE);
240        if ("administratively-completed".equals(codeString))
241          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.ADMINISTRATIVELYCOMPLETED);
242        if ("approved".equals(codeString))
243          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.APPROVED);
244        if ("closed-to-accrual".equals(codeString))
245          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.CLOSEDTOACCRUAL);
246        if ("closed-to-accrual-and-intervention".equals(codeString))
247          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.CLOSEDTOACCRUALANDINTERVENTION);
248        if ("completed".equals(codeString))
249          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.COMPLETED);
250        if ("disapproved".equals(codeString))
251          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.DISAPPROVED);
252        if ("in-review".equals(codeString))
253          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.INREVIEW);
254        if ("temporarily-closed-to-accrual".equals(codeString))
255          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUAL);
256        if ("temporarily-closed-to-accrual-and-intervention".equals(codeString))
257          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION);
258        if ("withdrawn".equals(codeString))
259          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.WITHDRAWN);
260        throw new FHIRException("Unknown ResearchStudyStatus code '"+codeString+"'");
261        }
262    public String toCode(ResearchStudyStatus code) {
263      if (code == ResearchStudyStatus.ACTIVE)
264        return "active";
265      if (code == ResearchStudyStatus.ADMINISTRATIVELYCOMPLETED)
266        return "administratively-completed";
267      if (code == ResearchStudyStatus.APPROVED)
268        return "approved";
269      if (code == ResearchStudyStatus.CLOSEDTOACCRUAL)
270        return "closed-to-accrual";
271      if (code == ResearchStudyStatus.CLOSEDTOACCRUALANDINTERVENTION)
272        return "closed-to-accrual-and-intervention";
273      if (code == ResearchStudyStatus.COMPLETED)
274        return "completed";
275      if (code == ResearchStudyStatus.DISAPPROVED)
276        return "disapproved";
277      if (code == ResearchStudyStatus.INREVIEW)
278        return "in-review";
279      if (code == ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUAL)
280        return "temporarily-closed-to-accrual";
281      if (code == ResearchStudyStatus.TEMPORARILYCLOSEDTOACCRUALANDINTERVENTION)
282        return "temporarily-closed-to-accrual-and-intervention";
283      if (code == ResearchStudyStatus.WITHDRAWN)
284        return "withdrawn";
285      return "?";
286      }
287    public String toSystem(ResearchStudyStatus code) {
288      return code.getSystem();
289      }
290    }
291
292    @Block()
293    public static class ResearchStudyArmComponent extends BackboneElement implements IBaseBackboneElement {
294        /**
295         * Unique, human-readable label for this arm of the study.
296         */
297        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
298        @Description(shortDefinition="Label for study arm", formalDefinition="Unique, human-readable label for this arm of the study." )
299        protected StringType name;
300
301        /**
302         * Categorization of study arm, e.g. experimental, active comparator, placebo comparater.
303         */
304        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
305        @Description(shortDefinition="Categorization of study arm", formalDefinition="Categorization of study arm, e.g. experimental, active comparator, placebo comparater." )
306        protected CodeableConcept type;
307
308        /**
309         * A succinct description of the path through the study that would be followed by a subject adhering to this arm.
310         */
311        @Child(name = "description", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
312        @Description(shortDefinition="Short explanation of study path", formalDefinition="A succinct description of the path through the study that would be followed by a subject adhering to this arm." )
313        protected StringType description;
314
315        private static final long serialVersionUID = 311445244L;
316
317    /**
318     * Constructor
319     */
320      public ResearchStudyArmComponent() {
321        super();
322      }
323
324    /**
325     * Constructor
326     */
327      public ResearchStudyArmComponent(StringType name) {
328        super();
329        this.name = name;
330      }
331
332        /**
333         * @return {@link #name} (Unique, human-readable label for this arm of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
334         */
335        public StringType getNameElement() { 
336          if (this.name == null)
337            if (Configuration.errorOnAutoCreate())
338              throw new Error("Attempt to auto-create ResearchStudyArmComponent.name");
339            else if (Configuration.doAutoCreate())
340              this.name = new StringType(); // bb
341          return this.name;
342        }
343
344        public boolean hasNameElement() { 
345          return this.name != null && !this.name.isEmpty();
346        }
347
348        public boolean hasName() { 
349          return this.name != null && !this.name.isEmpty();
350        }
351
352        /**
353         * @param value {@link #name} (Unique, human-readable label for this arm of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
354         */
355        public ResearchStudyArmComponent setNameElement(StringType value) { 
356          this.name = value;
357          return this;
358        }
359
360        /**
361         * @return Unique, human-readable label for this arm of the study.
362         */
363        public String getName() { 
364          return this.name == null ? null : this.name.getValue();
365        }
366
367        /**
368         * @param value Unique, human-readable label for this arm of the study.
369         */
370        public ResearchStudyArmComponent setName(String value) { 
371            if (this.name == null)
372              this.name = new StringType();
373            this.name.setValue(value);
374          return this;
375        }
376
377        /**
378         * @return {@link #type} (Categorization of study arm, e.g. experimental, active comparator, placebo comparater.)
379         */
380        public CodeableConcept getType() { 
381          if (this.type == null)
382            if (Configuration.errorOnAutoCreate())
383              throw new Error("Attempt to auto-create ResearchStudyArmComponent.type");
384            else if (Configuration.doAutoCreate())
385              this.type = new CodeableConcept(); // cc
386          return this.type;
387        }
388
389        public boolean hasType() { 
390          return this.type != null && !this.type.isEmpty();
391        }
392
393        /**
394         * @param value {@link #type} (Categorization of study arm, e.g. experimental, active comparator, placebo comparater.)
395         */
396        public ResearchStudyArmComponent setType(CodeableConcept value) { 
397          this.type = value;
398          return this;
399        }
400
401        /**
402         * @return {@link #description} (A succinct description of the path through the study that would be followed by a subject adhering to this arm.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
403         */
404        public StringType getDescriptionElement() { 
405          if (this.description == null)
406            if (Configuration.errorOnAutoCreate())
407              throw new Error("Attempt to auto-create ResearchStudyArmComponent.description");
408            else if (Configuration.doAutoCreate())
409              this.description = new StringType(); // bb
410          return this.description;
411        }
412
413        public boolean hasDescriptionElement() { 
414          return this.description != null && !this.description.isEmpty();
415        }
416
417        public boolean hasDescription() { 
418          return this.description != null && !this.description.isEmpty();
419        }
420
421        /**
422         * @param value {@link #description} (A succinct description of the path through the study that would be followed by a subject adhering to this arm.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
423         */
424        public ResearchStudyArmComponent setDescriptionElement(StringType value) { 
425          this.description = value;
426          return this;
427        }
428
429        /**
430         * @return A succinct description of the path through the study that would be followed by a subject adhering to this arm.
431         */
432        public String getDescription() { 
433          return this.description == null ? null : this.description.getValue();
434        }
435
436        /**
437         * @param value A succinct description of the path through the study that would be followed by a subject adhering to this arm.
438         */
439        public ResearchStudyArmComponent setDescription(String value) { 
440          if (Utilities.noString(value))
441            this.description = null;
442          else {
443            if (this.description == null)
444              this.description = new StringType();
445            this.description.setValue(value);
446          }
447          return this;
448        }
449
450        protected void listChildren(List<Property> children) {
451          super.listChildren(children);
452          children.add(new Property("name", "string", "Unique, human-readable label for this arm of the study.", 0, 1, name));
453          children.add(new Property("type", "CodeableConcept", "Categorization of study arm, e.g. experimental, active comparator, placebo comparater.", 0, 1, type));
454          children.add(new Property("description", "string", "A succinct description of the path through the study that would be followed by a subject adhering to this arm.", 0, 1, description));
455        }
456
457        @Override
458        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
459          switch (_hash) {
460          case 3373707: /*name*/  return new Property("name", "string", "Unique, human-readable label for this arm of the study.", 0, 1, name);
461          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Categorization of study arm, e.g. experimental, active comparator, placebo comparater.", 0, 1, type);
462          case -1724546052: /*description*/  return new Property("description", "string", "A succinct description of the path through the study that would be followed by a subject adhering to this arm.", 0, 1, description);
463          default: return super.getNamedProperty(_hash, _name, _checkValid);
464          }
465
466        }
467
468      @Override
469      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
470        switch (hash) {
471        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
472        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
473        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
474        default: return super.getProperty(hash, name, checkValid);
475        }
476
477      }
478
479      @Override
480      public Base setProperty(int hash, String name, Base value) throws FHIRException {
481        switch (hash) {
482        case 3373707: // name
483          this.name = castToString(value); // StringType
484          return value;
485        case 3575610: // type
486          this.type = castToCodeableConcept(value); // CodeableConcept
487          return value;
488        case -1724546052: // description
489          this.description = castToString(value); // StringType
490          return value;
491        default: return super.setProperty(hash, name, value);
492        }
493
494      }
495
496      @Override
497      public Base setProperty(String name, Base value) throws FHIRException {
498        if (name.equals("name")) {
499          this.name = castToString(value); // StringType
500        } else if (name.equals("type")) {
501          this.type = castToCodeableConcept(value); // CodeableConcept
502        } else if (name.equals("description")) {
503          this.description = castToString(value); // StringType
504        } else
505          return super.setProperty(name, value);
506        return value;
507      }
508
509      @Override
510      public Base makeProperty(int hash, String name) throws FHIRException {
511        switch (hash) {
512        case 3373707:  return getNameElement();
513        case 3575610:  return getType(); 
514        case -1724546052:  return getDescriptionElement();
515        default: return super.makeProperty(hash, name);
516        }
517
518      }
519
520      @Override
521      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
522        switch (hash) {
523        case 3373707: /*name*/ return new String[] {"string"};
524        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
525        case -1724546052: /*description*/ return new String[] {"string"};
526        default: return super.getTypesForProperty(hash, name);
527        }
528
529      }
530
531      @Override
532      public Base addChild(String name) throws FHIRException {
533        if (name.equals("name")) {
534          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.name");
535        }
536        else if (name.equals("type")) {
537          this.type = new CodeableConcept();
538          return this.type;
539        }
540        else if (name.equals("description")) {
541          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.description");
542        }
543        else
544          return super.addChild(name);
545      }
546
547      public ResearchStudyArmComponent copy() {
548        ResearchStudyArmComponent dst = new ResearchStudyArmComponent();
549        copyValues(dst);
550        return dst;
551      }
552
553      public void copyValues(ResearchStudyArmComponent dst) {
554        super.copyValues(dst);
555        dst.name = name == null ? null : name.copy();
556        dst.type = type == null ? null : type.copy();
557        dst.description = description == null ? null : description.copy();
558      }
559
560      @Override
561      public boolean equalsDeep(Base other_) {
562        if (!super.equalsDeep(other_))
563          return false;
564        if (!(other_ instanceof ResearchStudyArmComponent))
565          return false;
566        ResearchStudyArmComponent o = (ResearchStudyArmComponent) other_;
567        return compareDeep(name, o.name, true) && compareDeep(type, o.type, true) && compareDeep(description, o.description, true)
568          ;
569      }
570
571      @Override
572      public boolean equalsShallow(Base other_) {
573        if (!super.equalsShallow(other_))
574          return false;
575        if (!(other_ instanceof ResearchStudyArmComponent))
576          return false;
577        ResearchStudyArmComponent o = (ResearchStudyArmComponent) other_;
578        return compareValues(name, o.name, true) && compareValues(description, o.description, true);
579      }
580
581      public boolean isEmpty() {
582        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, type, description
583          );
584      }
585
586  public String fhirType() {
587    return "ResearchStudy.arm";
588
589  }
590
591  }
592
593    @Block()
594    public static class ResearchStudyObjectiveComponent extends BackboneElement implements IBaseBackboneElement {
595        /**
596         * Unique, human-readable label for this objective of the study.
597         */
598        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
599        @Description(shortDefinition="Label for the objective", formalDefinition="Unique, human-readable label for this objective of the study." )
600        protected StringType name;
601
602        /**
603         * The kind of study objective.
604         */
605        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
606        @Description(shortDefinition="primary | secondary | exploratory", formalDefinition="The kind of study objective." )
607        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-objective-type")
608        protected CodeableConcept type;
609
610        private static final long serialVersionUID = -1935215997L;
611
612    /**
613     * Constructor
614     */
615      public ResearchStudyObjectiveComponent() {
616        super();
617      }
618
619        /**
620         * @return {@link #name} (Unique, human-readable label for this objective of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
621         */
622        public StringType getNameElement() { 
623          if (this.name == null)
624            if (Configuration.errorOnAutoCreate())
625              throw new Error("Attempt to auto-create ResearchStudyObjectiveComponent.name");
626            else if (Configuration.doAutoCreate())
627              this.name = new StringType(); // bb
628          return this.name;
629        }
630
631        public boolean hasNameElement() { 
632          return this.name != null && !this.name.isEmpty();
633        }
634
635        public boolean hasName() { 
636          return this.name != null && !this.name.isEmpty();
637        }
638
639        /**
640         * @param value {@link #name} (Unique, human-readable label for this objective of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
641         */
642        public ResearchStudyObjectiveComponent setNameElement(StringType value) { 
643          this.name = value;
644          return this;
645        }
646
647        /**
648         * @return Unique, human-readable label for this objective of the study.
649         */
650        public String getName() { 
651          return this.name == null ? null : this.name.getValue();
652        }
653
654        /**
655         * @param value Unique, human-readable label for this objective of the study.
656         */
657        public ResearchStudyObjectiveComponent setName(String value) { 
658          if (Utilities.noString(value))
659            this.name = null;
660          else {
661            if (this.name == null)
662              this.name = new StringType();
663            this.name.setValue(value);
664          }
665          return this;
666        }
667
668        /**
669         * @return {@link #type} (The kind of study objective.)
670         */
671        public CodeableConcept getType() { 
672          if (this.type == null)
673            if (Configuration.errorOnAutoCreate())
674              throw new Error("Attempt to auto-create ResearchStudyObjectiveComponent.type");
675            else if (Configuration.doAutoCreate())
676              this.type = new CodeableConcept(); // cc
677          return this.type;
678        }
679
680        public boolean hasType() { 
681          return this.type != null && !this.type.isEmpty();
682        }
683
684        /**
685         * @param value {@link #type} (The kind of study objective.)
686         */
687        public ResearchStudyObjectiveComponent setType(CodeableConcept value) { 
688          this.type = value;
689          return this;
690        }
691
692        protected void listChildren(List<Property> children) {
693          super.listChildren(children);
694          children.add(new Property("name", "string", "Unique, human-readable label for this objective of the study.", 0, 1, name));
695          children.add(new Property("type", "CodeableConcept", "The kind of study objective.", 0, 1, type));
696        }
697
698        @Override
699        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
700          switch (_hash) {
701          case 3373707: /*name*/  return new Property("name", "string", "Unique, human-readable label for this objective of the study.", 0, 1, name);
702          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of study objective.", 0, 1, type);
703          default: return super.getNamedProperty(_hash, _name, _checkValid);
704          }
705
706        }
707
708      @Override
709      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
710        switch (hash) {
711        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
712        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
713        default: return super.getProperty(hash, name, checkValid);
714        }
715
716      }
717
718      @Override
719      public Base setProperty(int hash, String name, Base value) throws FHIRException {
720        switch (hash) {
721        case 3373707: // name
722          this.name = castToString(value); // StringType
723          return value;
724        case 3575610: // type
725          this.type = castToCodeableConcept(value); // CodeableConcept
726          return value;
727        default: return super.setProperty(hash, name, value);
728        }
729
730      }
731
732      @Override
733      public Base setProperty(String name, Base value) throws FHIRException {
734        if (name.equals("name")) {
735          this.name = castToString(value); // StringType
736        } else if (name.equals("type")) {
737          this.type = castToCodeableConcept(value); // CodeableConcept
738        } else
739          return super.setProperty(name, value);
740        return value;
741      }
742
743      @Override
744      public Base makeProperty(int hash, String name) throws FHIRException {
745        switch (hash) {
746        case 3373707:  return getNameElement();
747        case 3575610:  return getType(); 
748        default: return super.makeProperty(hash, name);
749        }
750
751      }
752
753      @Override
754      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
755        switch (hash) {
756        case 3373707: /*name*/ return new String[] {"string"};
757        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
758        default: return super.getTypesForProperty(hash, name);
759        }
760
761      }
762
763      @Override
764      public Base addChild(String name) throws FHIRException {
765        if (name.equals("name")) {
766          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.name");
767        }
768        else if (name.equals("type")) {
769          this.type = new CodeableConcept();
770          return this.type;
771        }
772        else
773          return super.addChild(name);
774      }
775
776      public ResearchStudyObjectiveComponent copy() {
777        ResearchStudyObjectiveComponent dst = new ResearchStudyObjectiveComponent();
778        copyValues(dst);
779        return dst;
780      }
781
782      public void copyValues(ResearchStudyObjectiveComponent dst) {
783        super.copyValues(dst);
784        dst.name = name == null ? null : name.copy();
785        dst.type = type == null ? null : type.copy();
786      }
787
788      @Override
789      public boolean equalsDeep(Base other_) {
790        if (!super.equalsDeep(other_))
791          return false;
792        if (!(other_ instanceof ResearchStudyObjectiveComponent))
793          return false;
794        ResearchStudyObjectiveComponent o = (ResearchStudyObjectiveComponent) other_;
795        return compareDeep(name, o.name, true) && compareDeep(type, o.type, true);
796      }
797
798      @Override
799      public boolean equalsShallow(Base other_) {
800        if (!super.equalsShallow(other_))
801          return false;
802        if (!(other_ instanceof ResearchStudyObjectiveComponent))
803          return false;
804        ResearchStudyObjectiveComponent o = (ResearchStudyObjectiveComponent) other_;
805        return compareValues(name, o.name, true);
806      }
807
808      public boolean isEmpty() {
809        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, type);
810      }
811
812  public String fhirType() {
813    return "ResearchStudy.objective";
814
815  }
816
817  }
818
819    /**
820     * Identifiers assigned to this research study by the sponsor or other systems.
821     */
822    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
823    @Description(shortDefinition="Business Identifier for study", formalDefinition="Identifiers assigned to this research study by the sponsor or other systems." )
824    protected List<Identifier> identifier;
825
826    /**
827     * A short, descriptive user-friendly label for the study.
828     */
829    @Child(name = "title", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
830    @Description(shortDefinition="Name for this study", formalDefinition="A short, descriptive user-friendly label for the study." )
831    protected StringType title;
832
833    /**
834     * The set of steps expected to be performed as part of the execution of the study.
835     */
836    @Child(name = "protocol", type = {PlanDefinition.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
837    @Description(shortDefinition="Steps followed in executing study", formalDefinition="The set of steps expected to be performed as part of the execution of the study." )
838    protected List<Reference> protocol;
839    /**
840     * The actual objects that are the target of the reference (The set of steps expected to be performed as part of the execution of the study.)
841     */
842    protected List<PlanDefinition> protocolTarget;
843
844
845    /**
846     * A larger research study of which this particular study is a component or step.
847     */
848    @Child(name = "partOf", type = {ResearchStudy.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
849    @Description(shortDefinition="Part of larger study", formalDefinition="A larger research study of which this particular study is a component or step." )
850    protected List<Reference> partOf;
851    /**
852     * The actual objects that are the target of the reference (A larger research study of which this particular study is a component or step.)
853     */
854    protected List<ResearchStudy> partOfTarget;
855
856
857    /**
858     * The current state of the study.
859     */
860    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
861    @Description(shortDefinition="active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn", formalDefinition="The current state of the study." )
862    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-status")
863    protected Enumeration<ResearchStudyStatus> status;
864
865    /**
866     * The type of study based upon the intent of the study's activities. A classification of the intent of the study.
867     */
868    @Child(name = "primaryPurposeType", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=true)
869    @Description(shortDefinition="treatment | prevention | diagnostic | supportive-care | screening | health-services-research | basic-science | device-feasibility", formalDefinition="The type of study based upon the intent of the study's activities. A classification of the intent of the study." )
870    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-prim-purp-type")
871    protected CodeableConcept primaryPurposeType;
872
873    /**
874     * The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.
875     */
876    @Child(name = "phase", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=true)
877    @Description(shortDefinition="n-a | early-phase-1 | phase-1 | phase-1-phase-2 | phase-2 | phase-2-phase-3 | phase-3 | phase-4", formalDefinition="The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation." )
878    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-phase")
879    protected CodeableConcept phase;
880
881    /**
882     * Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.
883     */
884    @Child(name = "category", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
885    @Description(shortDefinition="Classifications for the study", formalDefinition="Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc." )
886    protected List<CodeableConcept> category;
887
888    /**
889     * The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.
890     */
891    @Child(name = "focus", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
892    @Description(shortDefinition="Drugs, devices, etc. under study", formalDefinition="The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about." )
893    protected List<CodeableConcept> focus;
894
895    /**
896     * The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion "healthy volunteer", but the target condition code would be a Lupus SNOMED code.
897     */
898    @Child(name = "condition", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
899    @Description(shortDefinition="Condition being studied", formalDefinition="The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion \"healthy volunteer\", but the target condition code would be a Lupus SNOMED code." )
900    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
901    protected List<CodeableConcept> condition;
902
903    /**
904     * Contact details to assist a user in learning more about or engaging with the study.
905     */
906    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
907    @Description(shortDefinition="Contact details for the study", formalDefinition="Contact details to assist a user in learning more about or engaging with the study." )
908    protected List<ContactDetail> contact;
909
910    /**
911     * Citations, references and other related documents.
912     */
913    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
914    @Description(shortDefinition="References and dependencies", formalDefinition="Citations, references and other related documents." )
915    protected List<RelatedArtifact> relatedArtifact;
916
917    /**
918     * Key terms to aid in searching for or filtering the study.
919     */
920    @Child(name = "keyword", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
921    @Description(shortDefinition="Used to search for the study", formalDefinition="Key terms to aid in searching for or filtering the study." )
922    protected List<CodeableConcept> keyword;
923
924    /**
925     * Indicates a country, state or other region where the study is taking place.
926     */
927    @Child(name = "location", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
928    @Description(shortDefinition="Geographic region(s) for study", formalDefinition="Indicates a country, state or other region where the study is taking place." )
929    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
930    protected List<CodeableConcept> location;
931
932    /**
933     * A full description of how the study is being conducted.
934     */
935    @Child(name = "description", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
936    @Description(shortDefinition="What this is study doing", formalDefinition="A full description of how the study is being conducted." )
937    protected MarkdownType description;
938
939    /**
940     * Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. " 200 female Europeans between the ages of 20 and 45 with early onset diabetes".
941     */
942    @Child(name = "enrollment", type = {Group.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
943    @Description(shortDefinition="Inclusion & exclusion criteria", formalDefinition="Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. \" 200 female Europeans between the ages of 20 and 45 with early onset diabetes\"." )
944    protected List<Reference> enrollment;
945    /**
946     * The actual objects that are the target of the reference (Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. " 200 female Europeans between the ages of 20 and 45 with early onset diabetes".)
947     */
948    protected List<Group> enrollmentTarget;
949
950
951    /**
952     * Identifies the start date and the expected (or actual, depending on status) end date for the study.
953     */
954    @Child(name = "period", type = {Period.class}, order=16, min=0, max=1, modifier=false, summary=true)
955    @Description(shortDefinition="When the study began and ended", formalDefinition="Identifies the start date and the expected (or actual, depending on status) end date for the study." )
956    protected Period period;
957
958    /**
959     * An organization that initiates the investigation and is legally responsible for the study.
960     */
961    @Child(name = "sponsor", type = {Organization.class}, order=17, min=0, max=1, modifier=false, summary=true)
962    @Description(shortDefinition="Organization that initiates and is legally responsible for the study", formalDefinition="An organization that initiates the investigation and is legally responsible for the study." )
963    protected Reference sponsor;
964
965    /**
966     * The actual object that is the target of the reference (An organization that initiates the investigation and is legally responsible for the study.)
967     */
968    protected Organization sponsorTarget;
969
970    /**
971     * A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.
972     */
973    @Child(name = "principalInvestigator", type = {Practitioner.class, PractitionerRole.class}, order=18, min=0, max=1, modifier=false, summary=true)
974    @Description(shortDefinition="Researcher who oversees multiple aspects of the study", formalDefinition="A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation." )
975    protected Reference principalInvestigator;
976
977    /**
978     * The actual object that is the target of the reference (A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.)
979     */
980    protected Resource principalInvestigatorTarget;
981
982    /**
983     * A facility in which study activities are conducted.
984     */
985    @Child(name = "site", type = {Location.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
986    @Description(shortDefinition="Facility where study activities are conducted", formalDefinition="A facility in which study activities are conducted." )
987    protected List<Reference> site;
988    /**
989     * The actual objects that are the target of the reference (A facility in which study activities are conducted.)
990     */
991    protected List<Location> siteTarget;
992
993
994    /**
995     * A description and/or code explaining the premature termination of the study.
996     */
997    @Child(name = "reasonStopped", type = {CodeableConcept.class}, order=20, min=0, max=1, modifier=false, summary=true)
998    @Description(shortDefinition="accrual-goal-met | closed-due-to-toxicity | closed-due-to-lack-of-study-progress | temporarily-closed-per-study-design", formalDefinition="A description and/or code explaining the premature termination of the study." )
999    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-reason-stopped")
1000    protected CodeableConcept reasonStopped;
1001
1002    /**
1003     * Comments made about the study by the performer, subject or other participants.
1004     */
1005    @Child(name = "note", type = {Annotation.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1006    @Description(shortDefinition="Comments made about the study", formalDefinition="Comments made about the study by the performer, subject or other participants." )
1007    protected List<Annotation> note;
1008
1009    /**
1010     * Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.
1011     */
1012    @Child(name = "arm", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1013    @Description(shortDefinition="Defined path through the study for a subject", formalDefinition="Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up." )
1014    protected List<ResearchStudyArmComponent> arm;
1015
1016    /**
1017     * A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.
1018     */
1019    @Child(name = "objective", type = {}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1020    @Description(shortDefinition="A goal for the study", formalDefinition="A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study." )
1021    protected List<ResearchStudyObjectiveComponent> objective;
1022
1023    private static final long serialVersionUID = -911538323L;
1024
1025  /**
1026   * Constructor
1027   */
1028    public ResearchStudy() {
1029      super();
1030    }
1031
1032  /**
1033   * Constructor
1034   */
1035    public ResearchStudy(Enumeration<ResearchStudyStatus> status) {
1036      super();
1037      this.status = status;
1038    }
1039
1040    /**
1041     * @return {@link #identifier} (Identifiers assigned to this research study by the sponsor or other systems.)
1042     */
1043    public List<Identifier> getIdentifier() { 
1044      if (this.identifier == null)
1045        this.identifier = new ArrayList<Identifier>();
1046      return this.identifier;
1047    }
1048
1049    /**
1050     * @return Returns a reference to <code>this</code> for easy method chaining
1051     */
1052    public ResearchStudy setIdentifier(List<Identifier> theIdentifier) { 
1053      this.identifier = theIdentifier;
1054      return this;
1055    }
1056
1057    public boolean hasIdentifier() { 
1058      if (this.identifier == null)
1059        return false;
1060      for (Identifier item : this.identifier)
1061        if (!item.isEmpty())
1062          return true;
1063      return false;
1064    }
1065
1066    public Identifier addIdentifier() { //3
1067      Identifier t = new Identifier();
1068      if (this.identifier == null)
1069        this.identifier = new ArrayList<Identifier>();
1070      this.identifier.add(t);
1071      return t;
1072    }
1073
1074    public ResearchStudy addIdentifier(Identifier t) { //3
1075      if (t == null)
1076        return this;
1077      if (this.identifier == null)
1078        this.identifier = new ArrayList<Identifier>();
1079      this.identifier.add(t);
1080      return this;
1081    }
1082
1083    /**
1084     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1085     */
1086    public Identifier getIdentifierFirstRep() { 
1087      if (getIdentifier().isEmpty()) {
1088        addIdentifier();
1089      }
1090      return getIdentifier().get(0);
1091    }
1092
1093    /**
1094     * @return {@link #title} (A short, descriptive user-friendly label for the study.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1095     */
1096    public StringType getTitleElement() { 
1097      if (this.title == null)
1098        if (Configuration.errorOnAutoCreate())
1099          throw new Error("Attempt to auto-create ResearchStudy.title");
1100        else if (Configuration.doAutoCreate())
1101          this.title = new StringType(); // bb
1102      return this.title;
1103    }
1104
1105    public boolean hasTitleElement() { 
1106      return this.title != null && !this.title.isEmpty();
1107    }
1108
1109    public boolean hasTitle() { 
1110      return this.title != null && !this.title.isEmpty();
1111    }
1112
1113    /**
1114     * @param value {@link #title} (A short, descriptive user-friendly label for the study.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1115     */
1116    public ResearchStudy setTitleElement(StringType value) { 
1117      this.title = value;
1118      return this;
1119    }
1120
1121    /**
1122     * @return A short, descriptive user-friendly label for the study.
1123     */
1124    public String getTitle() { 
1125      return this.title == null ? null : this.title.getValue();
1126    }
1127
1128    /**
1129     * @param value A short, descriptive user-friendly label for the study.
1130     */
1131    public ResearchStudy setTitle(String value) { 
1132      if (Utilities.noString(value))
1133        this.title = null;
1134      else {
1135        if (this.title == null)
1136          this.title = new StringType();
1137        this.title.setValue(value);
1138      }
1139      return this;
1140    }
1141
1142    /**
1143     * @return {@link #protocol} (The set of steps expected to be performed as part of the execution of the study.)
1144     */
1145    public List<Reference> getProtocol() { 
1146      if (this.protocol == null)
1147        this.protocol = new ArrayList<Reference>();
1148      return this.protocol;
1149    }
1150
1151    /**
1152     * @return Returns a reference to <code>this</code> for easy method chaining
1153     */
1154    public ResearchStudy setProtocol(List<Reference> theProtocol) { 
1155      this.protocol = theProtocol;
1156      return this;
1157    }
1158
1159    public boolean hasProtocol() { 
1160      if (this.protocol == null)
1161        return false;
1162      for (Reference item : this.protocol)
1163        if (!item.isEmpty())
1164          return true;
1165      return false;
1166    }
1167
1168    public Reference addProtocol() { //3
1169      Reference t = new Reference();
1170      if (this.protocol == null)
1171        this.protocol = new ArrayList<Reference>();
1172      this.protocol.add(t);
1173      return t;
1174    }
1175
1176    public ResearchStudy addProtocol(Reference t) { //3
1177      if (t == null)
1178        return this;
1179      if (this.protocol == null)
1180        this.protocol = new ArrayList<Reference>();
1181      this.protocol.add(t);
1182      return this;
1183    }
1184
1185    /**
1186     * @return The first repetition of repeating field {@link #protocol}, creating it if it does not already exist
1187     */
1188    public Reference getProtocolFirstRep() { 
1189      if (getProtocol().isEmpty()) {
1190        addProtocol();
1191      }
1192      return getProtocol().get(0);
1193    }
1194
1195    /**
1196     * @deprecated Use Reference#setResource(IBaseResource) instead
1197     */
1198    @Deprecated
1199    public List<PlanDefinition> getProtocolTarget() { 
1200      if (this.protocolTarget == null)
1201        this.protocolTarget = new ArrayList<PlanDefinition>();
1202      return this.protocolTarget;
1203    }
1204
1205    /**
1206     * @deprecated Use Reference#setResource(IBaseResource) instead
1207     */
1208    @Deprecated
1209    public PlanDefinition addProtocolTarget() { 
1210      PlanDefinition r = new PlanDefinition();
1211      if (this.protocolTarget == null)
1212        this.protocolTarget = new ArrayList<PlanDefinition>();
1213      this.protocolTarget.add(r);
1214      return r;
1215    }
1216
1217    /**
1218     * @return {@link #partOf} (A larger research study of which this particular study is a component or step.)
1219     */
1220    public List<Reference> getPartOf() { 
1221      if (this.partOf == null)
1222        this.partOf = new ArrayList<Reference>();
1223      return this.partOf;
1224    }
1225
1226    /**
1227     * @return Returns a reference to <code>this</code> for easy method chaining
1228     */
1229    public ResearchStudy setPartOf(List<Reference> thePartOf) { 
1230      this.partOf = thePartOf;
1231      return this;
1232    }
1233
1234    public boolean hasPartOf() { 
1235      if (this.partOf == null)
1236        return false;
1237      for (Reference item : this.partOf)
1238        if (!item.isEmpty())
1239          return true;
1240      return false;
1241    }
1242
1243    public Reference addPartOf() { //3
1244      Reference t = new Reference();
1245      if (this.partOf == null)
1246        this.partOf = new ArrayList<Reference>();
1247      this.partOf.add(t);
1248      return t;
1249    }
1250
1251    public ResearchStudy addPartOf(Reference t) { //3
1252      if (t == null)
1253        return this;
1254      if (this.partOf == null)
1255        this.partOf = new ArrayList<Reference>();
1256      this.partOf.add(t);
1257      return this;
1258    }
1259
1260    /**
1261     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist
1262     */
1263    public Reference getPartOfFirstRep() { 
1264      if (getPartOf().isEmpty()) {
1265        addPartOf();
1266      }
1267      return getPartOf().get(0);
1268    }
1269
1270    /**
1271     * @deprecated Use Reference#setResource(IBaseResource) instead
1272     */
1273    @Deprecated
1274    public List<ResearchStudy> getPartOfTarget() { 
1275      if (this.partOfTarget == null)
1276        this.partOfTarget = new ArrayList<ResearchStudy>();
1277      return this.partOfTarget;
1278    }
1279
1280    /**
1281     * @deprecated Use Reference#setResource(IBaseResource) instead
1282     */
1283    @Deprecated
1284    public ResearchStudy addPartOfTarget() { 
1285      ResearchStudy r = new ResearchStudy();
1286      if (this.partOfTarget == null)
1287        this.partOfTarget = new ArrayList<ResearchStudy>();
1288      this.partOfTarget.add(r);
1289      return r;
1290    }
1291
1292    /**
1293     * @return {@link #status} (The current state of the study.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1294     */
1295    public Enumeration<ResearchStudyStatus> getStatusElement() { 
1296      if (this.status == null)
1297        if (Configuration.errorOnAutoCreate())
1298          throw new Error("Attempt to auto-create ResearchStudy.status");
1299        else if (Configuration.doAutoCreate())
1300          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory()); // bb
1301      return this.status;
1302    }
1303
1304    public boolean hasStatusElement() { 
1305      return this.status != null && !this.status.isEmpty();
1306    }
1307
1308    public boolean hasStatus() { 
1309      return this.status != null && !this.status.isEmpty();
1310    }
1311
1312    /**
1313     * @param value {@link #status} (The current state of the study.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1314     */
1315    public ResearchStudy setStatusElement(Enumeration<ResearchStudyStatus> value) { 
1316      this.status = value;
1317      return this;
1318    }
1319
1320    /**
1321     * @return The current state of the study.
1322     */
1323    public ResearchStudyStatus getStatus() { 
1324      return this.status == null ? null : this.status.getValue();
1325    }
1326
1327    /**
1328     * @param value The current state of the study.
1329     */
1330    public ResearchStudy setStatus(ResearchStudyStatus value) { 
1331        if (this.status == null)
1332          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory());
1333        this.status.setValue(value);
1334      return this;
1335    }
1336
1337    /**
1338     * @return {@link #primaryPurposeType} (The type of study based upon the intent of the study's activities. A classification of the intent of the study.)
1339     */
1340    public CodeableConcept getPrimaryPurposeType() { 
1341      if (this.primaryPurposeType == null)
1342        if (Configuration.errorOnAutoCreate())
1343          throw new Error("Attempt to auto-create ResearchStudy.primaryPurposeType");
1344        else if (Configuration.doAutoCreate())
1345          this.primaryPurposeType = new CodeableConcept(); // cc
1346      return this.primaryPurposeType;
1347    }
1348
1349    public boolean hasPrimaryPurposeType() { 
1350      return this.primaryPurposeType != null && !this.primaryPurposeType.isEmpty();
1351    }
1352
1353    /**
1354     * @param value {@link #primaryPurposeType} (The type of study based upon the intent of the study's activities. A classification of the intent of the study.)
1355     */
1356    public ResearchStudy setPrimaryPurposeType(CodeableConcept value) { 
1357      this.primaryPurposeType = value;
1358      return this;
1359    }
1360
1361    /**
1362     * @return {@link #phase} (The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.)
1363     */
1364    public CodeableConcept getPhase() { 
1365      if (this.phase == null)
1366        if (Configuration.errorOnAutoCreate())
1367          throw new Error("Attempt to auto-create ResearchStudy.phase");
1368        else if (Configuration.doAutoCreate())
1369          this.phase = new CodeableConcept(); // cc
1370      return this.phase;
1371    }
1372
1373    public boolean hasPhase() { 
1374      return this.phase != null && !this.phase.isEmpty();
1375    }
1376
1377    /**
1378     * @param value {@link #phase} (The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.)
1379     */
1380    public ResearchStudy setPhase(CodeableConcept value) { 
1381      this.phase = value;
1382      return this;
1383    }
1384
1385    /**
1386     * @return {@link #category} (Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.)
1387     */
1388    public List<CodeableConcept> getCategory() { 
1389      if (this.category == null)
1390        this.category = new ArrayList<CodeableConcept>();
1391      return this.category;
1392    }
1393
1394    /**
1395     * @return Returns a reference to <code>this</code> for easy method chaining
1396     */
1397    public ResearchStudy setCategory(List<CodeableConcept> theCategory) { 
1398      this.category = theCategory;
1399      return this;
1400    }
1401
1402    public boolean hasCategory() { 
1403      if (this.category == null)
1404        return false;
1405      for (CodeableConcept item : this.category)
1406        if (!item.isEmpty())
1407          return true;
1408      return false;
1409    }
1410
1411    public CodeableConcept addCategory() { //3
1412      CodeableConcept t = new CodeableConcept();
1413      if (this.category == null)
1414        this.category = new ArrayList<CodeableConcept>();
1415      this.category.add(t);
1416      return t;
1417    }
1418
1419    public ResearchStudy addCategory(CodeableConcept t) { //3
1420      if (t == null)
1421        return this;
1422      if (this.category == null)
1423        this.category = new ArrayList<CodeableConcept>();
1424      this.category.add(t);
1425      return this;
1426    }
1427
1428    /**
1429     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1430     */
1431    public CodeableConcept getCategoryFirstRep() { 
1432      if (getCategory().isEmpty()) {
1433        addCategory();
1434      }
1435      return getCategory().get(0);
1436    }
1437
1438    /**
1439     * @return {@link #focus} (The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.)
1440     */
1441    public List<CodeableConcept> getFocus() { 
1442      if (this.focus == null)
1443        this.focus = new ArrayList<CodeableConcept>();
1444      return this.focus;
1445    }
1446
1447    /**
1448     * @return Returns a reference to <code>this</code> for easy method chaining
1449     */
1450    public ResearchStudy setFocus(List<CodeableConcept> theFocus) { 
1451      this.focus = theFocus;
1452      return this;
1453    }
1454
1455    public boolean hasFocus() { 
1456      if (this.focus == null)
1457        return false;
1458      for (CodeableConcept item : this.focus)
1459        if (!item.isEmpty())
1460          return true;
1461      return false;
1462    }
1463
1464    public CodeableConcept addFocus() { //3
1465      CodeableConcept t = new CodeableConcept();
1466      if (this.focus == null)
1467        this.focus = new ArrayList<CodeableConcept>();
1468      this.focus.add(t);
1469      return t;
1470    }
1471
1472    public ResearchStudy addFocus(CodeableConcept t) { //3
1473      if (t == null)
1474        return this;
1475      if (this.focus == null)
1476        this.focus = new ArrayList<CodeableConcept>();
1477      this.focus.add(t);
1478      return this;
1479    }
1480
1481    /**
1482     * @return The first repetition of repeating field {@link #focus}, creating it if it does not already exist
1483     */
1484    public CodeableConcept getFocusFirstRep() { 
1485      if (getFocus().isEmpty()) {
1486        addFocus();
1487      }
1488      return getFocus().get(0);
1489    }
1490
1491    /**
1492     * @return {@link #condition} (The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion "healthy volunteer", but the target condition code would be a Lupus SNOMED code.)
1493     */
1494    public List<CodeableConcept> getCondition() { 
1495      if (this.condition == null)
1496        this.condition = new ArrayList<CodeableConcept>();
1497      return this.condition;
1498    }
1499
1500    /**
1501     * @return Returns a reference to <code>this</code> for easy method chaining
1502     */
1503    public ResearchStudy setCondition(List<CodeableConcept> theCondition) { 
1504      this.condition = theCondition;
1505      return this;
1506    }
1507
1508    public boolean hasCondition() { 
1509      if (this.condition == null)
1510        return false;
1511      for (CodeableConcept item : this.condition)
1512        if (!item.isEmpty())
1513          return true;
1514      return false;
1515    }
1516
1517    public CodeableConcept addCondition() { //3
1518      CodeableConcept t = new CodeableConcept();
1519      if (this.condition == null)
1520        this.condition = new ArrayList<CodeableConcept>();
1521      this.condition.add(t);
1522      return t;
1523    }
1524
1525    public ResearchStudy addCondition(CodeableConcept t) { //3
1526      if (t == null)
1527        return this;
1528      if (this.condition == null)
1529        this.condition = new ArrayList<CodeableConcept>();
1530      this.condition.add(t);
1531      return this;
1532    }
1533
1534    /**
1535     * @return The first repetition of repeating field {@link #condition}, creating it if it does not already exist
1536     */
1537    public CodeableConcept getConditionFirstRep() { 
1538      if (getCondition().isEmpty()) {
1539        addCondition();
1540      }
1541      return getCondition().get(0);
1542    }
1543
1544    /**
1545     * @return {@link #contact} (Contact details to assist a user in learning more about or engaging with the study.)
1546     */
1547    public List<ContactDetail> getContact() { 
1548      if (this.contact == null)
1549        this.contact = new ArrayList<ContactDetail>();
1550      return this.contact;
1551    }
1552
1553    /**
1554     * @return Returns a reference to <code>this</code> for easy method chaining
1555     */
1556    public ResearchStudy setContact(List<ContactDetail> theContact) { 
1557      this.contact = theContact;
1558      return this;
1559    }
1560
1561    public boolean hasContact() { 
1562      if (this.contact == null)
1563        return false;
1564      for (ContactDetail item : this.contact)
1565        if (!item.isEmpty())
1566          return true;
1567      return false;
1568    }
1569
1570    public ContactDetail addContact() { //3
1571      ContactDetail t = new ContactDetail();
1572      if (this.contact == null)
1573        this.contact = new ArrayList<ContactDetail>();
1574      this.contact.add(t);
1575      return t;
1576    }
1577
1578    public ResearchStudy addContact(ContactDetail t) { //3
1579      if (t == null)
1580        return this;
1581      if (this.contact == null)
1582        this.contact = new ArrayList<ContactDetail>();
1583      this.contact.add(t);
1584      return this;
1585    }
1586
1587    /**
1588     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1589     */
1590    public ContactDetail getContactFirstRep() { 
1591      if (getContact().isEmpty()) {
1592        addContact();
1593      }
1594      return getContact().get(0);
1595    }
1596
1597    /**
1598     * @return {@link #relatedArtifact} (Citations, references and other related documents.)
1599     */
1600    public List<RelatedArtifact> getRelatedArtifact() { 
1601      if (this.relatedArtifact == null)
1602        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1603      return this.relatedArtifact;
1604    }
1605
1606    /**
1607     * @return Returns a reference to <code>this</code> for easy method chaining
1608     */
1609    public ResearchStudy setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
1610      this.relatedArtifact = theRelatedArtifact;
1611      return this;
1612    }
1613
1614    public boolean hasRelatedArtifact() { 
1615      if (this.relatedArtifact == null)
1616        return false;
1617      for (RelatedArtifact item : this.relatedArtifact)
1618        if (!item.isEmpty())
1619          return true;
1620      return false;
1621    }
1622
1623    public RelatedArtifact addRelatedArtifact() { //3
1624      RelatedArtifact t = new RelatedArtifact();
1625      if (this.relatedArtifact == null)
1626        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1627      this.relatedArtifact.add(t);
1628      return t;
1629    }
1630
1631    public ResearchStudy addRelatedArtifact(RelatedArtifact t) { //3
1632      if (t == null)
1633        return this;
1634      if (this.relatedArtifact == null)
1635        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1636      this.relatedArtifact.add(t);
1637      return this;
1638    }
1639
1640    /**
1641     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist
1642     */
1643    public RelatedArtifact getRelatedArtifactFirstRep() { 
1644      if (getRelatedArtifact().isEmpty()) {
1645        addRelatedArtifact();
1646      }
1647      return getRelatedArtifact().get(0);
1648    }
1649
1650    /**
1651     * @return {@link #keyword} (Key terms to aid in searching for or filtering the study.)
1652     */
1653    public List<CodeableConcept> getKeyword() { 
1654      if (this.keyword == null)
1655        this.keyword = new ArrayList<CodeableConcept>();
1656      return this.keyword;
1657    }
1658
1659    /**
1660     * @return Returns a reference to <code>this</code> for easy method chaining
1661     */
1662    public ResearchStudy setKeyword(List<CodeableConcept> theKeyword) { 
1663      this.keyword = theKeyword;
1664      return this;
1665    }
1666
1667    public boolean hasKeyword() { 
1668      if (this.keyword == null)
1669        return false;
1670      for (CodeableConcept item : this.keyword)
1671        if (!item.isEmpty())
1672          return true;
1673      return false;
1674    }
1675
1676    public CodeableConcept addKeyword() { //3
1677      CodeableConcept t = new CodeableConcept();
1678      if (this.keyword == null)
1679        this.keyword = new ArrayList<CodeableConcept>();
1680      this.keyword.add(t);
1681      return t;
1682    }
1683
1684    public ResearchStudy addKeyword(CodeableConcept t) { //3
1685      if (t == null)
1686        return this;
1687      if (this.keyword == null)
1688        this.keyword = new ArrayList<CodeableConcept>();
1689      this.keyword.add(t);
1690      return this;
1691    }
1692
1693    /**
1694     * @return The first repetition of repeating field {@link #keyword}, creating it if it does not already exist
1695     */
1696    public CodeableConcept getKeywordFirstRep() { 
1697      if (getKeyword().isEmpty()) {
1698        addKeyword();
1699      }
1700      return getKeyword().get(0);
1701    }
1702
1703    /**
1704     * @return {@link #location} (Indicates a country, state or other region where the study is taking place.)
1705     */
1706    public List<CodeableConcept> getLocation() { 
1707      if (this.location == null)
1708        this.location = new ArrayList<CodeableConcept>();
1709      return this.location;
1710    }
1711
1712    /**
1713     * @return Returns a reference to <code>this</code> for easy method chaining
1714     */
1715    public ResearchStudy setLocation(List<CodeableConcept> theLocation) { 
1716      this.location = theLocation;
1717      return this;
1718    }
1719
1720    public boolean hasLocation() { 
1721      if (this.location == null)
1722        return false;
1723      for (CodeableConcept item : this.location)
1724        if (!item.isEmpty())
1725          return true;
1726      return false;
1727    }
1728
1729    public CodeableConcept addLocation() { //3
1730      CodeableConcept t = new CodeableConcept();
1731      if (this.location == null)
1732        this.location = new ArrayList<CodeableConcept>();
1733      this.location.add(t);
1734      return t;
1735    }
1736
1737    public ResearchStudy addLocation(CodeableConcept t) { //3
1738      if (t == null)
1739        return this;
1740      if (this.location == null)
1741        this.location = new ArrayList<CodeableConcept>();
1742      this.location.add(t);
1743      return this;
1744    }
1745
1746    /**
1747     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist
1748     */
1749    public CodeableConcept getLocationFirstRep() { 
1750      if (getLocation().isEmpty()) {
1751        addLocation();
1752      }
1753      return getLocation().get(0);
1754    }
1755
1756    /**
1757     * @return {@link #description} (A full description of how the study is being conducted.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1758     */
1759    public MarkdownType getDescriptionElement() { 
1760      if (this.description == null)
1761        if (Configuration.errorOnAutoCreate())
1762          throw new Error("Attempt to auto-create ResearchStudy.description");
1763        else if (Configuration.doAutoCreate())
1764          this.description = new MarkdownType(); // bb
1765      return this.description;
1766    }
1767
1768    public boolean hasDescriptionElement() { 
1769      return this.description != null && !this.description.isEmpty();
1770    }
1771
1772    public boolean hasDescription() { 
1773      return this.description != null && !this.description.isEmpty();
1774    }
1775
1776    /**
1777     * @param value {@link #description} (A full description of how the study is being conducted.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1778     */
1779    public ResearchStudy setDescriptionElement(MarkdownType value) { 
1780      this.description = value;
1781      return this;
1782    }
1783
1784    /**
1785     * @return A full description of how the study is being conducted.
1786     */
1787    public String getDescription() { 
1788      return this.description == null ? null : this.description.getValue();
1789    }
1790
1791    /**
1792     * @param value A full description of how the study is being conducted.
1793     */
1794    public ResearchStudy setDescription(String value) { 
1795      if (value == null)
1796        this.description = null;
1797      else {
1798        if (this.description == null)
1799          this.description = new MarkdownType();
1800        this.description.setValue(value);
1801      }
1802      return this;
1803    }
1804
1805    /**
1806     * @return {@link #enrollment} (Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. " 200 female Europeans between the ages of 20 and 45 with early onset diabetes".)
1807     */
1808    public List<Reference> getEnrollment() { 
1809      if (this.enrollment == null)
1810        this.enrollment = new ArrayList<Reference>();
1811      return this.enrollment;
1812    }
1813
1814    /**
1815     * @return Returns a reference to <code>this</code> for easy method chaining
1816     */
1817    public ResearchStudy setEnrollment(List<Reference> theEnrollment) { 
1818      this.enrollment = theEnrollment;
1819      return this;
1820    }
1821
1822    public boolean hasEnrollment() { 
1823      if (this.enrollment == null)
1824        return false;
1825      for (Reference item : this.enrollment)
1826        if (!item.isEmpty())
1827          return true;
1828      return false;
1829    }
1830
1831    public Reference addEnrollment() { //3
1832      Reference t = new Reference();
1833      if (this.enrollment == null)
1834        this.enrollment = new ArrayList<Reference>();
1835      this.enrollment.add(t);
1836      return t;
1837    }
1838
1839    public ResearchStudy addEnrollment(Reference t) { //3
1840      if (t == null)
1841        return this;
1842      if (this.enrollment == null)
1843        this.enrollment = new ArrayList<Reference>();
1844      this.enrollment.add(t);
1845      return this;
1846    }
1847
1848    /**
1849     * @return The first repetition of repeating field {@link #enrollment}, creating it if it does not already exist
1850     */
1851    public Reference getEnrollmentFirstRep() { 
1852      if (getEnrollment().isEmpty()) {
1853        addEnrollment();
1854      }
1855      return getEnrollment().get(0);
1856    }
1857
1858    /**
1859     * @deprecated Use Reference#setResource(IBaseResource) instead
1860     */
1861    @Deprecated
1862    public List<Group> getEnrollmentTarget() { 
1863      if (this.enrollmentTarget == null)
1864        this.enrollmentTarget = new ArrayList<Group>();
1865      return this.enrollmentTarget;
1866    }
1867
1868    /**
1869     * @deprecated Use Reference#setResource(IBaseResource) instead
1870     */
1871    @Deprecated
1872    public Group addEnrollmentTarget() { 
1873      Group r = new Group();
1874      if (this.enrollmentTarget == null)
1875        this.enrollmentTarget = new ArrayList<Group>();
1876      this.enrollmentTarget.add(r);
1877      return r;
1878    }
1879
1880    /**
1881     * @return {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1882     */
1883    public Period getPeriod() { 
1884      if (this.period == null)
1885        if (Configuration.errorOnAutoCreate())
1886          throw new Error("Attempt to auto-create ResearchStudy.period");
1887        else if (Configuration.doAutoCreate())
1888          this.period = new Period(); // cc
1889      return this.period;
1890    }
1891
1892    public boolean hasPeriod() { 
1893      return this.period != null && !this.period.isEmpty();
1894    }
1895
1896    /**
1897     * @param value {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1898     */
1899    public ResearchStudy setPeriod(Period value) { 
1900      this.period = value;
1901      return this;
1902    }
1903
1904    /**
1905     * @return {@link #sponsor} (An organization that initiates the investigation and is legally responsible for the study.)
1906     */
1907    public Reference getSponsor() { 
1908      if (this.sponsor == null)
1909        if (Configuration.errorOnAutoCreate())
1910          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1911        else if (Configuration.doAutoCreate())
1912          this.sponsor = new Reference(); // cc
1913      return this.sponsor;
1914    }
1915
1916    public boolean hasSponsor() { 
1917      return this.sponsor != null && !this.sponsor.isEmpty();
1918    }
1919
1920    /**
1921     * @param value {@link #sponsor} (An organization that initiates the investigation and is legally responsible for the study.)
1922     */
1923    public ResearchStudy setSponsor(Reference value) { 
1924      this.sponsor = value;
1925      return this;
1926    }
1927
1928    /**
1929     * @return {@link #sponsor} 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 organization that initiates the investigation and is legally responsible for the study.)
1930     */
1931    public Organization getSponsorTarget() { 
1932      if (this.sponsorTarget == null)
1933        if (Configuration.errorOnAutoCreate())
1934          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1935        else if (Configuration.doAutoCreate())
1936          this.sponsorTarget = new Organization(); // aa
1937      return this.sponsorTarget;
1938    }
1939
1940    /**
1941     * @param value {@link #sponsor} 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 organization that initiates the investigation and is legally responsible for the study.)
1942     */
1943    public ResearchStudy setSponsorTarget(Organization value) { 
1944      this.sponsorTarget = value;
1945      return this;
1946    }
1947
1948    /**
1949     * @return {@link #principalInvestigator} (A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.)
1950     */
1951    public Reference getPrincipalInvestigator() { 
1952      if (this.principalInvestigator == null)
1953        if (Configuration.errorOnAutoCreate())
1954          throw new Error("Attempt to auto-create ResearchStudy.principalInvestigator");
1955        else if (Configuration.doAutoCreate())
1956          this.principalInvestigator = new Reference(); // cc
1957      return this.principalInvestigator;
1958    }
1959
1960    public boolean hasPrincipalInvestigator() { 
1961      return this.principalInvestigator != null && !this.principalInvestigator.isEmpty();
1962    }
1963
1964    /**
1965     * @param value {@link #principalInvestigator} (A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.)
1966     */
1967    public ResearchStudy setPrincipalInvestigator(Reference value) { 
1968      this.principalInvestigator = value;
1969      return this;
1970    }
1971
1972    /**
1973     * @return {@link #principalInvestigator} 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. (A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.)
1974     */
1975    public Resource getPrincipalInvestigatorTarget() { 
1976      return this.principalInvestigatorTarget;
1977    }
1978
1979    /**
1980     * @param value {@link #principalInvestigator} 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. (A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.)
1981     */
1982    public ResearchStudy setPrincipalInvestigatorTarget(Resource value) { 
1983      this.principalInvestigatorTarget = value;
1984      return this;
1985    }
1986
1987    /**
1988     * @return {@link #site} (A facility in which study activities are conducted.)
1989     */
1990    public List<Reference> getSite() { 
1991      if (this.site == null)
1992        this.site = new ArrayList<Reference>();
1993      return this.site;
1994    }
1995
1996    /**
1997     * @return Returns a reference to <code>this</code> for easy method chaining
1998     */
1999    public ResearchStudy setSite(List<Reference> theSite) { 
2000      this.site = theSite;
2001      return this;
2002    }
2003
2004    public boolean hasSite() { 
2005      if (this.site == null)
2006        return false;
2007      for (Reference item : this.site)
2008        if (!item.isEmpty())
2009          return true;
2010      return false;
2011    }
2012
2013    public Reference addSite() { //3
2014      Reference t = new Reference();
2015      if (this.site == null)
2016        this.site = new ArrayList<Reference>();
2017      this.site.add(t);
2018      return t;
2019    }
2020
2021    public ResearchStudy addSite(Reference t) { //3
2022      if (t == null)
2023        return this;
2024      if (this.site == null)
2025        this.site = new ArrayList<Reference>();
2026      this.site.add(t);
2027      return this;
2028    }
2029
2030    /**
2031     * @return The first repetition of repeating field {@link #site}, creating it if it does not already exist
2032     */
2033    public Reference getSiteFirstRep() { 
2034      if (getSite().isEmpty()) {
2035        addSite();
2036      }
2037      return getSite().get(0);
2038    }
2039
2040    /**
2041     * @deprecated Use Reference#setResource(IBaseResource) instead
2042     */
2043    @Deprecated
2044    public List<Location> getSiteTarget() { 
2045      if (this.siteTarget == null)
2046        this.siteTarget = new ArrayList<Location>();
2047      return this.siteTarget;
2048    }
2049
2050    /**
2051     * @deprecated Use Reference#setResource(IBaseResource) instead
2052     */
2053    @Deprecated
2054    public Location addSiteTarget() { 
2055      Location r = new Location();
2056      if (this.siteTarget == null)
2057        this.siteTarget = new ArrayList<Location>();
2058      this.siteTarget.add(r);
2059      return r;
2060    }
2061
2062    /**
2063     * @return {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
2064     */
2065    public CodeableConcept getReasonStopped() { 
2066      if (this.reasonStopped == null)
2067        if (Configuration.errorOnAutoCreate())
2068          throw new Error("Attempt to auto-create ResearchStudy.reasonStopped");
2069        else if (Configuration.doAutoCreate())
2070          this.reasonStopped = new CodeableConcept(); // cc
2071      return this.reasonStopped;
2072    }
2073
2074    public boolean hasReasonStopped() { 
2075      return this.reasonStopped != null && !this.reasonStopped.isEmpty();
2076    }
2077
2078    /**
2079     * @param value {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
2080     */
2081    public ResearchStudy setReasonStopped(CodeableConcept value) { 
2082      this.reasonStopped = value;
2083      return this;
2084    }
2085
2086    /**
2087     * @return {@link #note} (Comments made about the study by the performer, subject or other participants.)
2088     */
2089    public List<Annotation> getNote() { 
2090      if (this.note == null)
2091        this.note = new ArrayList<Annotation>();
2092      return this.note;
2093    }
2094
2095    /**
2096     * @return Returns a reference to <code>this</code> for easy method chaining
2097     */
2098    public ResearchStudy setNote(List<Annotation> theNote) { 
2099      this.note = theNote;
2100      return this;
2101    }
2102
2103    public boolean hasNote() { 
2104      if (this.note == null)
2105        return false;
2106      for (Annotation item : this.note)
2107        if (!item.isEmpty())
2108          return true;
2109      return false;
2110    }
2111
2112    public Annotation addNote() { //3
2113      Annotation t = new Annotation();
2114      if (this.note == null)
2115        this.note = new ArrayList<Annotation>();
2116      this.note.add(t);
2117      return t;
2118    }
2119
2120    public ResearchStudy addNote(Annotation t) { //3
2121      if (t == null)
2122        return this;
2123      if (this.note == null)
2124        this.note = new ArrayList<Annotation>();
2125      this.note.add(t);
2126      return this;
2127    }
2128
2129    /**
2130     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
2131     */
2132    public Annotation getNoteFirstRep() { 
2133      if (getNote().isEmpty()) {
2134        addNote();
2135      }
2136      return getNote().get(0);
2137    }
2138
2139    /**
2140     * @return {@link #arm} (Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.)
2141     */
2142    public List<ResearchStudyArmComponent> getArm() { 
2143      if (this.arm == null)
2144        this.arm = new ArrayList<ResearchStudyArmComponent>();
2145      return this.arm;
2146    }
2147
2148    /**
2149     * @return Returns a reference to <code>this</code> for easy method chaining
2150     */
2151    public ResearchStudy setArm(List<ResearchStudyArmComponent> theArm) { 
2152      this.arm = theArm;
2153      return this;
2154    }
2155
2156    public boolean hasArm() { 
2157      if (this.arm == null)
2158        return false;
2159      for (ResearchStudyArmComponent item : this.arm)
2160        if (!item.isEmpty())
2161          return true;
2162      return false;
2163    }
2164
2165    public ResearchStudyArmComponent addArm() { //3
2166      ResearchStudyArmComponent t = new ResearchStudyArmComponent();
2167      if (this.arm == null)
2168        this.arm = new ArrayList<ResearchStudyArmComponent>();
2169      this.arm.add(t);
2170      return t;
2171    }
2172
2173    public ResearchStudy addArm(ResearchStudyArmComponent t) { //3
2174      if (t == null)
2175        return this;
2176      if (this.arm == null)
2177        this.arm = new ArrayList<ResearchStudyArmComponent>();
2178      this.arm.add(t);
2179      return this;
2180    }
2181
2182    /**
2183     * @return The first repetition of repeating field {@link #arm}, creating it if it does not already exist
2184     */
2185    public ResearchStudyArmComponent getArmFirstRep() { 
2186      if (getArm().isEmpty()) {
2187        addArm();
2188      }
2189      return getArm().get(0);
2190    }
2191
2192    /**
2193     * @return {@link #objective} (A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.)
2194     */
2195    public List<ResearchStudyObjectiveComponent> getObjective() { 
2196      if (this.objective == null)
2197        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
2198      return this.objective;
2199    }
2200
2201    /**
2202     * @return Returns a reference to <code>this</code> for easy method chaining
2203     */
2204    public ResearchStudy setObjective(List<ResearchStudyObjectiveComponent> theObjective) { 
2205      this.objective = theObjective;
2206      return this;
2207    }
2208
2209    public boolean hasObjective() { 
2210      if (this.objective == null)
2211        return false;
2212      for (ResearchStudyObjectiveComponent item : this.objective)
2213        if (!item.isEmpty())
2214          return true;
2215      return false;
2216    }
2217
2218    public ResearchStudyObjectiveComponent addObjective() { //3
2219      ResearchStudyObjectiveComponent t = new ResearchStudyObjectiveComponent();
2220      if (this.objective == null)
2221        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
2222      this.objective.add(t);
2223      return t;
2224    }
2225
2226    public ResearchStudy addObjective(ResearchStudyObjectiveComponent t) { //3
2227      if (t == null)
2228        return this;
2229      if (this.objective == null)
2230        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
2231      this.objective.add(t);
2232      return this;
2233    }
2234
2235    /**
2236     * @return The first repetition of repeating field {@link #objective}, creating it if it does not already exist
2237     */
2238    public ResearchStudyObjectiveComponent getObjectiveFirstRep() { 
2239      if (getObjective().isEmpty()) {
2240        addObjective();
2241      }
2242      return getObjective().get(0);
2243    }
2244
2245      protected void listChildren(List<Property> children) {
2246        super.listChildren(children);
2247        children.add(new Property("identifier", "Identifier", "Identifiers assigned to this research study by the sponsor or other systems.", 0, java.lang.Integer.MAX_VALUE, identifier));
2248        children.add(new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title));
2249        children.add(new Property("protocol", "Reference(PlanDefinition)", "The set of steps expected to be performed as part of the execution of the study.", 0, java.lang.Integer.MAX_VALUE, protocol));
2250        children.add(new Property("partOf", "Reference(ResearchStudy)", "A larger research study of which this particular study is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf));
2251        children.add(new Property("status", "code", "The current state of the study.", 0, 1, status));
2252        children.add(new Property("primaryPurposeType", "CodeableConcept", "The type of study based upon the intent of the study's activities. A classification of the intent of the study.", 0, 1, primaryPurposeType));
2253        children.add(new Property("phase", "CodeableConcept", "The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.", 0, 1, phase));
2254        children.add(new Property("category", "CodeableConcept", "Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.", 0, java.lang.Integer.MAX_VALUE, category));
2255        children.add(new Property("focus", "CodeableConcept", "The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.", 0, java.lang.Integer.MAX_VALUE, focus));
2256        children.add(new Property("condition", "CodeableConcept", "The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion \"healthy volunteer\", but the target condition code would be a Lupus SNOMED code.", 0, java.lang.Integer.MAX_VALUE, condition));
2257        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in learning more about or engaging with the study.", 0, java.lang.Integer.MAX_VALUE, contact));
2258        children.add(new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
2259        children.add(new Property("keyword", "CodeableConcept", "Key terms to aid in searching for or filtering the study.", 0, java.lang.Integer.MAX_VALUE, keyword));
2260        children.add(new Property("location", "CodeableConcept", "Indicates a country, state or other region where the study is taking place.", 0, java.lang.Integer.MAX_VALUE, location));
2261        children.add(new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description));
2262        children.add(new Property("enrollment", "Reference(Group)", "Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. \" 200 female Europeans between the ages of 20 and 45 with early onset diabetes\".", 0, java.lang.Integer.MAX_VALUE, enrollment));
2263        children.add(new Property("period", "Period", "Identifies the start date and the expected (or actual, depending on status) end date for the study.", 0, 1, period));
2264        children.add(new Property("sponsor", "Reference(Organization)", "An organization that initiates the investigation and is legally responsible for the study.", 0, 1, sponsor));
2265        children.add(new Property("principalInvestigator", "Reference(Practitioner|PractitionerRole)", "A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.", 0, 1, principalInvestigator));
2266        children.add(new Property("site", "Reference(Location)", "A facility in which study activities are conducted.", 0, java.lang.Integer.MAX_VALUE, site));
2267        children.add(new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped));
2268        children.add(new Property("note", "Annotation", "Comments made about the study by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note));
2269        children.add(new Property("arm", "", "Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.", 0, java.lang.Integer.MAX_VALUE, arm));
2270        children.add(new Property("objective", "", "A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.", 0, java.lang.Integer.MAX_VALUE, objective));
2271      }
2272
2273      @Override
2274      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2275        switch (_hash) {
2276        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers assigned to this research study by the sponsor or other systems.", 0, java.lang.Integer.MAX_VALUE, identifier);
2277        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title);
2278        case -989163880: /*protocol*/  return new Property("protocol", "Reference(PlanDefinition)", "The set of steps expected to be performed as part of the execution of the study.", 0, java.lang.Integer.MAX_VALUE, protocol);
2279        case -995410646: /*partOf*/  return new Property("partOf", "Reference(ResearchStudy)", "A larger research study of which this particular study is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf);
2280        case -892481550: /*status*/  return new Property("status", "code", "The current state of the study.", 0, 1, status);
2281        case -2132842986: /*primaryPurposeType*/  return new Property("primaryPurposeType", "CodeableConcept", "The type of study based upon the intent of the study's activities. A classification of the intent of the study.", 0, 1, primaryPurposeType);
2282        case 106629499: /*phase*/  return new Property("phase", "CodeableConcept", "The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.", 0, 1, phase);
2283        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.", 0, java.lang.Integer.MAX_VALUE, category);
2284        case 97604824: /*focus*/  return new Property("focus", "CodeableConcept", "The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.", 0, java.lang.Integer.MAX_VALUE, focus);
2285        case -861311717: /*condition*/  return new Property("condition", "CodeableConcept", "The condition that is the focus of the study.  For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion \"healthy volunteer\", but the target condition code would be a Lupus SNOMED code.", 0, java.lang.Integer.MAX_VALUE, condition);
2286        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in learning more about or engaging with the study.", 0, java.lang.Integer.MAX_VALUE, contact);
2287        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
2288        case -814408215: /*keyword*/  return new Property("keyword", "CodeableConcept", "Key terms to aid in searching for or filtering the study.", 0, java.lang.Integer.MAX_VALUE, keyword);
2289        case 1901043637: /*location*/  return new Property("location", "CodeableConcept", "Indicates a country, state or other region where the study is taking place.", 0, java.lang.Integer.MAX_VALUE, location);
2290        case -1724546052: /*description*/  return new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description);
2291        case 116089604: /*enrollment*/  return new Property("enrollment", "Reference(Group)", "Reference to a Group that defines the criteria for and quantity of subjects participating in the study.  E.g. \" 200 female Europeans between the ages of 20 and 45 with early onset diabetes\".", 0, java.lang.Integer.MAX_VALUE, enrollment);
2292        case -991726143: /*period*/  return new Property("period", "Period", "Identifies the start date and the expected (or actual, depending on status) end date for the study.", 0, 1, period);
2293        case -1998892262: /*sponsor*/  return new Property("sponsor", "Reference(Organization)", "An organization that initiates the investigation and is legally responsible for the study.", 0, 1, sponsor);
2294        case 1437117175: /*principalInvestigator*/  return new Property("principalInvestigator", "Reference(Practitioner|PractitionerRole)", "A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.", 0, 1, principalInvestigator);
2295        case 3530567: /*site*/  return new Property("site", "Reference(Location)", "A facility in which study activities are conducted.", 0, java.lang.Integer.MAX_VALUE, site);
2296        case 1181369065: /*reasonStopped*/  return new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped);
2297        case 3387378: /*note*/  return new Property("note", "Annotation", "Comments made about the study by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note);
2298        case 96860: /*arm*/  return new Property("arm", "", "Describes an expected sequence of events for one of the participants of a study.  E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.", 0, java.lang.Integer.MAX_VALUE, arm);
2299        case -1489585863: /*objective*/  return new Property("objective", "", "A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.", 0, java.lang.Integer.MAX_VALUE, objective);
2300        default: return super.getNamedProperty(_hash, _name, _checkValid);
2301        }
2302
2303      }
2304
2305      @Override
2306      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2307        switch (hash) {
2308        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2309        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2310        case -989163880: /*protocol*/ return this.protocol == null ? new Base[0] : this.protocol.toArray(new Base[this.protocol.size()]); // Reference
2311        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
2312        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ResearchStudyStatus>
2313        case -2132842986: /*primaryPurposeType*/ return this.primaryPurposeType == null ? new Base[0] : new Base[] {this.primaryPurposeType}; // CodeableConcept
2314        case 106629499: /*phase*/ return this.phase == null ? new Base[0] : new Base[] {this.phase}; // CodeableConcept
2315        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
2316        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // CodeableConcept
2317        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // CodeableConcept
2318        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2319        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
2320        case -814408215: /*keyword*/ return this.keyword == null ? new Base[0] : this.keyword.toArray(new Base[this.keyword.size()]); // CodeableConcept
2321        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // CodeableConcept
2322        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2323        case 116089604: /*enrollment*/ return this.enrollment == null ? new Base[0] : this.enrollment.toArray(new Base[this.enrollment.size()]); // Reference
2324        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
2325        case -1998892262: /*sponsor*/ return this.sponsor == null ? new Base[0] : new Base[] {this.sponsor}; // Reference
2326        case 1437117175: /*principalInvestigator*/ return this.principalInvestigator == null ? new Base[0] : new Base[] {this.principalInvestigator}; // Reference
2327        case 3530567: /*site*/ return this.site == null ? new Base[0] : this.site.toArray(new Base[this.site.size()]); // Reference
2328        case 1181369065: /*reasonStopped*/ return this.reasonStopped == null ? new Base[0] : new Base[] {this.reasonStopped}; // CodeableConcept
2329        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2330        case 96860: /*arm*/ return this.arm == null ? new Base[0] : this.arm.toArray(new Base[this.arm.size()]); // ResearchStudyArmComponent
2331        case -1489585863: /*objective*/ return this.objective == null ? new Base[0] : this.objective.toArray(new Base[this.objective.size()]); // ResearchStudyObjectiveComponent
2332        default: return super.getProperty(hash, name, checkValid);
2333        }
2334
2335      }
2336
2337      @Override
2338      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2339        switch (hash) {
2340        case -1618432855: // identifier
2341          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2342          return value;
2343        case 110371416: // title
2344          this.title = castToString(value); // StringType
2345          return value;
2346        case -989163880: // protocol
2347          this.getProtocol().add(castToReference(value)); // Reference
2348          return value;
2349        case -995410646: // partOf
2350          this.getPartOf().add(castToReference(value)); // Reference
2351          return value;
2352        case -892481550: // status
2353          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
2354          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
2355          return value;
2356        case -2132842986: // primaryPurposeType
2357          this.primaryPurposeType = castToCodeableConcept(value); // CodeableConcept
2358          return value;
2359        case 106629499: // phase
2360          this.phase = castToCodeableConcept(value); // CodeableConcept
2361          return value;
2362        case 50511102: // category
2363          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
2364          return value;
2365        case 97604824: // focus
2366          this.getFocus().add(castToCodeableConcept(value)); // CodeableConcept
2367          return value;
2368        case -861311717: // condition
2369          this.getCondition().add(castToCodeableConcept(value)); // CodeableConcept
2370          return value;
2371        case 951526432: // contact
2372          this.getContact().add(castToContactDetail(value)); // ContactDetail
2373          return value;
2374        case 666807069: // relatedArtifact
2375          this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
2376          return value;
2377        case -814408215: // keyword
2378          this.getKeyword().add(castToCodeableConcept(value)); // CodeableConcept
2379          return value;
2380        case 1901043637: // location
2381          this.getLocation().add(castToCodeableConcept(value)); // CodeableConcept
2382          return value;
2383        case -1724546052: // description
2384          this.description = castToMarkdown(value); // MarkdownType
2385          return value;
2386        case 116089604: // enrollment
2387          this.getEnrollment().add(castToReference(value)); // Reference
2388          return value;
2389        case -991726143: // period
2390          this.period = castToPeriod(value); // Period
2391          return value;
2392        case -1998892262: // sponsor
2393          this.sponsor = castToReference(value); // Reference
2394          return value;
2395        case 1437117175: // principalInvestigator
2396          this.principalInvestigator = castToReference(value); // Reference
2397          return value;
2398        case 3530567: // site
2399          this.getSite().add(castToReference(value)); // Reference
2400          return value;
2401        case 1181369065: // reasonStopped
2402          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
2403          return value;
2404        case 3387378: // note
2405          this.getNote().add(castToAnnotation(value)); // Annotation
2406          return value;
2407        case 96860: // arm
2408          this.getArm().add((ResearchStudyArmComponent) value); // ResearchStudyArmComponent
2409          return value;
2410        case -1489585863: // objective
2411          this.getObjective().add((ResearchStudyObjectiveComponent) value); // ResearchStudyObjectiveComponent
2412          return value;
2413        default: return super.setProperty(hash, name, value);
2414        }
2415
2416      }
2417
2418      @Override
2419      public Base setProperty(String name, Base value) throws FHIRException {
2420        if (name.equals("identifier")) {
2421          this.getIdentifier().add(castToIdentifier(value));
2422        } else if (name.equals("title")) {
2423          this.title = castToString(value); // StringType
2424        } else if (name.equals("protocol")) {
2425          this.getProtocol().add(castToReference(value));
2426        } else if (name.equals("partOf")) {
2427          this.getPartOf().add(castToReference(value));
2428        } else if (name.equals("status")) {
2429          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
2430          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
2431        } else if (name.equals("primaryPurposeType")) {
2432          this.primaryPurposeType = castToCodeableConcept(value); // CodeableConcept
2433        } else if (name.equals("phase")) {
2434          this.phase = castToCodeableConcept(value); // CodeableConcept
2435        } else if (name.equals("category")) {
2436          this.getCategory().add(castToCodeableConcept(value));
2437        } else if (name.equals("focus")) {
2438          this.getFocus().add(castToCodeableConcept(value));
2439        } else if (name.equals("condition")) {
2440          this.getCondition().add(castToCodeableConcept(value));
2441        } else if (name.equals("contact")) {
2442          this.getContact().add(castToContactDetail(value));
2443        } else if (name.equals("relatedArtifact")) {
2444          this.getRelatedArtifact().add(castToRelatedArtifact(value));
2445        } else if (name.equals("keyword")) {
2446          this.getKeyword().add(castToCodeableConcept(value));
2447        } else if (name.equals("location")) {
2448          this.getLocation().add(castToCodeableConcept(value));
2449        } else if (name.equals("description")) {
2450          this.description = castToMarkdown(value); // MarkdownType
2451        } else if (name.equals("enrollment")) {
2452          this.getEnrollment().add(castToReference(value));
2453        } else if (name.equals("period")) {
2454          this.period = castToPeriod(value); // Period
2455        } else if (name.equals("sponsor")) {
2456          this.sponsor = castToReference(value); // Reference
2457        } else if (name.equals("principalInvestigator")) {
2458          this.principalInvestigator = castToReference(value); // Reference
2459        } else if (name.equals("site")) {
2460          this.getSite().add(castToReference(value));
2461        } else if (name.equals("reasonStopped")) {
2462          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
2463        } else if (name.equals("note")) {
2464          this.getNote().add(castToAnnotation(value));
2465        } else if (name.equals("arm")) {
2466          this.getArm().add((ResearchStudyArmComponent) value);
2467        } else if (name.equals("objective")) {
2468          this.getObjective().add((ResearchStudyObjectiveComponent) value);
2469        } else
2470          return super.setProperty(name, value);
2471        return value;
2472      }
2473
2474      @Override
2475      public Base makeProperty(int hash, String name) throws FHIRException {
2476        switch (hash) {
2477        case -1618432855:  return addIdentifier(); 
2478        case 110371416:  return getTitleElement();
2479        case -989163880:  return addProtocol(); 
2480        case -995410646:  return addPartOf(); 
2481        case -892481550:  return getStatusElement();
2482        case -2132842986:  return getPrimaryPurposeType(); 
2483        case 106629499:  return getPhase(); 
2484        case 50511102:  return addCategory(); 
2485        case 97604824:  return addFocus(); 
2486        case -861311717:  return addCondition(); 
2487        case 951526432:  return addContact(); 
2488        case 666807069:  return addRelatedArtifact(); 
2489        case -814408215:  return addKeyword(); 
2490        case 1901043637:  return addLocation(); 
2491        case -1724546052:  return getDescriptionElement();
2492        case 116089604:  return addEnrollment(); 
2493        case -991726143:  return getPeriod(); 
2494        case -1998892262:  return getSponsor(); 
2495        case 1437117175:  return getPrincipalInvestigator(); 
2496        case 3530567:  return addSite(); 
2497        case 1181369065:  return getReasonStopped(); 
2498        case 3387378:  return addNote(); 
2499        case 96860:  return addArm(); 
2500        case -1489585863:  return addObjective(); 
2501        default: return super.makeProperty(hash, name);
2502        }
2503
2504      }
2505
2506      @Override
2507      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2508        switch (hash) {
2509        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2510        case 110371416: /*title*/ return new String[] {"string"};
2511        case -989163880: /*protocol*/ return new String[] {"Reference"};
2512        case -995410646: /*partOf*/ return new String[] {"Reference"};
2513        case -892481550: /*status*/ return new String[] {"code"};
2514        case -2132842986: /*primaryPurposeType*/ return new String[] {"CodeableConcept"};
2515        case 106629499: /*phase*/ return new String[] {"CodeableConcept"};
2516        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2517        case 97604824: /*focus*/ return new String[] {"CodeableConcept"};
2518        case -861311717: /*condition*/ return new String[] {"CodeableConcept"};
2519        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
2520        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
2521        case -814408215: /*keyword*/ return new String[] {"CodeableConcept"};
2522        case 1901043637: /*location*/ return new String[] {"CodeableConcept"};
2523        case -1724546052: /*description*/ return new String[] {"markdown"};
2524        case 116089604: /*enrollment*/ return new String[] {"Reference"};
2525        case -991726143: /*period*/ return new String[] {"Period"};
2526        case -1998892262: /*sponsor*/ return new String[] {"Reference"};
2527        case 1437117175: /*principalInvestigator*/ return new String[] {"Reference"};
2528        case 3530567: /*site*/ return new String[] {"Reference"};
2529        case 1181369065: /*reasonStopped*/ return new String[] {"CodeableConcept"};
2530        case 3387378: /*note*/ return new String[] {"Annotation"};
2531        case 96860: /*arm*/ return new String[] {};
2532        case -1489585863: /*objective*/ return new String[] {};
2533        default: return super.getTypesForProperty(hash, name);
2534        }
2535
2536      }
2537
2538      @Override
2539      public Base addChild(String name) throws FHIRException {
2540        if (name.equals("identifier")) {
2541          return addIdentifier();
2542        }
2543        else if (name.equals("title")) {
2544          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.title");
2545        }
2546        else if (name.equals("protocol")) {
2547          return addProtocol();
2548        }
2549        else if (name.equals("partOf")) {
2550          return addPartOf();
2551        }
2552        else if (name.equals("status")) {
2553          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.status");
2554        }
2555        else if (name.equals("primaryPurposeType")) {
2556          this.primaryPurposeType = new CodeableConcept();
2557          return this.primaryPurposeType;
2558        }
2559        else if (name.equals("phase")) {
2560          this.phase = new CodeableConcept();
2561          return this.phase;
2562        }
2563        else if (name.equals("category")) {
2564          return addCategory();
2565        }
2566        else if (name.equals("focus")) {
2567          return addFocus();
2568        }
2569        else if (name.equals("condition")) {
2570          return addCondition();
2571        }
2572        else if (name.equals("contact")) {
2573          return addContact();
2574        }
2575        else if (name.equals("relatedArtifact")) {
2576          return addRelatedArtifact();
2577        }
2578        else if (name.equals("keyword")) {
2579          return addKeyword();
2580        }
2581        else if (name.equals("location")) {
2582          return addLocation();
2583        }
2584        else if (name.equals("description")) {
2585          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.description");
2586        }
2587        else if (name.equals("enrollment")) {
2588          return addEnrollment();
2589        }
2590        else if (name.equals("period")) {
2591          this.period = new Period();
2592          return this.period;
2593        }
2594        else if (name.equals("sponsor")) {
2595          this.sponsor = new Reference();
2596          return this.sponsor;
2597        }
2598        else if (name.equals("principalInvestigator")) {
2599          this.principalInvestigator = new Reference();
2600          return this.principalInvestigator;
2601        }
2602        else if (name.equals("site")) {
2603          return addSite();
2604        }
2605        else if (name.equals("reasonStopped")) {
2606          this.reasonStopped = new CodeableConcept();
2607          return this.reasonStopped;
2608        }
2609        else if (name.equals("note")) {
2610          return addNote();
2611        }
2612        else if (name.equals("arm")) {
2613          return addArm();
2614        }
2615        else if (name.equals("objective")) {
2616          return addObjective();
2617        }
2618        else
2619          return super.addChild(name);
2620      }
2621
2622  public String fhirType() {
2623    return "ResearchStudy";
2624
2625  }
2626
2627      public ResearchStudy copy() {
2628        ResearchStudy dst = new ResearchStudy();
2629        copyValues(dst);
2630        return dst;
2631      }
2632
2633      public void copyValues(ResearchStudy dst) {
2634        super.copyValues(dst);
2635        if (identifier != null) {
2636          dst.identifier = new ArrayList<Identifier>();
2637          for (Identifier i : identifier)
2638            dst.identifier.add(i.copy());
2639        };
2640        dst.title = title == null ? null : title.copy();
2641        if (protocol != null) {
2642          dst.protocol = new ArrayList<Reference>();
2643          for (Reference i : protocol)
2644            dst.protocol.add(i.copy());
2645        };
2646        if (partOf != null) {
2647          dst.partOf = new ArrayList<Reference>();
2648          for (Reference i : partOf)
2649            dst.partOf.add(i.copy());
2650        };
2651        dst.status = status == null ? null : status.copy();
2652        dst.primaryPurposeType = primaryPurposeType == null ? null : primaryPurposeType.copy();
2653        dst.phase = phase == null ? null : phase.copy();
2654        if (category != null) {
2655          dst.category = new ArrayList<CodeableConcept>();
2656          for (CodeableConcept i : category)
2657            dst.category.add(i.copy());
2658        };
2659        if (focus != null) {
2660          dst.focus = new ArrayList<CodeableConcept>();
2661          for (CodeableConcept i : focus)
2662            dst.focus.add(i.copy());
2663        };
2664        if (condition != null) {
2665          dst.condition = new ArrayList<CodeableConcept>();
2666          for (CodeableConcept i : condition)
2667            dst.condition.add(i.copy());
2668        };
2669        if (contact != null) {
2670          dst.contact = new ArrayList<ContactDetail>();
2671          for (ContactDetail i : contact)
2672            dst.contact.add(i.copy());
2673        };
2674        if (relatedArtifact != null) {
2675          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
2676          for (RelatedArtifact i : relatedArtifact)
2677            dst.relatedArtifact.add(i.copy());
2678        };
2679        if (keyword != null) {
2680          dst.keyword = new ArrayList<CodeableConcept>();
2681          for (CodeableConcept i : keyword)
2682            dst.keyword.add(i.copy());
2683        };
2684        if (location != null) {
2685          dst.location = new ArrayList<CodeableConcept>();
2686          for (CodeableConcept i : location)
2687            dst.location.add(i.copy());
2688        };
2689        dst.description = description == null ? null : description.copy();
2690        if (enrollment != null) {
2691          dst.enrollment = new ArrayList<Reference>();
2692          for (Reference i : enrollment)
2693            dst.enrollment.add(i.copy());
2694        };
2695        dst.period = period == null ? null : period.copy();
2696        dst.sponsor = sponsor == null ? null : sponsor.copy();
2697        dst.principalInvestigator = principalInvestigator == null ? null : principalInvestigator.copy();
2698        if (site != null) {
2699          dst.site = new ArrayList<Reference>();
2700          for (Reference i : site)
2701            dst.site.add(i.copy());
2702        };
2703        dst.reasonStopped = reasonStopped == null ? null : reasonStopped.copy();
2704        if (note != null) {
2705          dst.note = new ArrayList<Annotation>();
2706          for (Annotation i : note)
2707            dst.note.add(i.copy());
2708        };
2709        if (arm != null) {
2710          dst.arm = new ArrayList<ResearchStudyArmComponent>();
2711          for (ResearchStudyArmComponent i : arm)
2712            dst.arm.add(i.copy());
2713        };
2714        if (objective != null) {
2715          dst.objective = new ArrayList<ResearchStudyObjectiveComponent>();
2716          for (ResearchStudyObjectiveComponent i : objective)
2717            dst.objective.add(i.copy());
2718        };
2719      }
2720
2721      protected ResearchStudy typedCopy() {
2722        return copy();
2723      }
2724
2725      @Override
2726      public boolean equalsDeep(Base other_) {
2727        if (!super.equalsDeep(other_))
2728          return false;
2729        if (!(other_ instanceof ResearchStudy))
2730          return false;
2731        ResearchStudy o = (ResearchStudy) other_;
2732        return compareDeep(identifier, o.identifier, true) && compareDeep(title, o.title, true) && compareDeep(protocol, o.protocol, true)
2733           && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true) && compareDeep(primaryPurposeType, o.primaryPurposeType, true)
2734           && compareDeep(phase, o.phase, true) && compareDeep(category, o.category, true) && compareDeep(focus, o.focus, true)
2735           && compareDeep(condition, o.condition, true) && compareDeep(contact, o.contact, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
2736           && compareDeep(keyword, o.keyword, true) && compareDeep(location, o.location, true) && compareDeep(description, o.description, true)
2737           && compareDeep(enrollment, o.enrollment, true) && compareDeep(period, o.period, true) && compareDeep(sponsor, o.sponsor, true)
2738           && compareDeep(principalInvestigator, o.principalInvestigator, true) && compareDeep(site, o.site, true)
2739           && compareDeep(reasonStopped, o.reasonStopped, true) && compareDeep(note, o.note, true) && compareDeep(arm, o.arm, true)
2740           && compareDeep(objective, o.objective, true);
2741      }
2742
2743      @Override
2744      public boolean equalsShallow(Base other_) {
2745        if (!super.equalsShallow(other_))
2746          return false;
2747        if (!(other_ instanceof ResearchStudy))
2748          return false;
2749        ResearchStudy o = (ResearchStudy) other_;
2750        return compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(description, o.description, true)
2751          ;
2752      }
2753
2754      public boolean isEmpty() {
2755        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, title, protocol
2756          , partOf, status, primaryPurposeType, phase, category, focus, condition, contact
2757          , relatedArtifact, keyword, location, description, enrollment, period, sponsor
2758          , principalInvestigator, site, reasonStopped, note, arm, objective);
2759      }
2760
2761  @Override
2762  public ResourceType getResourceType() {
2763    return ResourceType.ResearchStudy;
2764   }
2765
2766 /**
2767   * Search parameter: <b>date</b>
2768   * <p>
2769   * Description: <b>When the study began and ended</b><br>
2770   * Type: <b>date</b><br>
2771   * Path: <b>ResearchStudy.period</b><br>
2772   * </p>
2773   */
2774  @SearchParamDefinition(name="date", path="ResearchStudy.period", description="When the study began and ended", type="date" )
2775  public static final String SP_DATE = "date";
2776 /**
2777   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2778   * <p>
2779   * Description: <b>When the study began and ended</b><br>
2780   * Type: <b>date</b><br>
2781   * Path: <b>ResearchStudy.period</b><br>
2782   * </p>
2783   */
2784  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2785
2786 /**
2787   * Search parameter: <b>identifier</b>
2788   * <p>
2789   * Description: <b>Business Identifier for study</b><br>
2790   * Type: <b>token</b><br>
2791   * Path: <b>ResearchStudy.identifier</b><br>
2792   * </p>
2793   */
2794  @SearchParamDefinition(name="identifier", path="ResearchStudy.identifier", description="Business Identifier for study", type="token" )
2795  public static final String SP_IDENTIFIER = "identifier";
2796 /**
2797   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2798   * <p>
2799   * Description: <b>Business Identifier for study</b><br>
2800   * Type: <b>token</b><br>
2801   * Path: <b>ResearchStudy.identifier</b><br>
2802   * </p>
2803   */
2804  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2805
2806 /**
2807   * Search parameter: <b>partof</b>
2808   * <p>
2809   * Description: <b>Part of larger study</b><br>
2810   * Type: <b>reference</b><br>
2811   * Path: <b>ResearchStudy.partOf</b><br>
2812   * </p>
2813   */
2814  @SearchParamDefinition(name="partof", path="ResearchStudy.partOf", description="Part of larger study", type="reference", target={ResearchStudy.class } )
2815  public static final String SP_PARTOF = "partof";
2816 /**
2817   * <b>Fluent Client</b> search parameter constant for <b>partof</b>
2818   * <p>
2819   * Description: <b>Part of larger study</b><br>
2820   * Type: <b>reference</b><br>
2821   * Path: <b>ResearchStudy.partOf</b><br>
2822   * </p>
2823   */
2824  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTOF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTOF);
2825
2826/**
2827   * Constant for fluent queries to be used to add include statements. Specifies
2828   * the path value of "<b>ResearchStudy:partof</b>".
2829   */
2830  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTOF = new ca.uhn.fhir.model.api.Include("ResearchStudy:partof").toLocked();
2831
2832 /**
2833   * Search parameter: <b>sponsor</b>
2834   * <p>
2835   * Description: <b>Organization that initiates and is legally responsible for the study</b><br>
2836   * Type: <b>reference</b><br>
2837   * Path: <b>ResearchStudy.sponsor</b><br>
2838   * </p>
2839   */
2840  @SearchParamDefinition(name="sponsor", path="ResearchStudy.sponsor", description="Organization that initiates and is legally responsible for the study", type="reference", target={Organization.class } )
2841  public static final String SP_SPONSOR = "sponsor";
2842 /**
2843   * <b>Fluent Client</b> search parameter constant for <b>sponsor</b>
2844   * <p>
2845   * Description: <b>Organization that initiates and is legally responsible for the study</b><br>
2846   * Type: <b>reference</b><br>
2847   * Path: <b>ResearchStudy.sponsor</b><br>
2848   * </p>
2849   */
2850  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SPONSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SPONSOR);
2851
2852/**
2853   * Constant for fluent queries to be used to add include statements. Specifies
2854   * the path value of "<b>ResearchStudy:sponsor</b>".
2855   */
2856  public static final ca.uhn.fhir.model.api.Include INCLUDE_SPONSOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:sponsor").toLocked();
2857
2858 /**
2859   * Search parameter: <b>focus</b>
2860   * <p>
2861   * Description: <b>Drugs, devices, etc. under study</b><br>
2862   * Type: <b>token</b><br>
2863   * Path: <b>ResearchStudy.focus</b><br>
2864   * </p>
2865   */
2866  @SearchParamDefinition(name="focus", path="ResearchStudy.focus", description="Drugs, devices, etc. under study", type="token" )
2867  public static final String SP_FOCUS = "focus";
2868 /**
2869   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
2870   * <p>
2871   * Description: <b>Drugs, devices, etc. under study</b><br>
2872   * Type: <b>token</b><br>
2873   * Path: <b>ResearchStudy.focus</b><br>
2874   * </p>
2875   */
2876  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FOCUS);
2877
2878 /**
2879   * Search parameter: <b>principalinvestigator</b>
2880   * <p>
2881   * Description: <b>Researcher who oversees multiple aspects of the study</b><br>
2882   * Type: <b>reference</b><br>
2883   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2884   * </p>
2885   */
2886  @SearchParamDefinition(name="principalinvestigator", path="ResearchStudy.principalInvestigator", description="Researcher who oversees multiple aspects of the study", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class, PractitionerRole.class } )
2887  public static final String SP_PRINCIPALINVESTIGATOR = "principalinvestigator";
2888 /**
2889   * <b>Fluent Client</b> search parameter constant for <b>principalinvestigator</b>
2890   * <p>
2891   * Description: <b>Researcher who oversees multiple aspects of the study</b><br>
2892   * Type: <b>reference</b><br>
2893   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2894   * </p>
2895   */
2896  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRINCIPALINVESTIGATOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRINCIPALINVESTIGATOR);
2897
2898/**
2899   * Constant for fluent queries to be used to add include statements. Specifies
2900   * the path value of "<b>ResearchStudy:principalinvestigator</b>".
2901   */
2902  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRINCIPALINVESTIGATOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:principalinvestigator").toLocked();
2903
2904 /**
2905   * Search parameter: <b>title</b>
2906   * <p>
2907   * Description: <b>Name for this study</b><br>
2908   * Type: <b>string</b><br>
2909   * Path: <b>ResearchStudy.title</b><br>
2910   * </p>
2911   */
2912  @SearchParamDefinition(name="title", path="ResearchStudy.title", description="Name for this study", type="string" )
2913  public static final String SP_TITLE = "title";
2914 /**
2915   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2916   * <p>
2917   * Description: <b>Name for this study</b><br>
2918   * Type: <b>string</b><br>
2919   * Path: <b>ResearchStudy.title</b><br>
2920   * </p>
2921   */
2922  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2923
2924 /**
2925   * Search parameter: <b>protocol</b>
2926   * <p>
2927   * Description: <b>Steps followed in executing study</b><br>
2928   * Type: <b>reference</b><br>
2929   * Path: <b>ResearchStudy.protocol</b><br>
2930   * </p>
2931   */
2932  @SearchParamDefinition(name="protocol", path="ResearchStudy.protocol", description="Steps followed in executing study", type="reference", target={PlanDefinition.class } )
2933  public static final String SP_PROTOCOL = "protocol";
2934 /**
2935   * <b>Fluent Client</b> search parameter constant for <b>protocol</b>
2936   * <p>
2937   * Description: <b>Steps followed in executing study</b><br>
2938   * Type: <b>reference</b><br>
2939   * Path: <b>ResearchStudy.protocol</b><br>
2940   * </p>
2941   */
2942  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROTOCOL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROTOCOL);
2943
2944/**
2945   * Constant for fluent queries to be used to add include statements. Specifies
2946   * the path value of "<b>ResearchStudy:protocol</b>".
2947   */
2948  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROTOCOL = new ca.uhn.fhir.model.api.Include("ResearchStudy:protocol").toLocked();
2949
2950 /**
2951   * Search parameter: <b>site</b>
2952   * <p>
2953   * Description: <b>Facility where study activities are conducted</b><br>
2954   * Type: <b>reference</b><br>
2955   * Path: <b>ResearchStudy.site</b><br>
2956   * </p>
2957   */
2958  @SearchParamDefinition(name="site", path="ResearchStudy.site", description="Facility where study activities are conducted", type="reference", target={Location.class } )
2959  public static final String SP_SITE = "site";
2960 /**
2961   * <b>Fluent Client</b> search parameter constant for <b>site</b>
2962   * <p>
2963   * Description: <b>Facility where study activities are conducted</b><br>
2964   * Type: <b>reference</b><br>
2965   * Path: <b>ResearchStudy.site</b><br>
2966   * </p>
2967   */
2968  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SITE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SITE);
2969
2970/**
2971   * Constant for fluent queries to be used to add include statements. Specifies
2972   * the path value of "<b>ResearchStudy:site</b>".
2973   */
2974  public static final ca.uhn.fhir.model.api.Include INCLUDE_SITE = new ca.uhn.fhir.model.api.Include("ResearchStudy:site").toLocked();
2975
2976 /**
2977   * Search parameter: <b>location</b>
2978   * <p>
2979   * Description: <b>Geographic region(s) for study</b><br>
2980   * Type: <b>token</b><br>
2981   * Path: <b>ResearchStudy.location</b><br>
2982   * </p>
2983   */
2984  @SearchParamDefinition(name="location", path="ResearchStudy.location", description="Geographic region(s) for study", type="token" )
2985  public static final String SP_LOCATION = "location";
2986 /**
2987   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2988   * <p>
2989   * Description: <b>Geographic region(s) for study</b><br>
2990   * Type: <b>token</b><br>
2991   * Path: <b>ResearchStudy.location</b><br>
2992   * </p>
2993   */
2994  public static final ca.uhn.fhir.rest.gclient.TokenClientParam LOCATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_LOCATION);
2995
2996 /**
2997   * Search parameter: <b>category</b>
2998   * <p>
2999   * Description: <b>Classifications for the study</b><br>
3000   * Type: <b>token</b><br>
3001   * Path: <b>ResearchStudy.category</b><br>
3002   * </p>
3003   */
3004  @SearchParamDefinition(name="category", path="ResearchStudy.category", description="Classifications for the study", type="token" )
3005  public static final String SP_CATEGORY = "category";
3006 /**
3007   * <b>Fluent Client</b> search parameter constant for <b>category</b>
3008   * <p>
3009   * Description: <b>Classifications for the study</b><br>
3010   * Type: <b>token</b><br>
3011   * Path: <b>ResearchStudy.category</b><br>
3012   * </p>
3013   */
3014  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
3015
3016 /**
3017   * Search parameter: <b>keyword</b>
3018   * <p>
3019   * Description: <b>Used to search for the study</b><br>
3020   * Type: <b>token</b><br>
3021   * Path: <b>ResearchStudy.keyword</b><br>
3022   * </p>
3023   */
3024  @SearchParamDefinition(name="keyword", path="ResearchStudy.keyword", description="Used to search for the study", type="token" )
3025  public static final String SP_KEYWORD = "keyword";
3026 /**
3027   * <b>Fluent Client</b> search parameter constant for <b>keyword</b>
3028   * <p>
3029   * Description: <b>Used to search for the study</b><br>
3030   * Type: <b>token</b><br>
3031   * Path: <b>ResearchStudy.keyword</b><br>
3032   * </p>
3033   */
3034  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KEYWORD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KEYWORD);
3035
3036 /**
3037   * Search parameter: <b>status</b>
3038   * <p>
3039   * Description: <b>active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn</b><br>
3040   * Type: <b>token</b><br>
3041   * Path: <b>ResearchStudy.status</b><br>
3042   * </p>
3043   */
3044  @SearchParamDefinition(name="status", path="ResearchStudy.status", description="active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn", type="token" )
3045  public static final String SP_STATUS = "status";
3046 /**
3047   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3048   * <p>
3049   * Description: <b>active | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | in-review | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | withdrawn</b><br>
3050   * Type: <b>token</b><br>
3051   * Path: <b>ResearchStudy.status</b><br>
3052   * </p>
3053   */
3054  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3055
3056
3057}