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