001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.List;
037
038import org.hl7.fhir.exceptions.FHIRException;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.utilities.Utilities;
041
042import ca.uhn.fhir.model.api.annotation.Block;
043import ca.uhn.fhir.model.api.annotation.Child;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.ResourceDef;
046import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
047/**
048 * 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.
049 */
050@ResourceDef(name="ResearchStudy", profile="http://hl7.org/fhir/Profile/ResearchStudy")
051public class ResearchStudy extends DomainResource {
052
053    public enum ResearchStudyStatus {
054        /**
055         * The study is undergoing design but the process of selecting study subjects and capturing data has not yet begun.
056         */
057        DRAFT, 
058        /**
059         * The study is currently being executed
060         */
061        INPROGRESS, 
062        /**
063         * Execution of the study has been temporarily paused
064         */
065        SUSPENDED, 
066        /**
067         * The study was terminated prior to the final determination of results
068         */
069        STOPPED, 
070        /**
071         * The information sought by the study has been gathered and compiled and no further work is being performed
072         */
073        COMPLETED, 
074        /**
075         * This study never actually existed.  The record is retained for tracking purposes in the event decisions may have been made based on this erroneous information.
076         */
077        ENTEREDINERROR, 
078        /**
079         * added to help the parsers with the generic types
080         */
081        NULL;
082        public static ResearchStudyStatus fromCode(String codeString) throws FHIRException {
083            if (codeString == null || "".equals(codeString))
084                return null;
085        if ("draft".equals(codeString))
086          return DRAFT;
087        if ("in-progress".equals(codeString))
088          return INPROGRESS;
089        if ("suspended".equals(codeString))
090          return SUSPENDED;
091        if ("stopped".equals(codeString))
092          return STOPPED;
093        if ("completed".equals(codeString))
094          return COMPLETED;
095        if ("entered-in-error".equals(codeString))
096          return ENTEREDINERROR;
097        if (Configuration.isAcceptInvalidEnums())
098          return null;
099        else
100          throw new FHIRException("Unknown ResearchStudyStatus code '"+codeString+"'");
101        }
102        public String toCode() {
103          switch (this) {
104            case DRAFT: return "draft";
105            case INPROGRESS: return "in-progress";
106            case SUSPENDED: return "suspended";
107            case STOPPED: return "stopped";
108            case COMPLETED: return "completed";
109            case ENTEREDINERROR: return "entered-in-error";
110            case NULL: return null;
111            default: return "?";
112          }
113        }
114        public String getSystem() {
115          switch (this) {
116            case DRAFT: return "http://hl7.org/fhir/research-study-status";
117            case INPROGRESS: return "http://hl7.org/fhir/research-study-status";
118            case SUSPENDED: return "http://hl7.org/fhir/research-study-status";
119            case STOPPED: return "http://hl7.org/fhir/research-study-status";
120            case COMPLETED: return "http://hl7.org/fhir/research-study-status";
121            case ENTEREDINERROR: return "http://hl7.org/fhir/research-study-status";
122            case NULL: return null;
123            default: return "?";
124          }
125        }
126        public String getDefinition() {
127          switch (this) {
128            case DRAFT: return "The study is undergoing design but the process of selecting study subjects and capturing data has not yet begun.";
129            case INPROGRESS: return "The study is currently being executed";
130            case SUSPENDED: return "Execution of the study has been temporarily paused";
131            case STOPPED: return "The study was terminated prior to the final determination of results";
132            case COMPLETED: return "The information sought by the study has been gathered and compiled and no further work is being performed";
133            case ENTEREDINERROR: return "This study never actually existed.  The record is retained for tracking purposes in the event decisions may have been made based on this erroneous information.";
134            case NULL: return null;
135            default: return "?";
136          }
137        }
138        public String getDisplay() {
139          switch (this) {
140            case DRAFT: return "Draft";
141            case INPROGRESS: return "In-progress";
142            case SUSPENDED: return "Suspended";
143            case STOPPED: return "Stopped";
144            case COMPLETED: return "Completed";
145            case ENTEREDINERROR: return "Entered in error";
146            case NULL: return null;
147            default: return "?";
148          }
149        }
150    }
151
152  public static class ResearchStudyStatusEnumFactory implements EnumFactory<ResearchStudyStatus> {
153    public ResearchStudyStatus fromCode(String codeString) throws IllegalArgumentException {
154      if (codeString == null || "".equals(codeString))
155            if (codeString == null || "".equals(codeString))
156                return null;
157        if ("draft".equals(codeString))
158          return ResearchStudyStatus.DRAFT;
159        if ("in-progress".equals(codeString))
160          return ResearchStudyStatus.INPROGRESS;
161        if ("suspended".equals(codeString))
162          return ResearchStudyStatus.SUSPENDED;
163        if ("stopped".equals(codeString))
164          return ResearchStudyStatus.STOPPED;
165        if ("completed".equals(codeString))
166          return ResearchStudyStatus.COMPLETED;
167        if ("entered-in-error".equals(codeString))
168          return ResearchStudyStatus.ENTEREDINERROR;
169        throw new IllegalArgumentException("Unknown ResearchStudyStatus code '"+codeString+"'");
170        }
171        public Enumeration<ResearchStudyStatus> fromType(PrimitiveType<?> code) throws FHIRException {
172          if (code == null)
173            return null;
174          if (code.isEmpty())
175            return new Enumeration<ResearchStudyStatus>(this);
176          String codeString = code.asStringValue();
177          if (codeString == null || "".equals(codeString))
178            return null;
179        if ("draft".equals(codeString))
180          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.DRAFT);
181        if ("in-progress".equals(codeString))
182          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.INPROGRESS);
183        if ("suspended".equals(codeString))
184          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.SUSPENDED);
185        if ("stopped".equals(codeString))
186          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.STOPPED);
187        if ("completed".equals(codeString))
188          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.COMPLETED);
189        if ("entered-in-error".equals(codeString))
190          return new Enumeration<ResearchStudyStatus>(this, ResearchStudyStatus.ENTEREDINERROR);
191        throw new FHIRException("Unknown ResearchStudyStatus code '"+codeString+"'");
192        }
193    public String toCode(ResearchStudyStatus code) {
194      if (code == ResearchStudyStatus.DRAFT)
195        return "draft";
196      if (code == ResearchStudyStatus.INPROGRESS)
197        return "in-progress";
198      if (code == ResearchStudyStatus.SUSPENDED)
199        return "suspended";
200      if (code == ResearchStudyStatus.STOPPED)
201        return "stopped";
202      if (code == ResearchStudyStatus.COMPLETED)
203        return "completed";
204      if (code == ResearchStudyStatus.ENTEREDINERROR)
205        return "entered-in-error";
206      return "?";
207      }
208    public String toSystem(ResearchStudyStatus code) {
209      return code.getSystem();
210      }
211    }
212
213    @Block()
214    public static class ResearchStudyArmComponent extends BackboneElement implements IBaseBackboneElement {
215        /**
216         * Unique, human-readable label for this arm of the study.
217         */
218        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
219        @Description(shortDefinition="Label for study arm", formalDefinition="Unique, human-readable label for this arm of the study." )
220        protected StringType name;
221
222        /**
223         * Categorization of study arm, e.g. experimental, active comparator, placebo comparater.
224         */
225        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
226        @Description(shortDefinition="Categorization of study arm", formalDefinition="Categorization of study arm, e.g. experimental, active comparator, placebo comparater." )
227        protected CodeableConcept code;
228
229        /**
230         * A succinct description of the path through the study that would be followed by a subject adhering to this arm.
231         */
232        @Child(name = "description", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
233        @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." )
234        protected StringType description;
235
236        private static final long serialVersionUID = 1433183343L;
237
238    /**
239     * Constructor
240     */
241      public ResearchStudyArmComponent() {
242        super();
243      }
244
245    /**
246     * Constructor
247     */
248      public ResearchStudyArmComponent(StringType name) {
249        super();
250        this.name = name;
251      }
252
253        /**
254         * @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
255         */
256        public StringType getNameElement() { 
257          if (this.name == null)
258            if (Configuration.errorOnAutoCreate())
259              throw new Error("Attempt to auto-create ResearchStudyArmComponent.name");
260            else if (Configuration.doAutoCreate())
261              this.name = new StringType(); // bb
262          return this.name;
263        }
264
265        public boolean hasNameElement() { 
266          return this.name != null && !this.name.isEmpty();
267        }
268
269        public boolean hasName() { 
270          return this.name != null && !this.name.isEmpty();
271        }
272
273        /**
274         * @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
275         */
276        public ResearchStudyArmComponent setNameElement(StringType value) { 
277          this.name = value;
278          return this;
279        }
280
281        /**
282         * @return Unique, human-readable label for this arm of the study.
283         */
284        public String getName() { 
285          return this.name == null ? null : this.name.getValue();
286        }
287
288        /**
289         * @param value Unique, human-readable label for this arm of the study.
290         */
291        public ResearchStudyArmComponent setName(String value) { 
292            if (this.name == null)
293              this.name = new StringType();
294            this.name.setValue(value);
295          return this;
296        }
297
298        /**
299         * @return {@link #code} (Categorization of study arm, e.g. experimental, active comparator, placebo comparater.)
300         */
301        public CodeableConcept getCode() { 
302          if (this.code == null)
303            if (Configuration.errorOnAutoCreate())
304              throw new Error("Attempt to auto-create ResearchStudyArmComponent.code");
305            else if (Configuration.doAutoCreate())
306              this.code = new CodeableConcept(); // cc
307          return this.code;
308        }
309
310        public boolean hasCode() { 
311          return this.code != null && !this.code.isEmpty();
312        }
313
314        /**
315         * @param value {@link #code} (Categorization of study arm, e.g. experimental, active comparator, placebo comparater.)
316         */
317        public ResearchStudyArmComponent setCode(CodeableConcept value)  { 
318          this.code = value;
319          return this;
320        }
321
322        /**
323         * @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
324         */
325        public StringType getDescriptionElement() { 
326          if (this.description == null)
327            if (Configuration.errorOnAutoCreate())
328              throw new Error("Attempt to auto-create ResearchStudyArmComponent.description");
329            else if (Configuration.doAutoCreate())
330              this.description = new StringType(); // bb
331          return this.description;
332        }
333
334        public boolean hasDescriptionElement() { 
335          return this.description != null && !this.description.isEmpty();
336        }
337
338        public boolean hasDescription() { 
339          return this.description != null && !this.description.isEmpty();
340        }
341
342        /**
343         * @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
344         */
345        public ResearchStudyArmComponent setDescriptionElement(StringType value) { 
346          this.description = value;
347          return this;
348        }
349
350        /**
351         * @return A succinct description of the path through the study that would be followed by a subject adhering to this arm.
352         */
353        public String getDescription() { 
354          return this.description == null ? null : this.description.getValue();
355        }
356
357        /**
358         * @param value A succinct description of the path through the study that would be followed by a subject adhering to this arm.
359         */
360        public ResearchStudyArmComponent setDescription(String value) { 
361          if (Utilities.noString(value))
362            this.description = null;
363          else {
364            if (this.description == null)
365              this.description = new StringType();
366            this.description.setValue(value);
367          }
368          return this;
369        }
370
371        protected void listChildren(List<Property> children) {
372          super.listChildren(children);
373          children.add(new Property("name", "string", "Unique, human-readable label for this arm of the study.", 0, 1, name));
374          children.add(new Property("code", "CodeableConcept", "Categorization of study arm, e.g. experimental, active comparator, placebo comparater.", 0, 1, code));
375          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));
376        }
377
378        @Override
379        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
380          switch (_hash) {
381          case 3373707: /*name*/  return new Property("name", "string", "Unique, human-readable label for this arm of the study.", 0, 1, name);
382          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Categorization of study arm, e.g. experimental, active comparator, placebo comparater.", 0, 1, code);
383          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);
384          default: return super.getNamedProperty(_hash, _name, _checkValid);
385          }
386
387        }
388
389      @Override
390      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
391        switch (hash) {
392        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
393        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
394        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
395        default: return super.getProperty(hash, name, checkValid);
396        }
397
398      }
399
400      @Override
401      public Base setProperty(int hash, String name, Base value) throws FHIRException {
402        switch (hash) {
403        case 3373707: // name
404          this.name = castToString(value); // StringType
405          return value;
406        case 3059181: // code
407          this.code = castToCodeableConcept(value); // CodeableConcept
408          return value;
409        case -1724546052: // description
410          this.description = castToString(value); // StringType
411          return value;
412        default: return super.setProperty(hash, name, value);
413        }
414
415      }
416
417      @Override
418      public Base setProperty(String name, Base value) throws FHIRException {
419        if (name.equals("name")) {
420          this.name = castToString(value); // StringType
421        } else if (name.equals("code")) {
422          this.code = castToCodeableConcept(value); // CodeableConcept
423        } else if (name.equals("description")) {
424          this.description = castToString(value); // StringType
425        } else
426          return super.setProperty(name, value);
427        return value;
428      }
429
430      @Override
431      public Base makeProperty(int hash, String name) throws FHIRException {
432        switch (hash) {
433        case 3373707:  return getNameElement();
434        case 3059181:  return getCode(); 
435        case -1724546052:  return getDescriptionElement();
436        default: return super.makeProperty(hash, name);
437        }
438
439      }
440
441      @Override
442      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
443        switch (hash) {
444        case 3373707: /*name*/ return new String[] {"string"};
445        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
446        case -1724546052: /*description*/ return new String[] {"string"};
447        default: return super.getTypesForProperty(hash, name);
448        }
449
450      }
451
452      @Override
453      public Base addChild(String name) throws FHIRException {
454        if (name.equals("name")) {
455          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.name");
456        }
457        else if (name.equals("code")) {
458          this.code = new CodeableConcept();
459          return this.code;
460        }
461        else if (name.equals("description")) {
462          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.description");
463        }
464        else
465          return super.addChild(name);
466      }
467
468      public ResearchStudyArmComponent copy() {
469        ResearchStudyArmComponent dst = new ResearchStudyArmComponent();
470        copyValues(dst);
471        dst.name = name == null ? null : name.copy();
472        dst.code = code == null ? null : code.copy();
473        dst.description = description == null ? null : description.copy();
474        return dst;
475      }
476
477      @Override
478      public boolean equalsDeep(Base other_) {
479        if (!super.equalsDeep(other_))
480          return false;
481        if (!(other_ instanceof ResearchStudyArmComponent))
482          return false;
483        ResearchStudyArmComponent o = (ResearchStudyArmComponent) other_;
484        return compareDeep(name, o.name, true) && compareDeep(code, o.code, true) && compareDeep(description, o.description, true)
485          ;
486      }
487
488      @Override
489      public boolean equalsShallow(Base other_) {
490        if (!super.equalsShallow(other_))
491          return false;
492        if (!(other_ instanceof ResearchStudyArmComponent))
493          return false;
494        ResearchStudyArmComponent o = (ResearchStudyArmComponent) other_;
495        return compareValues(name, o.name, true) && compareValues(description, o.description, true);
496      }
497
498      public boolean isEmpty() {
499        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, code, description
500          );
501      }
502
503  public String fhirType() {
504    return "ResearchStudy.arm";
505
506  }
507
508  }
509
510    /**
511     * Identifiers assigned to this research study by the sponsor or other systems.
512     */
513    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
514    @Description(shortDefinition="Business Identifier for study", formalDefinition="Identifiers assigned to this research study by the sponsor or other systems." )
515    protected List<Identifier> identifier;
516
517    /**
518     * A short, descriptive user-friendly label for the study.
519     */
520    @Child(name = "title", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
521    @Description(shortDefinition="Name for this study", formalDefinition="A short, descriptive user-friendly label for the study." )
522    protected StringType title;
523
524    /**
525     * The set of steps expected to be performed as part of the execution of the study.
526     */
527    @Child(name = "protocol", type = {PlanDefinition.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
528    @Description(shortDefinition="Steps followed in executing study", formalDefinition="The set of steps expected to be performed as part of the execution of the study." )
529    protected List<Reference> protocol;
530    /**
531     * 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.)
532     */
533    protected List<PlanDefinition> protocolTarget;
534
535
536    /**
537     * A larger research study of which this particular study is a component or step.
538     */
539    @Child(name = "partOf", type = {ResearchStudy.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
540    @Description(shortDefinition="Part of larger study", formalDefinition="A larger research study of which this particular study is a component or step." )
541    protected List<Reference> partOf;
542    /**
543     * The actual objects that are the target of the reference (A larger research study of which this particular study is a component or step.)
544     */
545    protected List<ResearchStudy> partOfTarget;
546
547
548    /**
549     * The current state of the study.
550     */
551    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
552    @Description(shortDefinition="draft | in-progress | suspended | stopped | completed | entered-in-error", formalDefinition="The current state of the study." )
553    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-status")
554    protected Enumeration<ResearchStudyStatus> status;
555
556    /**
557     * Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.
558     */
559    @Child(name = "category", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
560    @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." )
561    protected List<CodeableConcept> category;
562
563    /**
564     * The condition(s), medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.
565     */
566    @Child(name = "focus", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
567    @Description(shortDefinition="Drugs, devices, conditions, etc. under study", formalDefinition="The condition(s), medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about." )
568    protected List<CodeableConcept> focus;
569
570    /**
571     * Contact details to assist a user in learning more about or engaging with the study.
572     */
573    @Child(name = "contact", type = {ContactDetail.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
574    @Description(shortDefinition="Contact details for the study", formalDefinition="Contact details to assist a user in learning more about or engaging with the study." )
575    protected List<ContactDetail> contact;
576
577    /**
578     * Citations, references and other related documents.
579     */
580    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
581    @Description(shortDefinition="References and dependencies", formalDefinition="Citations, references and other related documents." )
582    protected List<RelatedArtifact> relatedArtifact;
583
584    /**
585     * Key terms to aid in searching for or filtering the study.
586     */
587    @Child(name = "keyword", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
588    @Description(shortDefinition="Used to search for the study", formalDefinition="Key terms to aid in searching for or filtering the study." )
589    protected List<CodeableConcept> keyword;
590
591    /**
592     * Indicates a country, state or other region where the study is taking place.
593     */
594    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
595    @Description(shortDefinition="Geographic region(s) for study", formalDefinition="Indicates a country, state or other region where the study is taking place." )
596    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
597    protected List<CodeableConcept> jurisdiction;
598
599    /**
600     * A full description of how the study is being conducted.
601     */
602    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
603    @Description(shortDefinition="What this is study doing", formalDefinition="A full description of how the study is being conducted." )
604    protected MarkdownType description;
605
606    /**
607     * 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".
608     */
609    @Child(name = "enrollment", type = {Group.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
610    @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\"." )
611    protected List<Reference> enrollment;
612    /**
613     * 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".)
614     */
615    protected List<Group> enrollmentTarget;
616
617
618    /**
619     * Identifies the start date and the expected (or actual, depending on status) end date for the study.
620     */
621    @Child(name = "period", type = {Period.class}, order=13, min=0, max=1, modifier=false, summary=true)
622    @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." )
623    protected Period period;
624
625    /**
626     * The organization responsible for the execution of the study.
627     */
628    @Child(name = "sponsor", type = {Organization.class}, order=14, min=0, max=1, modifier=false, summary=true)
629    @Description(shortDefinition="Organization responsible for the study", formalDefinition="The organization responsible for the execution of the study." )
630    protected Reference sponsor;
631
632    /**
633     * The actual object that is the target of the reference (The organization responsible for the execution of the study.)
634     */
635    protected Organization sponsorTarget;
636
637    /**
638     * Indicates the individual who has primary oversite of the execution of the study.
639     */
640    @Child(name = "principalInvestigator", type = {Practitioner.class}, order=15, min=0, max=1, modifier=false, summary=true)
641    @Description(shortDefinition="The individual responsible for the study", formalDefinition="Indicates the individual who has primary oversite of the execution of the study." )
642    protected Reference principalInvestigator;
643
644    /**
645     * The actual object that is the target of the reference (Indicates the individual who has primary oversite of the execution of the study.)
646     */
647    protected Practitioner principalInvestigatorTarget;
648
649    /**
650     * Clinic, hospital or other healthcare location that is participating in the study.
651     */
652    @Child(name = "site", type = {Location.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
653    @Description(shortDefinition="Location involved in study execution", formalDefinition="Clinic, hospital or other healthcare location that is participating in the study." )
654    protected List<Reference> site;
655    /**
656     * The actual objects that are the target of the reference (Clinic, hospital or other healthcare location that is participating in the study.)
657     */
658    protected List<Location> siteTarget;
659
660
661    /**
662     * A description and/or code explaining the premature termination of the study.
663     */
664    @Child(name = "reasonStopped", type = {CodeableConcept.class}, order=17, min=0, max=1, modifier=false, summary=true)
665    @Description(shortDefinition="Reason for terminating study early", formalDefinition="A description and/or code explaining the premature termination of the study." )
666    protected CodeableConcept reasonStopped;
667
668    /**
669     * Comments made about the event by the performer, subject or other participants.
670     */
671    @Child(name = "note", type = {Annotation.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
672    @Description(shortDefinition="Comments made about the event", formalDefinition="Comments made about the event by the performer, subject or other participants." )
673    protected List<Annotation> note;
674
675    /**
676     * 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.
677     */
678    @Child(name = "arm", type = {}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
679    @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." )
680    protected List<ResearchStudyArmComponent> arm;
681
682    private static final long serialVersionUID = -1804662501L;
683
684  /**
685   * Constructor
686   */
687    public ResearchStudy() {
688      super();
689    }
690
691  /**
692   * Constructor
693   */
694    public ResearchStudy(Enumeration<ResearchStudyStatus> status) {
695      super();
696      this.status = status;
697    }
698
699    /**
700     * @return {@link #identifier} (Identifiers assigned to this research study by the sponsor or other systems.)
701     */
702    public List<Identifier> getIdentifier() { 
703      if (this.identifier == null)
704        this.identifier = new ArrayList<Identifier>();
705      return this.identifier;
706    }
707
708    /**
709     * @return Returns a reference to <code>this</code> for easy method chaining
710     */
711    public ResearchStudy setIdentifier(List<Identifier> theIdentifier) { 
712      this.identifier = theIdentifier;
713      return this;
714    }
715
716    public boolean hasIdentifier() { 
717      if (this.identifier == null)
718        return false;
719      for (Identifier item : this.identifier)
720        if (!item.isEmpty())
721          return true;
722      return false;
723    }
724
725    public Identifier addIdentifier() { //3
726      Identifier t = new Identifier();
727      if (this.identifier == null)
728        this.identifier = new ArrayList<Identifier>();
729      this.identifier.add(t);
730      return t;
731    }
732
733    public ResearchStudy addIdentifier(Identifier t) { //3
734      if (t == null)
735        return this;
736      if (this.identifier == null)
737        this.identifier = new ArrayList<Identifier>();
738      this.identifier.add(t);
739      return this;
740    }
741
742    /**
743     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
744     */
745    public Identifier getIdentifierFirstRep() { 
746      if (getIdentifier().isEmpty()) {
747        addIdentifier();
748      }
749      return getIdentifier().get(0);
750    }
751
752    /**
753     * @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
754     */
755    public StringType getTitleElement() { 
756      if (this.title == null)
757        if (Configuration.errorOnAutoCreate())
758          throw new Error("Attempt to auto-create ResearchStudy.title");
759        else if (Configuration.doAutoCreate())
760          this.title = new StringType(); // bb
761      return this.title;
762    }
763
764    public boolean hasTitleElement() { 
765      return this.title != null && !this.title.isEmpty();
766    }
767
768    public boolean hasTitle() { 
769      return this.title != null && !this.title.isEmpty();
770    }
771
772    /**
773     * @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
774     */
775    public ResearchStudy setTitleElement(StringType value) { 
776      this.title = value;
777      return this;
778    }
779
780    /**
781     * @return A short, descriptive user-friendly label for the study.
782     */
783    public String getTitle() { 
784      return this.title == null ? null : this.title.getValue();
785    }
786
787    /**
788     * @param value A short, descriptive user-friendly label for the study.
789     */
790    public ResearchStudy setTitle(String value) { 
791      if (Utilities.noString(value))
792        this.title = null;
793      else {
794        if (this.title == null)
795          this.title = new StringType();
796        this.title.setValue(value);
797      }
798      return this;
799    }
800
801    /**
802     * @return {@link #protocol} (The set of steps expected to be performed as part of the execution of the study.)
803     */
804    public List<Reference> getProtocol() { 
805      if (this.protocol == null)
806        this.protocol = new ArrayList<Reference>();
807      return this.protocol;
808    }
809
810    /**
811     * @return Returns a reference to <code>this</code> for easy method chaining
812     */
813    public ResearchStudy setProtocol(List<Reference> theProtocol) { 
814      this.protocol = theProtocol;
815      return this;
816    }
817
818    public boolean hasProtocol() { 
819      if (this.protocol == null)
820        return false;
821      for (Reference item : this.protocol)
822        if (!item.isEmpty())
823          return true;
824      return false;
825    }
826
827    public Reference addProtocol() { //3
828      Reference t = new Reference();
829      if (this.protocol == null)
830        this.protocol = new ArrayList<Reference>();
831      this.protocol.add(t);
832      return t;
833    }
834
835    public ResearchStudy addProtocol(Reference t) { //3
836      if (t == null)
837        return this;
838      if (this.protocol == null)
839        this.protocol = new ArrayList<Reference>();
840      this.protocol.add(t);
841      return this;
842    }
843
844    /**
845     * @return The first repetition of repeating field {@link #protocol}, creating it if it does not already exist
846     */
847    public Reference getProtocolFirstRep() { 
848      if (getProtocol().isEmpty()) {
849        addProtocol();
850      }
851      return getProtocol().get(0);
852    }
853
854    /**
855     * @deprecated Use Reference#setResource(IBaseResource) instead
856     */
857    @Deprecated
858    public List<PlanDefinition> getProtocolTarget() { 
859      if (this.protocolTarget == null)
860        this.protocolTarget = new ArrayList<PlanDefinition>();
861      return this.protocolTarget;
862    }
863
864    /**
865     * @deprecated Use Reference#setResource(IBaseResource) instead
866     */
867    @Deprecated
868    public PlanDefinition addProtocolTarget() { 
869      PlanDefinition r = new PlanDefinition();
870      if (this.protocolTarget == null)
871        this.protocolTarget = new ArrayList<PlanDefinition>();
872      this.protocolTarget.add(r);
873      return r;
874    }
875
876    /**
877     * @return {@link #partOf} (A larger research study of which this particular study is a component or step.)
878     */
879    public List<Reference> getPartOf() { 
880      if (this.partOf == null)
881        this.partOf = new ArrayList<Reference>();
882      return this.partOf;
883    }
884
885    /**
886     * @return Returns a reference to <code>this</code> for easy method chaining
887     */
888    public ResearchStudy setPartOf(List<Reference> thePartOf) { 
889      this.partOf = thePartOf;
890      return this;
891    }
892
893    public boolean hasPartOf() { 
894      if (this.partOf == null)
895        return false;
896      for (Reference item : this.partOf)
897        if (!item.isEmpty())
898          return true;
899      return false;
900    }
901
902    public Reference addPartOf() { //3
903      Reference t = new Reference();
904      if (this.partOf == null)
905        this.partOf = new ArrayList<Reference>();
906      this.partOf.add(t);
907      return t;
908    }
909
910    public ResearchStudy addPartOf(Reference t) { //3
911      if (t == null)
912        return this;
913      if (this.partOf == null)
914        this.partOf = new ArrayList<Reference>();
915      this.partOf.add(t);
916      return this;
917    }
918
919    /**
920     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist
921     */
922    public Reference getPartOfFirstRep() { 
923      if (getPartOf().isEmpty()) {
924        addPartOf();
925      }
926      return getPartOf().get(0);
927    }
928
929    /**
930     * @deprecated Use Reference#setResource(IBaseResource) instead
931     */
932    @Deprecated
933    public List<ResearchStudy> getPartOfTarget() { 
934      if (this.partOfTarget == null)
935        this.partOfTarget = new ArrayList<ResearchStudy>();
936      return this.partOfTarget;
937    }
938
939    /**
940     * @deprecated Use Reference#setResource(IBaseResource) instead
941     */
942    @Deprecated
943    public ResearchStudy addPartOfTarget() { 
944      ResearchStudy r = new ResearchStudy();
945      if (this.partOfTarget == null)
946        this.partOfTarget = new ArrayList<ResearchStudy>();
947      this.partOfTarget.add(r);
948      return r;
949    }
950
951    /**
952     * @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
953     */
954    public Enumeration<ResearchStudyStatus> getStatusElement() { 
955      if (this.status == null)
956        if (Configuration.errorOnAutoCreate())
957          throw new Error("Attempt to auto-create ResearchStudy.status");
958        else if (Configuration.doAutoCreate())
959          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory()); // bb
960      return this.status;
961    }
962
963    public boolean hasStatusElement() { 
964      return this.status != null && !this.status.isEmpty();
965    }
966
967    public boolean hasStatus() { 
968      return this.status != null && !this.status.isEmpty();
969    }
970
971    /**
972     * @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
973     */
974    public ResearchStudy setStatusElement(Enumeration<ResearchStudyStatus> value) { 
975      this.status = value;
976      return this;
977    }
978
979    /**
980     * @return The current state of the study.
981     */
982    public ResearchStudyStatus getStatus() { 
983      return this.status == null ? null : this.status.getValue();
984    }
985
986    /**
987     * @param value The current state of the study.
988     */
989    public ResearchStudy setStatus(ResearchStudyStatus value) { 
990        if (this.status == null)
991          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory());
992        this.status.setValue(value);
993      return this;
994    }
995
996    /**
997     * @return {@link #category} (Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.)
998     */
999    public List<CodeableConcept> getCategory() { 
1000      if (this.category == null)
1001        this.category = new ArrayList<CodeableConcept>();
1002      return this.category;
1003    }
1004
1005    /**
1006     * @return Returns a reference to <code>this</code> for easy method chaining
1007     */
1008    public ResearchStudy setCategory(List<CodeableConcept> theCategory) { 
1009      this.category = theCategory;
1010      return this;
1011    }
1012
1013    public boolean hasCategory() { 
1014      if (this.category == null)
1015        return false;
1016      for (CodeableConcept item : this.category)
1017        if (!item.isEmpty())
1018          return true;
1019      return false;
1020    }
1021
1022    public CodeableConcept addCategory() { //3
1023      CodeableConcept t = new CodeableConcept();
1024      if (this.category == null)
1025        this.category = new ArrayList<CodeableConcept>();
1026      this.category.add(t);
1027      return t;
1028    }
1029
1030    public ResearchStudy addCategory(CodeableConcept t) { //3
1031      if (t == null)
1032        return this;
1033      if (this.category == null)
1034        this.category = new ArrayList<CodeableConcept>();
1035      this.category.add(t);
1036      return this;
1037    }
1038
1039    /**
1040     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1041     */
1042    public CodeableConcept getCategoryFirstRep() { 
1043      if (getCategory().isEmpty()) {
1044        addCategory();
1045      }
1046      return getCategory().get(0);
1047    }
1048
1049    /**
1050     * @return {@link #focus} (The condition(s), medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.)
1051     */
1052    public List<CodeableConcept> getFocus() { 
1053      if (this.focus == null)
1054        this.focus = new ArrayList<CodeableConcept>();
1055      return this.focus;
1056    }
1057
1058    /**
1059     * @return Returns a reference to <code>this</code> for easy method chaining
1060     */
1061    public ResearchStudy setFocus(List<CodeableConcept> theFocus) { 
1062      this.focus = theFocus;
1063      return this;
1064    }
1065
1066    public boolean hasFocus() { 
1067      if (this.focus == null)
1068        return false;
1069      for (CodeableConcept item : this.focus)
1070        if (!item.isEmpty())
1071          return true;
1072      return false;
1073    }
1074
1075    public CodeableConcept addFocus() { //3
1076      CodeableConcept t = new CodeableConcept();
1077      if (this.focus == null)
1078        this.focus = new ArrayList<CodeableConcept>();
1079      this.focus.add(t);
1080      return t;
1081    }
1082
1083    public ResearchStudy addFocus(CodeableConcept t) { //3
1084      if (t == null)
1085        return this;
1086      if (this.focus == null)
1087        this.focus = new ArrayList<CodeableConcept>();
1088      this.focus.add(t);
1089      return this;
1090    }
1091
1092    /**
1093     * @return The first repetition of repeating field {@link #focus}, creating it if it does not already exist
1094     */
1095    public CodeableConcept getFocusFirstRep() { 
1096      if (getFocus().isEmpty()) {
1097        addFocus();
1098      }
1099      return getFocus().get(0);
1100    }
1101
1102    /**
1103     * @return {@link #contact} (Contact details to assist a user in learning more about or engaging with the study.)
1104     */
1105    public List<ContactDetail> getContact() { 
1106      if (this.contact == null)
1107        this.contact = new ArrayList<ContactDetail>();
1108      return this.contact;
1109    }
1110
1111    /**
1112     * @return Returns a reference to <code>this</code> for easy method chaining
1113     */
1114    public ResearchStudy setContact(List<ContactDetail> theContact) { 
1115      this.contact = theContact;
1116      return this;
1117    }
1118
1119    public boolean hasContact() { 
1120      if (this.contact == null)
1121        return false;
1122      for (ContactDetail item : this.contact)
1123        if (!item.isEmpty())
1124          return true;
1125      return false;
1126    }
1127
1128    public ContactDetail addContact() { //3
1129      ContactDetail t = new ContactDetail();
1130      if (this.contact == null)
1131        this.contact = new ArrayList<ContactDetail>();
1132      this.contact.add(t);
1133      return t;
1134    }
1135
1136    public ResearchStudy addContact(ContactDetail t) { //3
1137      if (t == null)
1138        return this;
1139      if (this.contact == null)
1140        this.contact = new ArrayList<ContactDetail>();
1141      this.contact.add(t);
1142      return this;
1143    }
1144
1145    /**
1146     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1147     */
1148    public ContactDetail getContactFirstRep() { 
1149      if (getContact().isEmpty()) {
1150        addContact();
1151      }
1152      return getContact().get(0);
1153    }
1154
1155    /**
1156     * @return {@link #relatedArtifact} (Citations, references and other related documents.)
1157     */
1158    public List<RelatedArtifact> getRelatedArtifact() { 
1159      if (this.relatedArtifact == null)
1160        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1161      return this.relatedArtifact;
1162    }
1163
1164    /**
1165     * @return Returns a reference to <code>this</code> for easy method chaining
1166     */
1167    public ResearchStudy setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
1168      this.relatedArtifact = theRelatedArtifact;
1169      return this;
1170    }
1171
1172    public boolean hasRelatedArtifact() { 
1173      if (this.relatedArtifact == null)
1174        return false;
1175      for (RelatedArtifact item : this.relatedArtifact)
1176        if (!item.isEmpty())
1177          return true;
1178      return false;
1179    }
1180
1181    public RelatedArtifact addRelatedArtifact() { //3
1182      RelatedArtifact t = new RelatedArtifact();
1183      if (this.relatedArtifact == null)
1184        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1185      this.relatedArtifact.add(t);
1186      return t;
1187    }
1188
1189    public ResearchStudy addRelatedArtifact(RelatedArtifact t) { //3
1190      if (t == null)
1191        return this;
1192      if (this.relatedArtifact == null)
1193        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1194      this.relatedArtifact.add(t);
1195      return this;
1196    }
1197
1198    /**
1199     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist
1200     */
1201    public RelatedArtifact getRelatedArtifactFirstRep() { 
1202      if (getRelatedArtifact().isEmpty()) {
1203        addRelatedArtifact();
1204      }
1205      return getRelatedArtifact().get(0);
1206    }
1207
1208    /**
1209     * @return {@link #keyword} (Key terms to aid in searching for or filtering the study.)
1210     */
1211    public List<CodeableConcept> getKeyword() { 
1212      if (this.keyword == null)
1213        this.keyword = new ArrayList<CodeableConcept>();
1214      return this.keyword;
1215    }
1216
1217    /**
1218     * @return Returns a reference to <code>this</code> for easy method chaining
1219     */
1220    public ResearchStudy setKeyword(List<CodeableConcept> theKeyword) { 
1221      this.keyword = theKeyword;
1222      return this;
1223    }
1224
1225    public boolean hasKeyword() { 
1226      if (this.keyword == null)
1227        return false;
1228      for (CodeableConcept item : this.keyword)
1229        if (!item.isEmpty())
1230          return true;
1231      return false;
1232    }
1233
1234    public CodeableConcept addKeyword() { //3
1235      CodeableConcept t = new CodeableConcept();
1236      if (this.keyword == null)
1237        this.keyword = new ArrayList<CodeableConcept>();
1238      this.keyword.add(t);
1239      return t;
1240    }
1241
1242    public ResearchStudy addKeyword(CodeableConcept t) { //3
1243      if (t == null)
1244        return this;
1245      if (this.keyword == null)
1246        this.keyword = new ArrayList<CodeableConcept>();
1247      this.keyword.add(t);
1248      return this;
1249    }
1250
1251    /**
1252     * @return The first repetition of repeating field {@link #keyword}, creating it if it does not already exist
1253     */
1254    public CodeableConcept getKeywordFirstRep() { 
1255      if (getKeyword().isEmpty()) {
1256        addKeyword();
1257      }
1258      return getKeyword().get(0);
1259    }
1260
1261    /**
1262     * @return {@link #jurisdiction} (Indicates a country, state or other region where the study is taking place.)
1263     */
1264    public List<CodeableConcept> getJurisdiction() { 
1265      if (this.jurisdiction == null)
1266        this.jurisdiction = new ArrayList<CodeableConcept>();
1267      return this.jurisdiction;
1268    }
1269
1270    /**
1271     * @return Returns a reference to <code>this</code> for easy method chaining
1272     */
1273    public ResearchStudy setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1274      this.jurisdiction = theJurisdiction;
1275      return this;
1276    }
1277
1278    public boolean hasJurisdiction() { 
1279      if (this.jurisdiction == null)
1280        return false;
1281      for (CodeableConcept item : this.jurisdiction)
1282        if (!item.isEmpty())
1283          return true;
1284      return false;
1285    }
1286
1287    public CodeableConcept addJurisdiction() { //3
1288      CodeableConcept t = new CodeableConcept();
1289      if (this.jurisdiction == null)
1290        this.jurisdiction = new ArrayList<CodeableConcept>();
1291      this.jurisdiction.add(t);
1292      return t;
1293    }
1294
1295    public ResearchStudy addJurisdiction(CodeableConcept t) { //3
1296      if (t == null)
1297        return this;
1298      if (this.jurisdiction == null)
1299        this.jurisdiction = new ArrayList<CodeableConcept>();
1300      this.jurisdiction.add(t);
1301      return this;
1302    }
1303
1304    /**
1305     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1306     */
1307    public CodeableConcept getJurisdictionFirstRep() { 
1308      if (getJurisdiction().isEmpty()) {
1309        addJurisdiction();
1310      }
1311      return getJurisdiction().get(0);
1312    }
1313
1314    /**
1315     * @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
1316     */
1317    public MarkdownType getDescriptionElement() { 
1318      if (this.description == null)
1319        if (Configuration.errorOnAutoCreate())
1320          throw new Error("Attempt to auto-create ResearchStudy.description");
1321        else if (Configuration.doAutoCreate())
1322          this.description = new MarkdownType(); // bb
1323      return this.description;
1324    }
1325
1326    public boolean hasDescriptionElement() { 
1327      return this.description != null && !this.description.isEmpty();
1328    }
1329
1330    public boolean hasDescription() { 
1331      return this.description != null && !this.description.isEmpty();
1332    }
1333
1334    /**
1335     * @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
1336     */
1337    public ResearchStudy setDescriptionElement(MarkdownType value) { 
1338      this.description = value;
1339      return this;
1340    }
1341
1342    /**
1343     * @return A full description of how the study is being conducted.
1344     */
1345    public String getDescription() { 
1346      return this.description == null ? null : this.description.getValue();
1347    }
1348
1349    /**
1350     * @param value A full description of how the study is being conducted.
1351     */
1352    public ResearchStudy setDescription(String value) { 
1353      if (value == null)
1354        this.description = null;
1355      else {
1356        if (this.description == null)
1357          this.description = new MarkdownType();
1358        this.description.setValue(value);
1359      }
1360      return this;
1361    }
1362
1363    /**
1364     * @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".)
1365     */
1366    public List<Reference> getEnrollment() { 
1367      if (this.enrollment == null)
1368        this.enrollment = new ArrayList<Reference>();
1369      return this.enrollment;
1370    }
1371
1372    /**
1373     * @return Returns a reference to <code>this</code> for easy method chaining
1374     */
1375    public ResearchStudy setEnrollment(List<Reference> theEnrollment) { 
1376      this.enrollment = theEnrollment;
1377      return this;
1378    }
1379
1380    public boolean hasEnrollment() { 
1381      if (this.enrollment == null)
1382        return false;
1383      for (Reference item : this.enrollment)
1384        if (!item.isEmpty())
1385          return true;
1386      return false;
1387    }
1388
1389    public Reference addEnrollment() { //3
1390      Reference t = new Reference();
1391      if (this.enrollment == null)
1392        this.enrollment = new ArrayList<Reference>();
1393      this.enrollment.add(t);
1394      return t;
1395    }
1396
1397    public ResearchStudy addEnrollment(Reference t) { //3
1398      if (t == null)
1399        return this;
1400      if (this.enrollment == null)
1401        this.enrollment = new ArrayList<Reference>();
1402      this.enrollment.add(t);
1403      return this;
1404    }
1405
1406    /**
1407     * @return The first repetition of repeating field {@link #enrollment}, creating it if it does not already exist
1408     */
1409    public Reference getEnrollmentFirstRep() { 
1410      if (getEnrollment().isEmpty()) {
1411        addEnrollment();
1412      }
1413      return getEnrollment().get(0);
1414    }
1415
1416    /**
1417     * @deprecated Use Reference#setResource(IBaseResource) instead
1418     */
1419    @Deprecated
1420    public List<Group> getEnrollmentTarget() { 
1421      if (this.enrollmentTarget == null)
1422        this.enrollmentTarget = new ArrayList<Group>();
1423      return this.enrollmentTarget;
1424    }
1425
1426    /**
1427     * @deprecated Use Reference#setResource(IBaseResource) instead
1428     */
1429    @Deprecated
1430    public Group addEnrollmentTarget() { 
1431      Group r = new Group();
1432      if (this.enrollmentTarget == null)
1433        this.enrollmentTarget = new ArrayList<Group>();
1434      this.enrollmentTarget.add(r);
1435      return r;
1436    }
1437
1438    /**
1439     * @return {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1440     */
1441    public Period getPeriod() { 
1442      if (this.period == null)
1443        if (Configuration.errorOnAutoCreate())
1444          throw new Error("Attempt to auto-create ResearchStudy.period");
1445        else if (Configuration.doAutoCreate())
1446          this.period = new Period(); // cc
1447      return this.period;
1448    }
1449
1450    public boolean hasPeriod() { 
1451      return this.period != null && !this.period.isEmpty();
1452    }
1453
1454    /**
1455     * @param value {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1456     */
1457    public ResearchStudy setPeriod(Period value)  { 
1458      this.period = value;
1459      return this;
1460    }
1461
1462    /**
1463     * @return {@link #sponsor} (The organization responsible for the execution of the study.)
1464     */
1465    public Reference getSponsor() { 
1466      if (this.sponsor == null)
1467        if (Configuration.errorOnAutoCreate())
1468          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1469        else if (Configuration.doAutoCreate())
1470          this.sponsor = new Reference(); // cc
1471      return this.sponsor;
1472    }
1473
1474    public boolean hasSponsor() { 
1475      return this.sponsor != null && !this.sponsor.isEmpty();
1476    }
1477
1478    /**
1479     * @param value {@link #sponsor} (The organization responsible for the execution of the study.)
1480     */
1481    public ResearchStudy setSponsor(Reference value)  { 
1482      this.sponsor = value;
1483      return this;
1484    }
1485
1486    /**
1487     * @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. (The organization responsible for the execution of the study.)
1488     */
1489    public Organization getSponsorTarget() { 
1490      if (this.sponsorTarget == null)
1491        if (Configuration.errorOnAutoCreate())
1492          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1493        else if (Configuration.doAutoCreate())
1494          this.sponsorTarget = new Organization(); // aa
1495      return this.sponsorTarget;
1496    }
1497
1498    /**
1499     * @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. (The organization responsible for the execution of the study.)
1500     */
1501    public ResearchStudy setSponsorTarget(Organization value) { 
1502      this.sponsorTarget = value;
1503      return this;
1504    }
1505
1506    /**
1507     * @return {@link #principalInvestigator} (Indicates the individual who has primary oversite of the execution of the study.)
1508     */
1509    public Reference getPrincipalInvestigator() { 
1510      if (this.principalInvestigator == null)
1511        if (Configuration.errorOnAutoCreate())
1512          throw new Error("Attempt to auto-create ResearchStudy.principalInvestigator");
1513        else if (Configuration.doAutoCreate())
1514          this.principalInvestigator = new Reference(); // cc
1515      return this.principalInvestigator;
1516    }
1517
1518    public boolean hasPrincipalInvestigator() { 
1519      return this.principalInvestigator != null && !this.principalInvestigator.isEmpty();
1520    }
1521
1522    /**
1523     * @param value {@link #principalInvestigator} (Indicates the individual who has primary oversite of the execution of the study.)
1524     */
1525    public ResearchStudy setPrincipalInvestigator(Reference value)  { 
1526      this.principalInvestigator = value;
1527      return this;
1528    }
1529
1530    /**
1531     * @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. (Indicates the individual who has primary oversite of the execution of the study.)
1532     */
1533    public Practitioner getPrincipalInvestigatorTarget() { 
1534      if (this.principalInvestigatorTarget == null)
1535        if (Configuration.errorOnAutoCreate())
1536          throw new Error("Attempt to auto-create ResearchStudy.principalInvestigator");
1537        else if (Configuration.doAutoCreate())
1538          this.principalInvestigatorTarget = new Practitioner(); // aa
1539      return this.principalInvestigatorTarget;
1540    }
1541
1542    /**
1543     * @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. (Indicates the individual who has primary oversite of the execution of the study.)
1544     */
1545    public ResearchStudy setPrincipalInvestigatorTarget(Practitioner value) { 
1546      this.principalInvestigatorTarget = value;
1547      return this;
1548    }
1549
1550    /**
1551     * @return {@link #site} (Clinic, hospital or other healthcare location that is participating in the study.)
1552     */
1553    public List<Reference> getSite() { 
1554      if (this.site == null)
1555        this.site = new ArrayList<Reference>();
1556      return this.site;
1557    }
1558
1559    /**
1560     * @return Returns a reference to <code>this</code> for easy method chaining
1561     */
1562    public ResearchStudy setSite(List<Reference> theSite) { 
1563      this.site = theSite;
1564      return this;
1565    }
1566
1567    public boolean hasSite() { 
1568      if (this.site == null)
1569        return false;
1570      for (Reference item : this.site)
1571        if (!item.isEmpty())
1572          return true;
1573      return false;
1574    }
1575
1576    public Reference addSite() { //3
1577      Reference t = new Reference();
1578      if (this.site == null)
1579        this.site = new ArrayList<Reference>();
1580      this.site.add(t);
1581      return t;
1582    }
1583
1584    public ResearchStudy addSite(Reference t) { //3
1585      if (t == null)
1586        return this;
1587      if (this.site == null)
1588        this.site = new ArrayList<Reference>();
1589      this.site.add(t);
1590      return this;
1591    }
1592
1593    /**
1594     * @return The first repetition of repeating field {@link #site}, creating it if it does not already exist
1595     */
1596    public Reference getSiteFirstRep() { 
1597      if (getSite().isEmpty()) {
1598        addSite();
1599      }
1600      return getSite().get(0);
1601    }
1602
1603    /**
1604     * @deprecated Use Reference#setResource(IBaseResource) instead
1605     */
1606    @Deprecated
1607    public List<Location> getSiteTarget() { 
1608      if (this.siteTarget == null)
1609        this.siteTarget = new ArrayList<Location>();
1610      return this.siteTarget;
1611    }
1612
1613    /**
1614     * @deprecated Use Reference#setResource(IBaseResource) instead
1615     */
1616    @Deprecated
1617    public Location addSiteTarget() { 
1618      Location r = new Location();
1619      if (this.siteTarget == null)
1620        this.siteTarget = new ArrayList<Location>();
1621      this.siteTarget.add(r);
1622      return r;
1623    }
1624
1625    /**
1626     * @return {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
1627     */
1628    public CodeableConcept getReasonStopped() { 
1629      if (this.reasonStopped == null)
1630        if (Configuration.errorOnAutoCreate())
1631          throw new Error("Attempt to auto-create ResearchStudy.reasonStopped");
1632        else if (Configuration.doAutoCreate())
1633          this.reasonStopped = new CodeableConcept(); // cc
1634      return this.reasonStopped;
1635    }
1636
1637    public boolean hasReasonStopped() { 
1638      return this.reasonStopped != null && !this.reasonStopped.isEmpty();
1639    }
1640
1641    /**
1642     * @param value {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
1643     */
1644    public ResearchStudy setReasonStopped(CodeableConcept value)  { 
1645      this.reasonStopped = value;
1646      return this;
1647    }
1648
1649    /**
1650     * @return {@link #note} (Comments made about the event by the performer, subject or other participants.)
1651     */
1652    public List<Annotation> getNote() { 
1653      if (this.note == null)
1654        this.note = new ArrayList<Annotation>();
1655      return this.note;
1656    }
1657
1658    /**
1659     * @return Returns a reference to <code>this</code> for easy method chaining
1660     */
1661    public ResearchStudy setNote(List<Annotation> theNote) { 
1662      this.note = theNote;
1663      return this;
1664    }
1665
1666    public boolean hasNote() { 
1667      if (this.note == null)
1668        return false;
1669      for (Annotation item : this.note)
1670        if (!item.isEmpty())
1671          return true;
1672      return false;
1673    }
1674
1675    public Annotation addNote() { //3
1676      Annotation t = new Annotation();
1677      if (this.note == null)
1678        this.note = new ArrayList<Annotation>();
1679      this.note.add(t);
1680      return t;
1681    }
1682
1683    public ResearchStudy addNote(Annotation t) { //3
1684      if (t == null)
1685        return this;
1686      if (this.note == null)
1687        this.note = new ArrayList<Annotation>();
1688      this.note.add(t);
1689      return this;
1690    }
1691
1692    /**
1693     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1694     */
1695    public Annotation getNoteFirstRep() { 
1696      if (getNote().isEmpty()) {
1697        addNote();
1698      }
1699      return getNote().get(0);
1700    }
1701
1702    /**
1703     * @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.)
1704     */
1705    public List<ResearchStudyArmComponent> getArm() { 
1706      if (this.arm == null)
1707        this.arm = new ArrayList<ResearchStudyArmComponent>();
1708      return this.arm;
1709    }
1710
1711    /**
1712     * @return Returns a reference to <code>this</code> for easy method chaining
1713     */
1714    public ResearchStudy setArm(List<ResearchStudyArmComponent> theArm) { 
1715      this.arm = theArm;
1716      return this;
1717    }
1718
1719    public boolean hasArm() { 
1720      if (this.arm == null)
1721        return false;
1722      for (ResearchStudyArmComponent item : this.arm)
1723        if (!item.isEmpty())
1724          return true;
1725      return false;
1726    }
1727
1728    public ResearchStudyArmComponent addArm() { //3
1729      ResearchStudyArmComponent t = new ResearchStudyArmComponent();
1730      if (this.arm == null)
1731        this.arm = new ArrayList<ResearchStudyArmComponent>();
1732      this.arm.add(t);
1733      return t;
1734    }
1735
1736    public ResearchStudy addArm(ResearchStudyArmComponent t) { //3
1737      if (t == null)
1738        return this;
1739      if (this.arm == null)
1740        this.arm = new ArrayList<ResearchStudyArmComponent>();
1741      this.arm.add(t);
1742      return this;
1743    }
1744
1745    /**
1746     * @return The first repetition of repeating field {@link #arm}, creating it if it does not already exist
1747     */
1748    public ResearchStudyArmComponent getArmFirstRep() { 
1749      if (getArm().isEmpty()) {
1750        addArm();
1751      }
1752      return getArm().get(0);
1753    }
1754
1755      protected void listChildren(List<Property> children) {
1756        super.listChildren(children);
1757        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));
1758        children.add(new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title));
1759        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));
1760        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));
1761        children.add(new Property("status", "code", "The current state of the study.", 0, 1, status));
1762        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));
1763        children.add(new Property("focus", "CodeableConcept", "The condition(s), 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));
1764        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));
1765        children.add(new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
1766        children.add(new Property("keyword", "CodeableConcept", "Key terms to aid in searching for or filtering the study.", 0, java.lang.Integer.MAX_VALUE, keyword));
1767        children.add(new Property("jurisdiction", "CodeableConcept", "Indicates a country, state or other region where the study is taking place.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
1768        children.add(new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description));
1769        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));
1770        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));
1771        children.add(new Property("sponsor", "Reference(Organization)", "The organization responsible for the execution of the study.", 0, 1, sponsor));
1772        children.add(new Property("principalInvestigator", "Reference(Practitioner)", "Indicates the individual who has primary oversite of the execution of the study.", 0, 1, principalInvestigator));
1773        children.add(new Property("site", "Reference(Location)", "Clinic, hospital or other healthcare location that is participating in the study.", 0, java.lang.Integer.MAX_VALUE, site));
1774        children.add(new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped));
1775        children.add(new Property("note", "Annotation", "Comments made about the event by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note));
1776        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));
1777      }
1778
1779      @Override
1780      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1781        switch (_hash) {
1782        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);
1783        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title);
1784        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);
1785        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);
1786        case -892481550: /*status*/  return new Property("status", "code", "The current state of the study.", 0, 1, status);
1787        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);
1788        case 97604824: /*focus*/  return new Property("focus", "CodeableConcept", "The condition(s), 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);
1789        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);
1790        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
1791        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);
1792        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "Indicates a country, state or other region where the study is taking place.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
1793        case -1724546052: /*description*/  return new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description);
1794        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);
1795        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);
1796        case -1998892262: /*sponsor*/  return new Property("sponsor", "Reference(Organization)", "The organization responsible for the execution of the study.", 0, 1, sponsor);
1797        case 1437117175: /*principalInvestigator*/  return new Property("principalInvestigator", "Reference(Practitioner)", "Indicates the individual who has primary oversite of the execution of the study.", 0, 1, principalInvestigator);
1798        case 3530567: /*site*/  return new Property("site", "Reference(Location)", "Clinic, hospital or other healthcare location that is participating in the study.", 0, java.lang.Integer.MAX_VALUE, site);
1799        case 1181369065: /*reasonStopped*/  return new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped);
1800        case 3387378: /*note*/  return new Property("note", "Annotation", "Comments made about the event by the performer, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note);
1801        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);
1802        default: return super.getNamedProperty(_hash, _name, _checkValid);
1803        }
1804
1805      }
1806
1807      @Override
1808      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1809        switch (hash) {
1810        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1811        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1812        case -989163880: /*protocol*/ return this.protocol == null ? new Base[0] : this.protocol.toArray(new Base[this.protocol.size()]); // Reference
1813        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
1814        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ResearchStudyStatus>
1815        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1816        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // CodeableConcept
1817        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1818        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1819        case -814408215: /*keyword*/ return this.keyword == null ? new Base[0] : this.keyword.toArray(new Base[this.keyword.size()]); // CodeableConcept
1820        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1821        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1822        case 116089604: /*enrollment*/ return this.enrollment == null ? new Base[0] : this.enrollment.toArray(new Base[this.enrollment.size()]); // Reference
1823        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1824        case -1998892262: /*sponsor*/ return this.sponsor == null ? new Base[0] : new Base[] {this.sponsor}; // Reference
1825        case 1437117175: /*principalInvestigator*/ return this.principalInvestigator == null ? new Base[0] : new Base[] {this.principalInvestigator}; // Reference
1826        case 3530567: /*site*/ return this.site == null ? new Base[0] : this.site.toArray(new Base[this.site.size()]); // Reference
1827        case 1181369065: /*reasonStopped*/ return this.reasonStopped == null ? new Base[0] : new Base[] {this.reasonStopped}; // CodeableConcept
1828        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1829        case 96860: /*arm*/ return this.arm == null ? new Base[0] : this.arm.toArray(new Base[this.arm.size()]); // ResearchStudyArmComponent
1830        default: return super.getProperty(hash, name, checkValid);
1831        }
1832
1833      }
1834
1835      @Override
1836      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1837        switch (hash) {
1838        case -1618432855: // identifier
1839          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1840          return value;
1841        case 110371416: // title
1842          this.title = castToString(value); // StringType
1843          return value;
1844        case -989163880: // protocol
1845          this.getProtocol().add(castToReference(value)); // Reference
1846          return value;
1847        case -995410646: // partOf
1848          this.getPartOf().add(castToReference(value)); // Reference
1849          return value;
1850        case -892481550: // status
1851          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
1852          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
1853          return value;
1854        case 50511102: // category
1855          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
1856          return value;
1857        case 97604824: // focus
1858          this.getFocus().add(castToCodeableConcept(value)); // CodeableConcept
1859          return value;
1860        case 951526432: // contact
1861          this.getContact().add(castToContactDetail(value)); // ContactDetail
1862          return value;
1863        case 666807069: // relatedArtifact
1864          this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
1865          return value;
1866        case -814408215: // keyword
1867          this.getKeyword().add(castToCodeableConcept(value)); // CodeableConcept
1868          return value;
1869        case -507075711: // jurisdiction
1870          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1871          return value;
1872        case -1724546052: // description
1873          this.description = castToMarkdown(value); // MarkdownType
1874          return value;
1875        case 116089604: // enrollment
1876          this.getEnrollment().add(castToReference(value)); // Reference
1877          return value;
1878        case -991726143: // period
1879          this.period = castToPeriod(value); // Period
1880          return value;
1881        case -1998892262: // sponsor
1882          this.sponsor = castToReference(value); // Reference
1883          return value;
1884        case 1437117175: // principalInvestigator
1885          this.principalInvestigator = castToReference(value); // Reference
1886          return value;
1887        case 3530567: // site
1888          this.getSite().add(castToReference(value)); // Reference
1889          return value;
1890        case 1181369065: // reasonStopped
1891          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
1892          return value;
1893        case 3387378: // note
1894          this.getNote().add(castToAnnotation(value)); // Annotation
1895          return value;
1896        case 96860: // arm
1897          this.getArm().add((ResearchStudyArmComponent) value); // ResearchStudyArmComponent
1898          return value;
1899        default: return super.setProperty(hash, name, value);
1900        }
1901
1902      }
1903
1904      @Override
1905      public Base setProperty(String name, Base value) throws FHIRException {
1906        if (name.equals("identifier")) {
1907          this.getIdentifier().add(castToIdentifier(value));
1908        } else if (name.equals("title")) {
1909          this.title = castToString(value); // StringType
1910        } else if (name.equals("protocol")) {
1911          this.getProtocol().add(castToReference(value));
1912        } else if (name.equals("partOf")) {
1913          this.getPartOf().add(castToReference(value));
1914        } else if (name.equals("status")) {
1915          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
1916          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
1917        } else if (name.equals("category")) {
1918          this.getCategory().add(castToCodeableConcept(value));
1919        } else if (name.equals("focus")) {
1920          this.getFocus().add(castToCodeableConcept(value));
1921        } else if (name.equals("contact")) {
1922          this.getContact().add(castToContactDetail(value));
1923        } else if (name.equals("relatedArtifact")) {
1924          this.getRelatedArtifact().add(castToRelatedArtifact(value));
1925        } else if (name.equals("keyword")) {
1926          this.getKeyword().add(castToCodeableConcept(value));
1927        } else if (name.equals("jurisdiction")) {
1928          this.getJurisdiction().add(castToCodeableConcept(value));
1929        } else if (name.equals("description")) {
1930          this.description = castToMarkdown(value); // MarkdownType
1931        } else if (name.equals("enrollment")) {
1932          this.getEnrollment().add(castToReference(value));
1933        } else if (name.equals("period")) {
1934          this.period = castToPeriod(value); // Period
1935        } else if (name.equals("sponsor")) {
1936          this.sponsor = castToReference(value); // Reference
1937        } else if (name.equals("principalInvestigator")) {
1938          this.principalInvestigator = castToReference(value); // Reference
1939        } else if (name.equals("site")) {
1940          this.getSite().add(castToReference(value));
1941        } else if (name.equals("reasonStopped")) {
1942          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
1943        } else if (name.equals("note")) {
1944          this.getNote().add(castToAnnotation(value));
1945        } else if (name.equals("arm")) {
1946          this.getArm().add((ResearchStudyArmComponent) value);
1947        } else
1948          return super.setProperty(name, value);
1949        return value;
1950      }
1951
1952      @Override
1953      public Base makeProperty(int hash, String name) throws FHIRException {
1954        switch (hash) {
1955        case -1618432855:  return addIdentifier(); 
1956        case 110371416:  return getTitleElement();
1957        case -989163880:  return addProtocol(); 
1958        case -995410646:  return addPartOf(); 
1959        case -892481550:  return getStatusElement();
1960        case 50511102:  return addCategory(); 
1961        case 97604824:  return addFocus(); 
1962        case 951526432:  return addContact(); 
1963        case 666807069:  return addRelatedArtifact(); 
1964        case -814408215:  return addKeyword(); 
1965        case -507075711:  return addJurisdiction(); 
1966        case -1724546052:  return getDescriptionElement();
1967        case 116089604:  return addEnrollment(); 
1968        case -991726143:  return getPeriod(); 
1969        case -1998892262:  return getSponsor(); 
1970        case 1437117175:  return getPrincipalInvestigator(); 
1971        case 3530567:  return addSite(); 
1972        case 1181369065:  return getReasonStopped(); 
1973        case 3387378:  return addNote(); 
1974        case 96860:  return addArm(); 
1975        default: return super.makeProperty(hash, name);
1976        }
1977
1978      }
1979
1980      @Override
1981      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1982        switch (hash) {
1983        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1984        case 110371416: /*title*/ return new String[] {"string"};
1985        case -989163880: /*protocol*/ return new String[] {"Reference"};
1986        case -995410646: /*partOf*/ return new String[] {"Reference"};
1987        case -892481550: /*status*/ return new String[] {"code"};
1988        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1989        case 97604824: /*focus*/ return new String[] {"CodeableConcept"};
1990        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1991        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1992        case -814408215: /*keyword*/ return new String[] {"CodeableConcept"};
1993        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1994        case -1724546052: /*description*/ return new String[] {"markdown"};
1995        case 116089604: /*enrollment*/ return new String[] {"Reference"};
1996        case -991726143: /*period*/ return new String[] {"Period"};
1997        case -1998892262: /*sponsor*/ return new String[] {"Reference"};
1998        case 1437117175: /*principalInvestigator*/ return new String[] {"Reference"};
1999        case 3530567: /*site*/ return new String[] {"Reference"};
2000        case 1181369065: /*reasonStopped*/ return new String[] {"CodeableConcept"};
2001        case 3387378: /*note*/ return new String[] {"Annotation"};
2002        case 96860: /*arm*/ return new String[] {};
2003        default: return super.getTypesForProperty(hash, name);
2004        }
2005
2006      }
2007
2008      @Override
2009      public Base addChild(String name) throws FHIRException {
2010        if (name.equals("identifier")) {
2011          return addIdentifier();
2012        }
2013        else if (name.equals("title")) {
2014          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.title");
2015        }
2016        else if (name.equals("protocol")) {
2017          return addProtocol();
2018        }
2019        else if (name.equals("partOf")) {
2020          return addPartOf();
2021        }
2022        else if (name.equals("status")) {
2023          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.status");
2024        }
2025        else if (name.equals("category")) {
2026          return addCategory();
2027        }
2028        else if (name.equals("focus")) {
2029          return addFocus();
2030        }
2031        else if (name.equals("contact")) {
2032          return addContact();
2033        }
2034        else if (name.equals("relatedArtifact")) {
2035          return addRelatedArtifact();
2036        }
2037        else if (name.equals("keyword")) {
2038          return addKeyword();
2039        }
2040        else if (name.equals("jurisdiction")) {
2041          return addJurisdiction();
2042        }
2043        else if (name.equals("description")) {
2044          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.description");
2045        }
2046        else if (name.equals("enrollment")) {
2047          return addEnrollment();
2048        }
2049        else if (name.equals("period")) {
2050          this.period = new Period();
2051          return this.period;
2052        }
2053        else if (name.equals("sponsor")) {
2054          this.sponsor = new Reference();
2055          return this.sponsor;
2056        }
2057        else if (name.equals("principalInvestigator")) {
2058          this.principalInvestigator = new Reference();
2059          return this.principalInvestigator;
2060        }
2061        else if (name.equals("site")) {
2062          return addSite();
2063        }
2064        else if (name.equals("reasonStopped")) {
2065          this.reasonStopped = new CodeableConcept();
2066          return this.reasonStopped;
2067        }
2068        else if (name.equals("note")) {
2069          return addNote();
2070        }
2071        else if (name.equals("arm")) {
2072          return addArm();
2073        }
2074        else
2075          return super.addChild(name);
2076      }
2077
2078  public String fhirType() {
2079    return "ResearchStudy";
2080
2081  }
2082
2083      public ResearchStudy copy() {
2084        ResearchStudy dst = new ResearchStudy();
2085        copyValues(dst);
2086        if (identifier != null) {
2087          dst.identifier = new ArrayList<Identifier>();
2088          for (Identifier i : identifier)
2089            dst.identifier.add(i.copy());
2090        };
2091        dst.title = title == null ? null : title.copy();
2092        if (protocol != null) {
2093          dst.protocol = new ArrayList<Reference>();
2094          for (Reference i : protocol)
2095            dst.protocol.add(i.copy());
2096        };
2097        if (partOf != null) {
2098          dst.partOf = new ArrayList<Reference>();
2099          for (Reference i : partOf)
2100            dst.partOf.add(i.copy());
2101        };
2102        dst.status = status == null ? null : status.copy();
2103        if (category != null) {
2104          dst.category = new ArrayList<CodeableConcept>();
2105          for (CodeableConcept i : category)
2106            dst.category.add(i.copy());
2107        };
2108        if (focus != null) {
2109          dst.focus = new ArrayList<CodeableConcept>();
2110          for (CodeableConcept i : focus)
2111            dst.focus.add(i.copy());
2112        };
2113        if (contact != null) {
2114          dst.contact = new ArrayList<ContactDetail>();
2115          for (ContactDetail i : contact)
2116            dst.contact.add(i.copy());
2117        };
2118        if (relatedArtifact != null) {
2119          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
2120          for (RelatedArtifact i : relatedArtifact)
2121            dst.relatedArtifact.add(i.copy());
2122        };
2123        if (keyword != null) {
2124          dst.keyword = new ArrayList<CodeableConcept>();
2125          for (CodeableConcept i : keyword)
2126            dst.keyword.add(i.copy());
2127        };
2128        if (jurisdiction != null) {
2129          dst.jurisdiction = new ArrayList<CodeableConcept>();
2130          for (CodeableConcept i : jurisdiction)
2131            dst.jurisdiction.add(i.copy());
2132        };
2133        dst.description = description == null ? null : description.copy();
2134        if (enrollment != null) {
2135          dst.enrollment = new ArrayList<Reference>();
2136          for (Reference i : enrollment)
2137            dst.enrollment.add(i.copy());
2138        };
2139        dst.period = period == null ? null : period.copy();
2140        dst.sponsor = sponsor == null ? null : sponsor.copy();
2141        dst.principalInvestigator = principalInvestigator == null ? null : principalInvestigator.copy();
2142        if (site != null) {
2143          dst.site = new ArrayList<Reference>();
2144          for (Reference i : site)
2145            dst.site.add(i.copy());
2146        };
2147        dst.reasonStopped = reasonStopped == null ? null : reasonStopped.copy();
2148        if (note != null) {
2149          dst.note = new ArrayList<Annotation>();
2150          for (Annotation i : note)
2151            dst.note.add(i.copy());
2152        };
2153        if (arm != null) {
2154          dst.arm = new ArrayList<ResearchStudyArmComponent>();
2155          for (ResearchStudyArmComponent i : arm)
2156            dst.arm.add(i.copy());
2157        };
2158        return dst;
2159      }
2160
2161      protected ResearchStudy typedCopy() {
2162        return copy();
2163      }
2164
2165      @Override
2166      public boolean equalsDeep(Base other_) {
2167        if (!super.equalsDeep(other_))
2168          return false;
2169        if (!(other_ instanceof ResearchStudy))
2170          return false;
2171        ResearchStudy o = (ResearchStudy) other_;
2172        return compareDeep(identifier, o.identifier, true) && compareDeep(title, o.title, true) && compareDeep(protocol, o.protocol, true)
2173           && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true) && compareDeep(category, o.category, true)
2174           && compareDeep(focus, o.focus, true) && compareDeep(contact, o.contact, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
2175           && compareDeep(keyword, o.keyword, true) && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(description, o.description, true)
2176           && compareDeep(enrollment, o.enrollment, true) && compareDeep(period, o.period, true) && compareDeep(sponsor, o.sponsor, true)
2177           && compareDeep(principalInvestigator, o.principalInvestigator, true) && compareDeep(site, o.site, true)
2178           && compareDeep(reasonStopped, o.reasonStopped, true) && compareDeep(note, o.note, true) && compareDeep(arm, o.arm, true)
2179          ;
2180      }
2181
2182      @Override
2183      public boolean equalsShallow(Base other_) {
2184        if (!super.equalsShallow(other_))
2185          return false;
2186        if (!(other_ instanceof ResearchStudy))
2187          return false;
2188        ResearchStudy o = (ResearchStudy) other_;
2189        return compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(description, o.description, true)
2190          ;
2191      }
2192
2193      public boolean isEmpty() {
2194        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, title, protocol
2195          , partOf, status, category, focus, contact, relatedArtifact, keyword, jurisdiction
2196          , description, enrollment, period, sponsor, principalInvestigator, site, reasonStopped
2197          , note, arm);
2198      }
2199
2200  @Override
2201  public ResourceType getResourceType() {
2202    return ResourceType.ResearchStudy;
2203   }
2204
2205 /**
2206   * Search parameter: <b>date</b>
2207   * <p>
2208   * Description: <b>When the study began and ended</b><br>
2209   * Type: <b>date</b><br>
2210   * Path: <b>ResearchStudy.period</b><br>
2211   * </p>
2212   */
2213  @SearchParamDefinition(name="date", path="ResearchStudy.period", description="When the study began and ended", type="date" )
2214  public static final String SP_DATE = "date";
2215 /**
2216   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2217   * <p>
2218   * Description: <b>When the study began and ended</b><br>
2219   * Type: <b>date</b><br>
2220   * Path: <b>ResearchStudy.period</b><br>
2221   * </p>
2222   */
2223  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2224
2225 /**
2226   * Search parameter: <b>identifier</b>
2227   * <p>
2228   * Description: <b>Business Identifier for study</b><br>
2229   * Type: <b>token</b><br>
2230   * Path: <b>ResearchStudy.identifier</b><br>
2231   * </p>
2232   */
2233  @SearchParamDefinition(name="identifier", path="ResearchStudy.identifier", description="Business Identifier for study", type="token" )
2234  public static final String SP_IDENTIFIER = "identifier";
2235 /**
2236   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2237   * <p>
2238   * Description: <b>Business Identifier for study</b><br>
2239   * Type: <b>token</b><br>
2240   * Path: <b>ResearchStudy.identifier</b><br>
2241   * </p>
2242   */
2243  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2244
2245 /**
2246   * Search parameter: <b>partof</b>
2247   * <p>
2248   * Description: <b>Part of larger study</b><br>
2249   * Type: <b>reference</b><br>
2250   * Path: <b>ResearchStudy.partOf</b><br>
2251   * </p>
2252   */
2253  @SearchParamDefinition(name="partof", path="ResearchStudy.partOf", description="Part of larger study", type="reference", target={ResearchStudy.class } )
2254  public static final String SP_PARTOF = "partof";
2255 /**
2256   * <b>Fluent Client</b> search parameter constant for <b>partof</b>
2257   * <p>
2258   * Description: <b>Part of larger study</b><br>
2259   * Type: <b>reference</b><br>
2260   * Path: <b>ResearchStudy.partOf</b><br>
2261   * </p>
2262   */
2263  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTOF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTOF);
2264
2265/**
2266   * Constant for fluent queries to be used to add include statements. Specifies
2267   * the path value of "<b>ResearchStudy:partof</b>".
2268   */
2269  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTOF = new ca.uhn.fhir.model.api.Include("ResearchStudy:partof").toLocked();
2270
2271 /**
2272   * Search parameter: <b>sponsor</b>
2273   * <p>
2274   * Description: <b>Organization responsible for the study</b><br>
2275   * Type: <b>reference</b><br>
2276   * Path: <b>ResearchStudy.sponsor</b><br>
2277   * </p>
2278   */
2279  @SearchParamDefinition(name="sponsor", path="ResearchStudy.sponsor", description="Organization responsible for the study", type="reference", target={Organization.class } )
2280  public static final String SP_SPONSOR = "sponsor";
2281 /**
2282   * <b>Fluent Client</b> search parameter constant for <b>sponsor</b>
2283   * <p>
2284   * Description: <b>Organization responsible for the study</b><br>
2285   * Type: <b>reference</b><br>
2286   * Path: <b>ResearchStudy.sponsor</b><br>
2287   * </p>
2288   */
2289  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SPONSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SPONSOR);
2290
2291/**
2292   * Constant for fluent queries to be used to add include statements. Specifies
2293   * the path value of "<b>ResearchStudy:sponsor</b>".
2294   */
2295  public static final ca.uhn.fhir.model.api.Include INCLUDE_SPONSOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:sponsor").toLocked();
2296
2297 /**
2298   * Search parameter: <b>jurisdiction</b>
2299   * <p>
2300   * Description: <b>Geographic region(s) for study</b><br>
2301   * Type: <b>token</b><br>
2302   * Path: <b>ResearchStudy.jurisdiction</b><br>
2303   * </p>
2304   */
2305  @SearchParamDefinition(name="jurisdiction", path="ResearchStudy.jurisdiction", description="Geographic region(s) for study", type="token" )
2306  public static final String SP_JURISDICTION = "jurisdiction";
2307 /**
2308   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2309   * <p>
2310   * Description: <b>Geographic region(s) for study</b><br>
2311   * Type: <b>token</b><br>
2312   * Path: <b>ResearchStudy.jurisdiction</b><br>
2313   * </p>
2314   */
2315  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
2316
2317 /**
2318   * Search parameter: <b>focus</b>
2319   * <p>
2320   * Description: <b>Drugs, devices, conditions, etc. under study</b><br>
2321   * Type: <b>token</b><br>
2322   * Path: <b>ResearchStudy.focus</b><br>
2323   * </p>
2324   */
2325  @SearchParamDefinition(name="focus", path="ResearchStudy.focus", description="Drugs, devices, conditions, etc. under study", type="token" )
2326  public static final String SP_FOCUS = "focus";
2327 /**
2328   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
2329   * <p>
2330   * Description: <b>Drugs, devices, conditions, etc. under study</b><br>
2331   * Type: <b>token</b><br>
2332   * Path: <b>ResearchStudy.focus</b><br>
2333   * </p>
2334   */
2335  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FOCUS);
2336
2337 /**
2338   * Search parameter: <b>principalinvestigator</b>
2339   * <p>
2340   * Description: <b>The individual responsible for the study</b><br>
2341   * Type: <b>reference</b><br>
2342   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2343   * </p>
2344   */
2345  @SearchParamDefinition(name="principalinvestigator", path="ResearchStudy.principalInvestigator", description="The individual responsible for the study", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class } )
2346  public static final String SP_PRINCIPALINVESTIGATOR = "principalinvestigator";
2347 /**
2348   * <b>Fluent Client</b> search parameter constant for <b>principalinvestigator</b>
2349   * <p>
2350   * Description: <b>The individual responsible for the study</b><br>
2351   * Type: <b>reference</b><br>
2352   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2353   * </p>
2354   */
2355  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRINCIPALINVESTIGATOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRINCIPALINVESTIGATOR);
2356
2357/**
2358   * Constant for fluent queries to be used to add include statements. Specifies
2359   * the path value of "<b>ResearchStudy:principalinvestigator</b>".
2360   */
2361  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRINCIPALINVESTIGATOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:principalinvestigator").toLocked();
2362
2363 /**
2364   * Search parameter: <b>title</b>
2365   * <p>
2366   * Description: <b>Name for this study</b><br>
2367   * Type: <b>string</b><br>
2368   * Path: <b>ResearchStudy.title</b><br>
2369   * </p>
2370   */
2371  @SearchParamDefinition(name="title", path="ResearchStudy.title", description="Name for this study", type="string" )
2372  public static final String SP_TITLE = "title";
2373 /**
2374   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2375   * <p>
2376   * Description: <b>Name for this study</b><br>
2377   * Type: <b>string</b><br>
2378   * Path: <b>ResearchStudy.title</b><br>
2379   * </p>
2380   */
2381  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2382
2383 /**
2384   * Search parameter: <b>protocol</b>
2385   * <p>
2386   * Description: <b>Steps followed in executing study</b><br>
2387   * Type: <b>reference</b><br>
2388   * Path: <b>ResearchStudy.protocol</b><br>
2389   * </p>
2390   */
2391  @SearchParamDefinition(name="protocol", path="ResearchStudy.protocol", description="Steps followed in executing study", type="reference", target={PlanDefinition.class } )
2392  public static final String SP_PROTOCOL = "protocol";
2393 /**
2394   * <b>Fluent Client</b> search parameter constant for <b>protocol</b>
2395   * <p>
2396   * Description: <b>Steps followed in executing study</b><br>
2397   * Type: <b>reference</b><br>
2398   * Path: <b>ResearchStudy.protocol</b><br>
2399   * </p>
2400   */
2401  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROTOCOL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROTOCOL);
2402
2403/**
2404   * Constant for fluent queries to be used to add include statements. Specifies
2405   * the path value of "<b>ResearchStudy:protocol</b>".
2406   */
2407  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROTOCOL = new ca.uhn.fhir.model.api.Include("ResearchStudy:protocol").toLocked();
2408
2409 /**
2410   * Search parameter: <b>site</b>
2411   * <p>
2412   * Description: <b>Location involved in study execution</b><br>
2413   * Type: <b>reference</b><br>
2414   * Path: <b>ResearchStudy.site</b><br>
2415   * </p>
2416   */
2417  @SearchParamDefinition(name="site", path="ResearchStudy.site", description="Location involved in study execution", type="reference", target={Location.class } )
2418  public static final String SP_SITE = "site";
2419 /**
2420   * <b>Fluent Client</b> search parameter constant for <b>site</b>
2421   * <p>
2422   * Description: <b>Location involved in study execution</b><br>
2423   * Type: <b>reference</b><br>
2424   * Path: <b>ResearchStudy.site</b><br>
2425   * </p>
2426   */
2427  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SITE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SITE);
2428
2429/**
2430   * Constant for fluent queries to be used to add include statements. Specifies
2431   * the path value of "<b>ResearchStudy:site</b>".
2432   */
2433  public static final ca.uhn.fhir.model.api.Include INCLUDE_SITE = new ca.uhn.fhir.model.api.Include("ResearchStudy:site").toLocked();
2434
2435 /**
2436   * Search parameter: <b>category</b>
2437   * <p>
2438   * Description: <b>Classifications for the study</b><br>
2439   * Type: <b>token</b><br>
2440   * Path: <b>ResearchStudy.category</b><br>
2441   * </p>
2442   */
2443  @SearchParamDefinition(name="category", path="ResearchStudy.category", description="Classifications for the study", type="token" )
2444  public static final String SP_CATEGORY = "category";
2445 /**
2446   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2447   * <p>
2448   * Description: <b>Classifications for the study</b><br>
2449   * Type: <b>token</b><br>
2450   * Path: <b>ResearchStudy.category</b><br>
2451   * </p>
2452   */
2453  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2454
2455 /**
2456   * Search parameter: <b>keyword</b>
2457   * <p>
2458   * Description: <b>Used to search for the study</b><br>
2459   * Type: <b>token</b><br>
2460   * Path: <b>ResearchStudy.keyword</b><br>
2461   * </p>
2462   */
2463  @SearchParamDefinition(name="keyword", path="ResearchStudy.keyword", description="Used to search for the study", type="token" )
2464  public static final String SP_KEYWORD = "keyword";
2465 /**
2466   * <b>Fluent Client</b> search parameter constant for <b>keyword</b>
2467   * <p>
2468   * Description: <b>Used to search for the study</b><br>
2469   * Type: <b>token</b><br>
2470   * Path: <b>ResearchStudy.keyword</b><br>
2471   * </p>
2472   */
2473  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KEYWORD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KEYWORD);
2474
2475 /**
2476   * Search parameter: <b>status</b>
2477   * <p>
2478   * Description: <b>draft | in-progress | suspended | stopped | completed | entered-in-error</b><br>
2479   * Type: <b>token</b><br>
2480   * Path: <b>ResearchStudy.status</b><br>
2481   * </p>
2482   */
2483  @SearchParamDefinition(name="status", path="ResearchStudy.status", description="draft | in-progress | suspended | stopped | completed | entered-in-error", type="token" )
2484  public static final String SP_STATUS = "status";
2485 /**
2486   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2487   * <p>
2488   * Description: <b>draft | in-progress | suspended | stopped | completed | entered-in-error</b><br>
2489   * Type: <b>token</b><br>
2490   * Path: <b>ResearchStudy.status</b><br>
2491   * </p>
2492   */
2493  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2494
2495
2496}