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     * @return {@link #partOf} (A larger research study of which this particular study is a component or step.)
858     */
859    public List<Reference> getPartOf() { 
860      if (this.partOf == null)
861        this.partOf = new ArrayList<Reference>();
862      return this.partOf;
863    }
864
865    /**
866     * @return Returns a reference to <code>this</code> for easy method chaining
867     */
868    public ResearchStudy setPartOf(List<Reference> thePartOf) { 
869      this.partOf = thePartOf;
870      return this;
871    }
872
873    public boolean hasPartOf() { 
874      if (this.partOf == null)
875        return false;
876      for (Reference item : this.partOf)
877        if (!item.isEmpty())
878          return true;
879      return false;
880    }
881
882    public Reference addPartOf() { //3
883      Reference t = new Reference();
884      if (this.partOf == null)
885        this.partOf = new ArrayList<Reference>();
886      this.partOf.add(t);
887      return t;
888    }
889
890    public ResearchStudy addPartOf(Reference t) { //3
891      if (t == null)
892        return this;
893      if (this.partOf == null)
894        this.partOf = new ArrayList<Reference>();
895      this.partOf.add(t);
896      return this;
897    }
898
899    /**
900     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist
901     */
902    public Reference getPartOfFirstRep() { 
903      if (getPartOf().isEmpty()) {
904        addPartOf();
905      }
906      return getPartOf().get(0);
907    }
908
909    /**
910     * @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
911     */
912    public Enumeration<ResearchStudyStatus> getStatusElement() { 
913      if (this.status == null)
914        if (Configuration.errorOnAutoCreate())
915          throw new Error("Attempt to auto-create ResearchStudy.status");
916        else if (Configuration.doAutoCreate())
917          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory()); // bb
918      return this.status;
919    }
920
921    public boolean hasStatusElement() { 
922      return this.status != null && !this.status.isEmpty();
923    }
924
925    public boolean hasStatus() { 
926      return this.status != null && !this.status.isEmpty();
927    }
928
929    /**
930     * @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
931     */
932    public ResearchStudy setStatusElement(Enumeration<ResearchStudyStatus> value) { 
933      this.status = value;
934      return this;
935    }
936
937    /**
938     * @return The current state of the study.
939     */
940    public ResearchStudyStatus getStatus() { 
941      return this.status == null ? null : this.status.getValue();
942    }
943
944    /**
945     * @param value The current state of the study.
946     */
947    public ResearchStudy setStatus(ResearchStudyStatus value) { 
948        if (this.status == null)
949          this.status = new Enumeration<ResearchStudyStatus>(new ResearchStudyStatusEnumFactory());
950        this.status.setValue(value);
951      return this;
952    }
953
954    /**
955     * @return {@link #category} (Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.)
956     */
957    public List<CodeableConcept> getCategory() { 
958      if (this.category == null)
959        this.category = new ArrayList<CodeableConcept>();
960      return this.category;
961    }
962
963    /**
964     * @return Returns a reference to <code>this</code> for easy method chaining
965     */
966    public ResearchStudy setCategory(List<CodeableConcept> theCategory) { 
967      this.category = theCategory;
968      return this;
969    }
970
971    public boolean hasCategory() { 
972      if (this.category == null)
973        return false;
974      for (CodeableConcept item : this.category)
975        if (!item.isEmpty())
976          return true;
977      return false;
978    }
979
980    public CodeableConcept addCategory() { //3
981      CodeableConcept t = new CodeableConcept();
982      if (this.category == null)
983        this.category = new ArrayList<CodeableConcept>();
984      this.category.add(t);
985      return t;
986    }
987
988    public ResearchStudy addCategory(CodeableConcept t) { //3
989      if (t == null)
990        return this;
991      if (this.category == null)
992        this.category = new ArrayList<CodeableConcept>();
993      this.category.add(t);
994      return this;
995    }
996
997    /**
998     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
999     */
1000    public CodeableConcept getCategoryFirstRep() { 
1001      if (getCategory().isEmpty()) {
1002        addCategory();
1003      }
1004      return getCategory().get(0);
1005    }
1006
1007    /**
1008     * @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.)
1009     */
1010    public List<CodeableConcept> getFocus() { 
1011      if (this.focus == null)
1012        this.focus = new ArrayList<CodeableConcept>();
1013      return this.focus;
1014    }
1015
1016    /**
1017     * @return Returns a reference to <code>this</code> for easy method chaining
1018     */
1019    public ResearchStudy setFocus(List<CodeableConcept> theFocus) { 
1020      this.focus = theFocus;
1021      return this;
1022    }
1023
1024    public boolean hasFocus() { 
1025      if (this.focus == null)
1026        return false;
1027      for (CodeableConcept item : this.focus)
1028        if (!item.isEmpty())
1029          return true;
1030      return false;
1031    }
1032
1033    public CodeableConcept addFocus() { //3
1034      CodeableConcept t = new CodeableConcept();
1035      if (this.focus == null)
1036        this.focus = new ArrayList<CodeableConcept>();
1037      this.focus.add(t);
1038      return t;
1039    }
1040
1041    public ResearchStudy addFocus(CodeableConcept t) { //3
1042      if (t == null)
1043        return this;
1044      if (this.focus == null)
1045        this.focus = new ArrayList<CodeableConcept>();
1046      this.focus.add(t);
1047      return this;
1048    }
1049
1050    /**
1051     * @return The first repetition of repeating field {@link #focus}, creating it if it does not already exist
1052     */
1053    public CodeableConcept getFocusFirstRep() { 
1054      if (getFocus().isEmpty()) {
1055        addFocus();
1056      }
1057      return getFocus().get(0);
1058    }
1059
1060    /**
1061     * @return {@link #contact} (Contact details to assist a user in learning more about or engaging with the study.)
1062     */
1063    public List<ContactDetail> getContact() { 
1064      if (this.contact == null)
1065        this.contact = new ArrayList<ContactDetail>();
1066      return this.contact;
1067    }
1068
1069    /**
1070     * @return Returns a reference to <code>this</code> for easy method chaining
1071     */
1072    public ResearchStudy setContact(List<ContactDetail> theContact) { 
1073      this.contact = theContact;
1074      return this;
1075    }
1076
1077    public boolean hasContact() { 
1078      if (this.contact == null)
1079        return false;
1080      for (ContactDetail item : this.contact)
1081        if (!item.isEmpty())
1082          return true;
1083      return false;
1084    }
1085
1086    public ContactDetail addContact() { //3
1087      ContactDetail t = new ContactDetail();
1088      if (this.contact == null)
1089        this.contact = new ArrayList<ContactDetail>();
1090      this.contact.add(t);
1091      return t;
1092    }
1093
1094    public ResearchStudy addContact(ContactDetail t) { //3
1095      if (t == null)
1096        return this;
1097      if (this.contact == null)
1098        this.contact = new ArrayList<ContactDetail>();
1099      this.contact.add(t);
1100      return this;
1101    }
1102
1103    /**
1104     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
1105     */
1106    public ContactDetail getContactFirstRep() { 
1107      if (getContact().isEmpty()) {
1108        addContact();
1109      }
1110      return getContact().get(0);
1111    }
1112
1113    /**
1114     * @return {@link #relatedArtifact} (Citations, references and other related documents.)
1115     */
1116    public List<RelatedArtifact> getRelatedArtifact() { 
1117      if (this.relatedArtifact == null)
1118        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1119      return this.relatedArtifact;
1120    }
1121
1122    /**
1123     * @return Returns a reference to <code>this</code> for easy method chaining
1124     */
1125    public ResearchStudy setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
1126      this.relatedArtifact = theRelatedArtifact;
1127      return this;
1128    }
1129
1130    public boolean hasRelatedArtifact() { 
1131      if (this.relatedArtifact == null)
1132        return false;
1133      for (RelatedArtifact item : this.relatedArtifact)
1134        if (!item.isEmpty())
1135          return true;
1136      return false;
1137    }
1138
1139    public RelatedArtifact addRelatedArtifact() { //3
1140      RelatedArtifact t = new RelatedArtifact();
1141      if (this.relatedArtifact == null)
1142        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1143      this.relatedArtifact.add(t);
1144      return t;
1145    }
1146
1147    public ResearchStudy addRelatedArtifact(RelatedArtifact t) { //3
1148      if (t == null)
1149        return this;
1150      if (this.relatedArtifact == null)
1151        this.relatedArtifact = new ArrayList<RelatedArtifact>();
1152      this.relatedArtifact.add(t);
1153      return this;
1154    }
1155
1156    /**
1157     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist
1158     */
1159    public RelatedArtifact getRelatedArtifactFirstRep() { 
1160      if (getRelatedArtifact().isEmpty()) {
1161        addRelatedArtifact();
1162      }
1163      return getRelatedArtifact().get(0);
1164    }
1165
1166    /**
1167     * @return {@link #keyword} (Key terms to aid in searching for or filtering the study.)
1168     */
1169    public List<CodeableConcept> getKeyword() { 
1170      if (this.keyword == null)
1171        this.keyword = new ArrayList<CodeableConcept>();
1172      return this.keyword;
1173    }
1174
1175    /**
1176     * @return Returns a reference to <code>this</code> for easy method chaining
1177     */
1178    public ResearchStudy setKeyword(List<CodeableConcept> theKeyword) { 
1179      this.keyword = theKeyword;
1180      return this;
1181    }
1182
1183    public boolean hasKeyword() { 
1184      if (this.keyword == null)
1185        return false;
1186      for (CodeableConcept item : this.keyword)
1187        if (!item.isEmpty())
1188          return true;
1189      return false;
1190    }
1191
1192    public CodeableConcept addKeyword() { //3
1193      CodeableConcept t = new CodeableConcept();
1194      if (this.keyword == null)
1195        this.keyword = new ArrayList<CodeableConcept>();
1196      this.keyword.add(t);
1197      return t;
1198    }
1199
1200    public ResearchStudy addKeyword(CodeableConcept t) { //3
1201      if (t == null)
1202        return this;
1203      if (this.keyword == null)
1204        this.keyword = new ArrayList<CodeableConcept>();
1205      this.keyword.add(t);
1206      return this;
1207    }
1208
1209    /**
1210     * @return The first repetition of repeating field {@link #keyword}, creating it if it does not already exist
1211     */
1212    public CodeableConcept getKeywordFirstRep() { 
1213      if (getKeyword().isEmpty()) {
1214        addKeyword();
1215      }
1216      return getKeyword().get(0);
1217    }
1218
1219    /**
1220     * @return {@link #jurisdiction} (Indicates a country, state or other region where the study is taking place.)
1221     */
1222    public List<CodeableConcept> getJurisdiction() { 
1223      if (this.jurisdiction == null)
1224        this.jurisdiction = new ArrayList<CodeableConcept>();
1225      return this.jurisdiction;
1226    }
1227
1228    /**
1229     * @return Returns a reference to <code>this</code> for easy method chaining
1230     */
1231    public ResearchStudy setJurisdiction(List<CodeableConcept> theJurisdiction) { 
1232      this.jurisdiction = theJurisdiction;
1233      return this;
1234    }
1235
1236    public boolean hasJurisdiction() { 
1237      if (this.jurisdiction == null)
1238        return false;
1239      for (CodeableConcept item : this.jurisdiction)
1240        if (!item.isEmpty())
1241          return true;
1242      return false;
1243    }
1244
1245    public CodeableConcept addJurisdiction() { //3
1246      CodeableConcept t = new CodeableConcept();
1247      if (this.jurisdiction == null)
1248        this.jurisdiction = new ArrayList<CodeableConcept>();
1249      this.jurisdiction.add(t);
1250      return t;
1251    }
1252
1253    public ResearchStudy addJurisdiction(CodeableConcept t) { //3
1254      if (t == null)
1255        return this;
1256      if (this.jurisdiction == null)
1257        this.jurisdiction = new ArrayList<CodeableConcept>();
1258      this.jurisdiction.add(t);
1259      return this;
1260    }
1261
1262    /**
1263     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
1264     */
1265    public CodeableConcept getJurisdictionFirstRep() { 
1266      if (getJurisdiction().isEmpty()) {
1267        addJurisdiction();
1268      }
1269      return getJurisdiction().get(0);
1270    }
1271
1272    /**
1273     * @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
1274     */
1275    public MarkdownType getDescriptionElement() { 
1276      if (this.description == null)
1277        if (Configuration.errorOnAutoCreate())
1278          throw new Error("Attempt to auto-create ResearchStudy.description");
1279        else if (Configuration.doAutoCreate())
1280          this.description = new MarkdownType(); // bb
1281      return this.description;
1282    }
1283
1284    public boolean hasDescriptionElement() { 
1285      return this.description != null && !this.description.isEmpty();
1286    }
1287
1288    public boolean hasDescription() { 
1289      return this.description != null && !this.description.isEmpty();
1290    }
1291
1292    /**
1293     * @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
1294     */
1295    public ResearchStudy setDescriptionElement(MarkdownType value) { 
1296      this.description = value;
1297      return this;
1298    }
1299
1300    /**
1301     * @return A full description of how the study is being conducted.
1302     */
1303    public String getDescription() { 
1304      return this.description == null ? null : this.description.getValue();
1305    }
1306
1307    /**
1308     * @param value A full description of how the study is being conducted.
1309     */
1310    public ResearchStudy setDescription(String value) { 
1311      if (value == null)
1312        this.description = null;
1313      else {
1314        if (this.description == null)
1315          this.description = new MarkdownType();
1316        this.description.setValue(value);
1317      }
1318      return this;
1319    }
1320
1321    /**
1322     * @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".)
1323     */
1324    public List<Reference> getEnrollment() { 
1325      if (this.enrollment == null)
1326        this.enrollment = new ArrayList<Reference>();
1327      return this.enrollment;
1328    }
1329
1330    /**
1331     * @return Returns a reference to <code>this</code> for easy method chaining
1332     */
1333    public ResearchStudy setEnrollment(List<Reference> theEnrollment) { 
1334      this.enrollment = theEnrollment;
1335      return this;
1336    }
1337
1338    public boolean hasEnrollment() { 
1339      if (this.enrollment == null)
1340        return false;
1341      for (Reference item : this.enrollment)
1342        if (!item.isEmpty())
1343          return true;
1344      return false;
1345    }
1346
1347    public Reference addEnrollment() { //3
1348      Reference t = new Reference();
1349      if (this.enrollment == null)
1350        this.enrollment = new ArrayList<Reference>();
1351      this.enrollment.add(t);
1352      return t;
1353    }
1354
1355    public ResearchStudy addEnrollment(Reference t) { //3
1356      if (t == null)
1357        return this;
1358      if (this.enrollment == null)
1359        this.enrollment = new ArrayList<Reference>();
1360      this.enrollment.add(t);
1361      return this;
1362    }
1363
1364    /**
1365     * @return The first repetition of repeating field {@link #enrollment}, creating it if it does not already exist
1366     */
1367    public Reference getEnrollmentFirstRep() { 
1368      if (getEnrollment().isEmpty()) {
1369        addEnrollment();
1370      }
1371      return getEnrollment().get(0);
1372    }
1373
1374    /**
1375     * @return {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1376     */
1377    public Period getPeriod() { 
1378      if (this.period == null)
1379        if (Configuration.errorOnAutoCreate())
1380          throw new Error("Attempt to auto-create ResearchStudy.period");
1381        else if (Configuration.doAutoCreate())
1382          this.period = new Period(); // cc
1383      return this.period;
1384    }
1385
1386    public boolean hasPeriod() { 
1387      return this.period != null && !this.period.isEmpty();
1388    }
1389
1390    /**
1391     * @param value {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
1392     */
1393    public ResearchStudy setPeriod(Period value)  { 
1394      this.period = value;
1395      return this;
1396    }
1397
1398    /**
1399     * @return {@link #sponsor} (The organization responsible for the execution of the study.)
1400     */
1401    public Reference getSponsor() { 
1402      if (this.sponsor == null)
1403        if (Configuration.errorOnAutoCreate())
1404          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1405        else if (Configuration.doAutoCreate())
1406          this.sponsor = new Reference(); // cc
1407      return this.sponsor;
1408    }
1409
1410    public boolean hasSponsor() { 
1411      return this.sponsor != null && !this.sponsor.isEmpty();
1412    }
1413
1414    /**
1415     * @param value {@link #sponsor} (The organization responsible for the execution of the study.)
1416     */
1417    public ResearchStudy setSponsor(Reference value)  { 
1418      this.sponsor = value;
1419      return this;
1420    }
1421
1422    /**
1423     * @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.)
1424     */
1425    public Organization getSponsorTarget() { 
1426      if (this.sponsorTarget == null)
1427        if (Configuration.errorOnAutoCreate())
1428          throw new Error("Attempt to auto-create ResearchStudy.sponsor");
1429        else if (Configuration.doAutoCreate())
1430          this.sponsorTarget = new Organization(); // aa
1431      return this.sponsorTarget;
1432    }
1433
1434    /**
1435     * @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.)
1436     */
1437    public ResearchStudy setSponsorTarget(Organization value) { 
1438      this.sponsorTarget = value;
1439      return this;
1440    }
1441
1442    /**
1443     * @return {@link #principalInvestigator} (Indicates the individual who has primary oversite of the execution of the study.)
1444     */
1445    public Reference getPrincipalInvestigator() { 
1446      if (this.principalInvestigator == null)
1447        if (Configuration.errorOnAutoCreate())
1448          throw new Error("Attempt to auto-create ResearchStudy.principalInvestigator");
1449        else if (Configuration.doAutoCreate())
1450          this.principalInvestigator = new Reference(); // cc
1451      return this.principalInvestigator;
1452    }
1453
1454    public boolean hasPrincipalInvestigator() { 
1455      return this.principalInvestigator != null && !this.principalInvestigator.isEmpty();
1456    }
1457
1458    /**
1459     * @param value {@link #principalInvestigator} (Indicates the individual who has primary oversite of the execution of the study.)
1460     */
1461    public ResearchStudy setPrincipalInvestigator(Reference value)  { 
1462      this.principalInvestigator = value;
1463      return this;
1464    }
1465
1466    /**
1467     * @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.)
1468     */
1469    public Practitioner getPrincipalInvestigatorTarget() { 
1470      if (this.principalInvestigatorTarget == null)
1471        if (Configuration.errorOnAutoCreate())
1472          throw new Error("Attempt to auto-create ResearchStudy.principalInvestigator");
1473        else if (Configuration.doAutoCreate())
1474          this.principalInvestigatorTarget = new Practitioner(); // aa
1475      return this.principalInvestigatorTarget;
1476    }
1477
1478    /**
1479     * @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.)
1480     */
1481    public ResearchStudy setPrincipalInvestigatorTarget(Practitioner value) { 
1482      this.principalInvestigatorTarget = value;
1483      return this;
1484    }
1485
1486    /**
1487     * @return {@link #site} (Clinic, hospital or other healthcare location that is participating in the study.)
1488     */
1489    public List<Reference> getSite() { 
1490      if (this.site == null)
1491        this.site = new ArrayList<Reference>();
1492      return this.site;
1493    }
1494
1495    /**
1496     * @return Returns a reference to <code>this</code> for easy method chaining
1497     */
1498    public ResearchStudy setSite(List<Reference> theSite) { 
1499      this.site = theSite;
1500      return this;
1501    }
1502
1503    public boolean hasSite() { 
1504      if (this.site == null)
1505        return false;
1506      for (Reference item : this.site)
1507        if (!item.isEmpty())
1508          return true;
1509      return false;
1510    }
1511
1512    public Reference addSite() { //3
1513      Reference t = new Reference();
1514      if (this.site == null)
1515        this.site = new ArrayList<Reference>();
1516      this.site.add(t);
1517      return t;
1518    }
1519
1520    public ResearchStudy addSite(Reference t) { //3
1521      if (t == null)
1522        return this;
1523      if (this.site == null)
1524        this.site = new ArrayList<Reference>();
1525      this.site.add(t);
1526      return this;
1527    }
1528
1529    /**
1530     * @return The first repetition of repeating field {@link #site}, creating it if it does not already exist
1531     */
1532    public Reference getSiteFirstRep() { 
1533      if (getSite().isEmpty()) {
1534        addSite();
1535      }
1536      return getSite().get(0);
1537    }
1538
1539    /**
1540     * @return {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
1541     */
1542    public CodeableConcept getReasonStopped() { 
1543      if (this.reasonStopped == null)
1544        if (Configuration.errorOnAutoCreate())
1545          throw new Error("Attempt to auto-create ResearchStudy.reasonStopped");
1546        else if (Configuration.doAutoCreate())
1547          this.reasonStopped = new CodeableConcept(); // cc
1548      return this.reasonStopped;
1549    }
1550
1551    public boolean hasReasonStopped() { 
1552      return this.reasonStopped != null && !this.reasonStopped.isEmpty();
1553    }
1554
1555    /**
1556     * @param value {@link #reasonStopped} (A description and/or code explaining the premature termination of the study.)
1557     */
1558    public ResearchStudy setReasonStopped(CodeableConcept value)  { 
1559      this.reasonStopped = value;
1560      return this;
1561    }
1562
1563    /**
1564     * @return {@link #note} (Comments made about the event by the performer, subject or other participants.)
1565     */
1566    public List<Annotation> getNote() { 
1567      if (this.note == null)
1568        this.note = new ArrayList<Annotation>();
1569      return this.note;
1570    }
1571
1572    /**
1573     * @return Returns a reference to <code>this</code> for easy method chaining
1574     */
1575    public ResearchStudy setNote(List<Annotation> theNote) { 
1576      this.note = theNote;
1577      return this;
1578    }
1579
1580    public boolean hasNote() { 
1581      if (this.note == null)
1582        return false;
1583      for (Annotation item : this.note)
1584        if (!item.isEmpty())
1585          return true;
1586      return false;
1587    }
1588
1589    public Annotation addNote() { //3
1590      Annotation t = new Annotation();
1591      if (this.note == null)
1592        this.note = new ArrayList<Annotation>();
1593      this.note.add(t);
1594      return t;
1595    }
1596
1597    public ResearchStudy addNote(Annotation t) { //3
1598      if (t == null)
1599        return this;
1600      if (this.note == null)
1601        this.note = new ArrayList<Annotation>();
1602      this.note.add(t);
1603      return this;
1604    }
1605
1606    /**
1607     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1608     */
1609    public Annotation getNoteFirstRep() { 
1610      if (getNote().isEmpty()) {
1611        addNote();
1612      }
1613      return getNote().get(0);
1614    }
1615
1616    /**
1617     * @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.)
1618     */
1619    public List<ResearchStudyArmComponent> getArm() { 
1620      if (this.arm == null)
1621        this.arm = new ArrayList<ResearchStudyArmComponent>();
1622      return this.arm;
1623    }
1624
1625    /**
1626     * @return Returns a reference to <code>this</code> for easy method chaining
1627     */
1628    public ResearchStudy setArm(List<ResearchStudyArmComponent> theArm) { 
1629      this.arm = theArm;
1630      return this;
1631    }
1632
1633    public boolean hasArm() { 
1634      if (this.arm == null)
1635        return false;
1636      for (ResearchStudyArmComponent item : this.arm)
1637        if (!item.isEmpty())
1638          return true;
1639      return false;
1640    }
1641
1642    public ResearchStudyArmComponent addArm() { //3
1643      ResearchStudyArmComponent t = new ResearchStudyArmComponent();
1644      if (this.arm == null)
1645        this.arm = new ArrayList<ResearchStudyArmComponent>();
1646      this.arm.add(t);
1647      return t;
1648    }
1649
1650    public ResearchStudy addArm(ResearchStudyArmComponent t) { //3
1651      if (t == null)
1652        return this;
1653      if (this.arm == null)
1654        this.arm = new ArrayList<ResearchStudyArmComponent>();
1655      this.arm.add(t);
1656      return this;
1657    }
1658
1659    /**
1660     * @return The first repetition of repeating field {@link #arm}, creating it if it does not already exist
1661     */
1662    public ResearchStudyArmComponent getArmFirstRep() { 
1663      if (getArm().isEmpty()) {
1664        addArm();
1665      }
1666      return getArm().get(0);
1667    }
1668
1669      protected void listChildren(List<Property> children) {
1670        super.listChildren(children);
1671        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));
1672        children.add(new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title));
1673        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));
1674        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));
1675        children.add(new Property("status", "code", "The current state of the study.", 0, 1, status));
1676        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));
1677        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));
1678        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));
1679        children.add(new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
1680        children.add(new Property("keyword", "CodeableConcept", "Key terms to aid in searching for or filtering the study.", 0, java.lang.Integer.MAX_VALUE, keyword));
1681        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));
1682        children.add(new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description));
1683        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));
1684        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));
1685        children.add(new Property("sponsor", "Reference(Organization)", "The organization responsible for the execution of the study.", 0, 1, sponsor));
1686        children.add(new Property("principalInvestigator", "Reference(Practitioner)", "Indicates the individual who has primary oversite of the execution of the study.", 0, 1, principalInvestigator));
1687        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));
1688        children.add(new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped));
1689        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));
1690        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));
1691      }
1692
1693      @Override
1694      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1695        switch (_hash) {
1696        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);
1697        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive user-friendly label for the study.", 0, 1, title);
1698        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);
1699        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);
1700        case -892481550: /*status*/  return new Property("status", "code", "The current state of the study.", 0, 1, status);
1701        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);
1702        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);
1703        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);
1704        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
1705        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);
1706        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);
1707        case -1724546052: /*description*/  return new Property("description", "markdown", "A full description of how the study is being conducted.", 0, 1, description);
1708        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);
1709        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);
1710        case -1998892262: /*sponsor*/  return new Property("sponsor", "Reference(Organization)", "The organization responsible for the execution of the study.", 0, 1, sponsor);
1711        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);
1712        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);
1713        case 1181369065: /*reasonStopped*/  return new Property("reasonStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, reasonStopped);
1714        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);
1715        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);
1716        default: return super.getNamedProperty(_hash, _name, _checkValid);
1717        }
1718
1719      }
1720
1721      @Override
1722      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1723        switch (hash) {
1724        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1725        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1726        case -989163880: /*protocol*/ return this.protocol == null ? new Base[0] : this.protocol.toArray(new Base[this.protocol.size()]); // Reference
1727        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
1728        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ResearchStudyStatus>
1729        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1730        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // CodeableConcept
1731        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
1732        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
1733        case -814408215: /*keyword*/ return this.keyword == null ? new Base[0] : this.keyword.toArray(new Base[this.keyword.size()]); // CodeableConcept
1734        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
1735        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1736        case 116089604: /*enrollment*/ return this.enrollment == null ? new Base[0] : this.enrollment.toArray(new Base[this.enrollment.size()]); // Reference
1737        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1738        case -1998892262: /*sponsor*/ return this.sponsor == null ? new Base[0] : new Base[] {this.sponsor}; // Reference
1739        case 1437117175: /*principalInvestigator*/ return this.principalInvestigator == null ? new Base[0] : new Base[] {this.principalInvestigator}; // Reference
1740        case 3530567: /*site*/ return this.site == null ? new Base[0] : this.site.toArray(new Base[this.site.size()]); // Reference
1741        case 1181369065: /*reasonStopped*/ return this.reasonStopped == null ? new Base[0] : new Base[] {this.reasonStopped}; // CodeableConcept
1742        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1743        case 96860: /*arm*/ return this.arm == null ? new Base[0] : this.arm.toArray(new Base[this.arm.size()]); // ResearchStudyArmComponent
1744        default: return super.getProperty(hash, name, checkValid);
1745        }
1746
1747      }
1748
1749      @Override
1750      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1751        switch (hash) {
1752        case -1618432855: // identifier
1753          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1754          return value;
1755        case 110371416: // title
1756          this.title = castToString(value); // StringType
1757          return value;
1758        case -989163880: // protocol
1759          this.getProtocol().add(castToReference(value)); // Reference
1760          return value;
1761        case -995410646: // partOf
1762          this.getPartOf().add(castToReference(value)); // Reference
1763          return value;
1764        case -892481550: // status
1765          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
1766          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
1767          return value;
1768        case 50511102: // category
1769          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
1770          return value;
1771        case 97604824: // focus
1772          this.getFocus().add(castToCodeableConcept(value)); // CodeableConcept
1773          return value;
1774        case 951526432: // contact
1775          this.getContact().add(castToContactDetail(value)); // ContactDetail
1776          return value;
1777        case 666807069: // relatedArtifact
1778          this.getRelatedArtifact().add(castToRelatedArtifact(value)); // RelatedArtifact
1779          return value;
1780        case -814408215: // keyword
1781          this.getKeyword().add(castToCodeableConcept(value)); // CodeableConcept
1782          return value;
1783        case -507075711: // jurisdiction
1784          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
1785          return value;
1786        case -1724546052: // description
1787          this.description = castToMarkdown(value); // MarkdownType
1788          return value;
1789        case 116089604: // enrollment
1790          this.getEnrollment().add(castToReference(value)); // Reference
1791          return value;
1792        case -991726143: // period
1793          this.period = castToPeriod(value); // Period
1794          return value;
1795        case -1998892262: // sponsor
1796          this.sponsor = castToReference(value); // Reference
1797          return value;
1798        case 1437117175: // principalInvestigator
1799          this.principalInvestigator = castToReference(value); // Reference
1800          return value;
1801        case 3530567: // site
1802          this.getSite().add(castToReference(value)); // Reference
1803          return value;
1804        case 1181369065: // reasonStopped
1805          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
1806          return value;
1807        case 3387378: // note
1808          this.getNote().add(castToAnnotation(value)); // Annotation
1809          return value;
1810        case 96860: // arm
1811          this.getArm().add((ResearchStudyArmComponent) value); // ResearchStudyArmComponent
1812          return value;
1813        default: return super.setProperty(hash, name, value);
1814        }
1815
1816      }
1817
1818      @Override
1819      public Base setProperty(String name, Base value) throws FHIRException {
1820        if (name.equals("identifier")) {
1821          this.getIdentifier().add(castToIdentifier(value));
1822        } else if (name.equals("title")) {
1823          this.title = castToString(value); // StringType
1824        } else if (name.equals("protocol")) {
1825          this.getProtocol().add(castToReference(value));
1826        } else if (name.equals("partOf")) {
1827          this.getPartOf().add(castToReference(value));
1828        } else if (name.equals("status")) {
1829          value = new ResearchStudyStatusEnumFactory().fromType(castToCode(value));
1830          this.status = (Enumeration) value; // Enumeration<ResearchStudyStatus>
1831        } else if (name.equals("category")) {
1832          this.getCategory().add(castToCodeableConcept(value));
1833        } else if (name.equals("focus")) {
1834          this.getFocus().add(castToCodeableConcept(value));
1835        } else if (name.equals("contact")) {
1836          this.getContact().add(castToContactDetail(value));
1837        } else if (name.equals("relatedArtifact")) {
1838          this.getRelatedArtifact().add(castToRelatedArtifact(value));
1839        } else if (name.equals("keyword")) {
1840          this.getKeyword().add(castToCodeableConcept(value));
1841        } else if (name.equals("jurisdiction")) {
1842          this.getJurisdiction().add(castToCodeableConcept(value));
1843        } else if (name.equals("description")) {
1844          this.description = castToMarkdown(value); // MarkdownType
1845        } else if (name.equals("enrollment")) {
1846          this.getEnrollment().add(castToReference(value));
1847        } else if (name.equals("period")) {
1848          this.period = castToPeriod(value); // Period
1849        } else if (name.equals("sponsor")) {
1850          this.sponsor = castToReference(value); // Reference
1851        } else if (name.equals("principalInvestigator")) {
1852          this.principalInvestigator = castToReference(value); // Reference
1853        } else if (name.equals("site")) {
1854          this.getSite().add(castToReference(value));
1855        } else if (name.equals("reasonStopped")) {
1856          this.reasonStopped = castToCodeableConcept(value); // CodeableConcept
1857        } else if (name.equals("note")) {
1858          this.getNote().add(castToAnnotation(value));
1859        } else if (name.equals("arm")) {
1860          this.getArm().add((ResearchStudyArmComponent) value);
1861        } else
1862          return super.setProperty(name, value);
1863        return value;
1864      }
1865
1866      @Override
1867      public Base makeProperty(int hash, String name) throws FHIRException {
1868        switch (hash) {
1869        case -1618432855:  return addIdentifier(); 
1870        case 110371416:  return getTitleElement();
1871        case -989163880:  return addProtocol(); 
1872        case -995410646:  return addPartOf(); 
1873        case -892481550:  return getStatusElement();
1874        case 50511102:  return addCategory(); 
1875        case 97604824:  return addFocus(); 
1876        case 951526432:  return addContact(); 
1877        case 666807069:  return addRelatedArtifact(); 
1878        case -814408215:  return addKeyword(); 
1879        case -507075711:  return addJurisdiction(); 
1880        case -1724546052:  return getDescriptionElement();
1881        case 116089604:  return addEnrollment(); 
1882        case -991726143:  return getPeriod(); 
1883        case -1998892262:  return getSponsor(); 
1884        case 1437117175:  return getPrincipalInvestigator(); 
1885        case 3530567:  return addSite(); 
1886        case 1181369065:  return getReasonStopped(); 
1887        case 3387378:  return addNote(); 
1888        case 96860:  return addArm(); 
1889        default: return super.makeProperty(hash, name);
1890        }
1891
1892      }
1893
1894      @Override
1895      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1896        switch (hash) {
1897        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1898        case 110371416: /*title*/ return new String[] {"string"};
1899        case -989163880: /*protocol*/ return new String[] {"Reference"};
1900        case -995410646: /*partOf*/ return new String[] {"Reference"};
1901        case -892481550: /*status*/ return new String[] {"code"};
1902        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1903        case 97604824: /*focus*/ return new String[] {"CodeableConcept"};
1904        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
1905        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
1906        case -814408215: /*keyword*/ return new String[] {"CodeableConcept"};
1907        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
1908        case -1724546052: /*description*/ return new String[] {"markdown"};
1909        case 116089604: /*enrollment*/ return new String[] {"Reference"};
1910        case -991726143: /*period*/ return new String[] {"Period"};
1911        case -1998892262: /*sponsor*/ return new String[] {"Reference"};
1912        case 1437117175: /*principalInvestigator*/ return new String[] {"Reference"};
1913        case 3530567: /*site*/ return new String[] {"Reference"};
1914        case 1181369065: /*reasonStopped*/ return new String[] {"CodeableConcept"};
1915        case 3387378: /*note*/ return new String[] {"Annotation"};
1916        case 96860: /*arm*/ return new String[] {};
1917        default: return super.getTypesForProperty(hash, name);
1918        }
1919
1920      }
1921
1922      @Override
1923      public Base addChild(String name) throws FHIRException {
1924        if (name.equals("identifier")) {
1925          return addIdentifier();
1926        }
1927        else if (name.equals("title")) {
1928          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.title");
1929        }
1930        else if (name.equals("protocol")) {
1931          return addProtocol();
1932        }
1933        else if (name.equals("partOf")) {
1934          return addPartOf();
1935        }
1936        else if (name.equals("status")) {
1937          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.status");
1938        }
1939        else if (name.equals("category")) {
1940          return addCategory();
1941        }
1942        else if (name.equals("focus")) {
1943          return addFocus();
1944        }
1945        else if (name.equals("contact")) {
1946          return addContact();
1947        }
1948        else if (name.equals("relatedArtifact")) {
1949          return addRelatedArtifact();
1950        }
1951        else if (name.equals("keyword")) {
1952          return addKeyword();
1953        }
1954        else if (name.equals("jurisdiction")) {
1955          return addJurisdiction();
1956        }
1957        else if (name.equals("description")) {
1958          throw new FHIRException("Cannot call addChild on a singleton property ResearchStudy.description");
1959        }
1960        else if (name.equals("enrollment")) {
1961          return addEnrollment();
1962        }
1963        else if (name.equals("period")) {
1964          this.period = new Period();
1965          return this.period;
1966        }
1967        else if (name.equals("sponsor")) {
1968          this.sponsor = new Reference();
1969          return this.sponsor;
1970        }
1971        else if (name.equals("principalInvestigator")) {
1972          this.principalInvestigator = new Reference();
1973          return this.principalInvestigator;
1974        }
1975        else if (name.equals("site")) {
1976          return addSite();
1977        }
1978        else if (name.equals("reasonStopped")) {
1979          this.reasonStopped = new CodeableConcept();
1980          return this.reasonStopped;
1981        }
1982        else if (name.equals("note")) {
1983          return addNote();
1984        }
1985        else if (name.equals("arm")) {
1986          return addArm();
1987        }
1988        else
1989          return super.addChild(name);
1990      }
1991
1992  public String fhirType() {
1993    return "ResearchStudy";
1994
1995  }
1996
1997      public ResearchStudy copy() {
1998        ResearchStudy dst = new ResearchStudy();
1999        copyValues(dst);
2000        if (identifier != null) {
2001          dst.identifier = new ArrayList<Identifier>();
2002          for (Identifier i : identifier)
2003            dst.identifier.add(i.copy());
2004        };
2005        dst.title = title == null ? null : title.copy();
2006        if (protocol != null) {
2007          dst.protocol = new ArrayList<Reference>();
2008          for (Reference i : protocol)
2009            dst.protocol.add(i.copy());
2010        };
2011        if (partOf != null) {
2012          dst.partOf = new ArrayList<Reference>();
2013          for (Reference i : partOf)
2014            dst.partOf.add(i.copy());
2015        };
2016        dst.status = status == null ? null : status.copy();
2017        if (category != null) {
2018          dst.category = new ArrayList<CodeableConcept>();
2019          for (CodeableConcept i : category)
2020            dst.category.add(i.copy());
2021        };
2022        if (focus != null) {
2023          dst.focus = new ArrayList<CodeableConcept>();
2024          for (CodeableConcept i : focus)
2025            dst.focus.add(i.copy());
2026        };
2027        if (contact != null) {
2028          dst.contact = new ArrayList<ContactDetail>();
2029          for (ContactDetail i : contact)
2030            dst.contact.add(i.copy());
2031        };
2032        if (relatedArtifact != null) {
2033          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
2034          for (RelatedArtifact i : relatedArtifact)
2035            dst.relatedArtifact.add(i.copy());
2036        };
2037        if (keyword != null) {
2038          dst.keyword = new ArrayList<CodeableConcept>();
2039          for (CodeableConcept i : keyword)
2040            dst.keyword.add(i.copy());
2041        };
2042        if (jurisdiction != null) {
2043          dst.jurisdiction = new ArrayList<CodeableConcept>();
2044          for (CodeableConcept i : jurisdiction)
2045            dst.jurisdiction.add(i.copy());
2046        };
2047        dst.description = description == null ? null : description.copy();
2048        if (enrollment != null) {
2049          dst.enrollment = new ArrayList<Reference>();
2050          for (Reference i : enrollment)
2051            dst.enrollment.add(i.copy());
2052        };
2053        dst.period = period == null ? null : period.copy();
2054        dst.sponsor = sponsor == null ? null : sponsor.copy();
2055        dst.principalInvestigator = principalInvestigator == null ? null : principalInvestigator.copy();
2056        if (site != null) {
2057          dst.site = new ArrayList<Reference>();
2058          for (Reference i : site)
2059            dst.site.add(i.copy());
2060        };
2061        dst.reasonStopped = reasonStopped == null ? null : reasonStopped.copy();
2062        if (note != null) {
2063          dst.note = new ArrayList<Annotation>();
2064          for (Annotation i : note)
2065            dst.note.add(i.copy());
2066        };
2067        if (arm != null) {
2068          dst.arm = new ArrayList<ResearchStudyArmComponent>();
2069          for (ResearchStudyArmComponent i : arm)
2070            dst.arm.add(i.copy());
2071        };
2072        return dst;
2073      }
2074
2075      protected ResearchStudy typedCopy() {
2076        return copy();
2077      }
2078
2079      @Override
2080      public boolean equalsDeep(Base other_) {
2081        if (!super.equalsDeep(other_))
2082          return false;
2083        if (!(other_ instanceof ResearchStudy))
2084          return false;
2085        ResearchStudy o = (ResearchStudy) other_;
2086        return compareDeep(identifier, o.identifier, true) && compareDeep(title, o.title, true) && compareDeep(protocol, o.protocol, true)
2087           && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true) && compareDeep(category, o.category, true)
2088           && compareDeep(focus, o.focus, true) && compareDeep(contact, o.contact, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
2089           && compareDeep(keyword, o.keyword, true) && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(description, o.description, true)
2090           && compareDeep(enrollment, o.enrollment, true) && compareDeep(period, o.period, true) && compareDeep(sponsor, o.sponsor, true)
2091           && compareDeep(principalInvestigator, o.principalInvestigator, true) && compareDeep(site, o.site, true)
2092           && compareDeep(reasonStopped, o.reasonStopped, true) && compareDeep(note, o.note, true) && compareDeep(arm, o.arm, true)
2093          ;
2094      }
2095
2096      @Override
2097      public boolean equalsShallow(Base other_) {
2098        if (!super.equalsShallow(other_))
2099          return false;
2100        if (!(other_ instanceof ResearchStudy))
2101          return false;
2102        ResearchStudy o = (ResearchStudy) other_;
2103        return compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(description, o.description, true)
2104          ;
2105      }
2106
2107      public boolean isEmpty() {
2108        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, title, protocol
2109          , partOf, status, category, focus, contact, relatedArtifact, keyword, jurisdiction
2110          , description, enrollment, period, sponsor, principalInvestigator, site, reasonStopped
2111          , note, arm);
2112      }
2113
2114  @Override
2115  public ResourceType getResourceType() {
2116    return ResourceType.ResearchStudy;
2117   }
2118
2119 /**
2120   * Search parameter: <b>date</b>
2121   * <p>
2122   * Description: <b>When the study began and ended</b><br>
2123   * Type: <b>date</b><br>
2124   * Path: <b>ResearchStudy.period</b><br>
2125   * </p>
2126   */
2127  @SearchParamDefinition(name="date", path="ResearchStudy.period", description="When the study began and ended", type="date" )
2128  public static final String SP_DATE = "date";
2129 /**
2130   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2131   * <p>
2132   * Description: <b>When the study began and ended</b><br>
2133   * Type: <b>date</b><br>
2134   * Path: <b>ResearchStudy.period</b><br>
2135   * </p>
2136   */
2137  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2138
2139 /**
2140   * Search parameter: <b>identifier</b>
2141   * <p>
2142   * Description: <b>Business Identifier for study</b><br>
2143   * Type: <b>token</b><br>
2144   * Path: <b>ResearchStudy.identifier</b><br>
2145   * </p>
2146   */
2147  @SearchParamDefinition(name="identifier", path="ResearchStudy.identifier", description="Business Identifier for study", type="token" )
2148  public static final String SP_IDENTIFIER = "identifier";
2149 /**
2150   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2151   * <p>
2152   * Description: <b>Business Identifier for study</b><br>
2153   * Type: <b>token</b><br>
2154   * Path: <b>ResearchStudy.identifier</b><br>
2155   * </p>
2156   */
2157  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2158
2159 /**
2160   * Search parameter: <b>partof</b>
2161   * <p>
2162   * Description: <b>Part of larger study</b><br>
2163   * Type: <b>reference</b><br>
2164   * Path: <b>ResearchStudy.partOf</b><br>
2165   * </p>
2166   */
2167  @SearchParamDefinition(name="partof", path="ResearchStudy.partOf", description="Part of larger study", type="reference", target={ResearchStudy.class } )
2168  public static final String SP_PARTOF = "partof";
2169 /**
2170   * <b>Fluent Client</b> search parameter constant for <b>partof</b>
2171   * <p>
2172   * Description: <b>Part of larger study</b><br>
2173   * Type: <b>reference</b><br>
2174   * Path: <b>ResearchStudy.partOf</b><br>
2175   * </p>
2176   */
2177  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTOF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTOF);
2178
2179/**
2180   * Constant for fluent queries to be used to add include statements. Specifies
2181   * the path value of "<b>ResearchStudy:partof</b>".
2182   */
2183  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTOF = new ca.uhn.fhir.model.api.Include("ResearchStudy:partof").toLocked();
2184
2185 /**
2186   * Search parameter: <b>sponsor</b>
2187   * <p>
2188   * Description: <b>Organization responsible for the study</b><br>
2189   * Type: <b>reference</b><br>
2190   * Path: <b>ResearchStudy.sponsor</b><br>
2191   * </p>
2192   */
2193  @SearchParamDefinition(name="sponsor", path="ResearchStudy.sponsor", description="Organization responsible for the study", type="reference", target={Organization.class } )
2194  public static final String SP_SPONSOR = "sponsor";
2195 /**
2196   * <b>Fluent Client</b> search parameter constant for <b>sponsor</b>
2197   * <p>
2198   * Description: <b>Organization responsible for the study</b><br>
2199   * Type: <b>reference</b><br>
2200   * Path: <b>ResearchStudy.sponsor</b><br>
2201   * </p>
2202   */
2203  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SPONSOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SPONSOR);
2204
2205/**
2206   * Constant for fluent queries to be used to add include statements. Specifies
2207   * the path value of "<b>ResearchStudy:sponsor</b>".
2208   */
2209  public static final ca.uhn.fhir.model.api.Include INCLUDE_SPONSOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:sponsor").toLocked();
2210
2211 /**
2212   * Search parameter: <b>jurisdiction</b>
2213   * <p>
2214   * Description: <b>Geographic region(s) for study</b><br>
2215   * Type: <b>token</b><br>
2216   * Path: <b>ResearchStudy.jurisdiction</b><br>
2217   * </p>
2218   */
2219  @SearchParamDefinition(name="jurisdiction", path="ResearchStudy.jurisdiction", description="Geographic region(s) for study", type="token" )
2220  public static final String SP_JURISDICTION = "jurisdiction";
2221 /**
2222   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
2223   * <p>
2224   * Description: <b>Geographic region(s) for study</b><br>
2225   * Type: <b>token</b><br>
2226   * Path: <b>ResearchStudy.jurisdiction</b><br>
2227   * </p>
2228   */
2229  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
2230
2231 /**
2232   * Search parameter: <b>focus</b>
2233   * <p>
2234   * Description: <b>Drugs, devices, conditions, etc. under study</b><br>
2235   * Type: <b>token</b><br>
2236   * Path: <b>ResearchStudy.focus</b><br>
2237   * </p>
2238   */
2239  @SearchParamDefinition(name="focus", path="ResearchStudy.focus", description="Drugs, devices, conditions, etc. under study", type="token" )
2240  public static final String SP_FOCUS = "focus";
2241 /**
2242   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
2243   * <p>
2244   * Description: <b>Drugs, devices, conditions, etc. under study</b><br>
2245   * Type: <b>token</b><br>
2246   * Path: <b>ResearchStudy.focus</b><br>
2247   * </p>
2248   */
2249  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FOCUS);
2250
2251 /**
2252   * Search parameter: <b>principalinvestigator</b>
2253   * <p>
2254   * Description: <b>The individual responsible for the study</b><br>
2255   * Type: <b>reference</b><br>
2256   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2257   * </p>
2258   */
2259  @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 } )
2260  public static final String SP_PRINCIPALINVESTIGATOR = "principalinvestigator";
2261 /**
2262   * <b>Fluent Client</b> search parameter constant for <b>principalinvestigator</b>
2263   * <p>
2264   * Description: <b>The individual responsible for the study</b><br>
2265   * Type: <b>reference</b><br>
2266   * Path: <b>ResearchStudy.principalInvestigator</b><br>
2267   * </p>
2268   */
2269  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRINCIPALINVESTIGATOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRINCIPALINVESTIGATOR);
2270
2271/**
2272   * Constant for fluent queries to be used to add include statements. Specifies
2273   * the path value of "<b>ResearchStudy:principalinvestigator</b>".
2274   */
2275  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRINCIPALINVESTIGATOR = new ca.uhn.fhir.model.api.Include("ResearchStudy:principalinvestigator").toLocked();
2276
2277 /**
2278   * Search parameter: <b>title</b>
2279   * <p>
2280   * Description: <b>Name for this study</b><br>
2281   * Type: <b>string</b><br>
2282   * Path: <b>ResearchStudy.title</b><br>
2283   * </p>
2284   */
2285  @SearchParamDefinition(name="title", path="ResearchStudy.title", description="Name for this study", type="string" )
2286  public static final String SP_TITLE = "title";
2287 /**
2288   * <b>Fluent Client</b> search parameter constant for <b>title</b>
2289   * <p>
2290   * Description: <b>Name for this study</b><br>
2291   * Type: <b>string</b><br>
2292   * Path: <b>ResearchStudy.title</b><br>
2293   * </p>
2294   */
2295  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
2296
2297 /**
2298   * Search parameter: <b>protocol</b>
2299   * <p>
2300   * Description: <b>Steps followed in executing study</b><br>
2301   * Type: <b>reference</b><br>
2302   * Path: <b>ResearchStudy.protocol</b><br>
2303   * </p>
2304   */
2305  @SearchParamDefinition(name="protocol", path="ResearchStudy.protocol", description="Steps followed in executing study", type="reference", target={PlanDefinition.class } )
2306  public static final String SP_PROTOCOL = "protocol";
2307 /**
2308   * <b>Fluent Client</b> search parameter constant for <b>protocol</b>
2309   * <p>
2310   * Description: <b>Steps followed in executing study</b><br>
2311   * Type: <b>reference</b><br>
2312   * Path: <b>ResearchStudy.protocol</b><br>
2313   * </p>
2314   */
2315  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROTOCOL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROTOCOL);
2316
2317/**
2318   * Constant for fluent queries to be used to add include statements. Specifies
2319   * the path value of "<b>ResearchStudy:protocol</b>".
2320   */
2321  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROTOCOL = new ca.uhn.fhir.model.api.Include("ResearchStudy:protocol").toLocked();
2322
2323 /**
2324   * Search parameter: <b>site</b>
2325   * <p>
2326   * Description: <b>Location involved in study execution</b><br>
2327   * Type: <b>reference</b><br>
2328   * Path: <b>ResearchStudy.site</b><br>
2329   * </p>
2330   */
2331  @SearchParamDefinition(name="site", path="ResearchStudy.site", description="Location involved in study execution", type="reference", target={Location.class } )
2332  public static final String SP_SITE = "site";
2333 /**
2334   * <b>Fluent Client</b> search parameter constant for <b>site</b>
2335   * <p>
2336   * Description: <b>Location involved in study execution</b><br>
2337   * Type: <b>reference</b><br>
2338   * Path: <b>ResearchStudy.site</b><br>
2339   * </p>
2340   */
2341  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SITE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SITE);
2342
2343/**
2344   * Constant for fluent queries to be used to add include statements. Specifies
2345   * the path value of "<b>ResearchStudy:site</b>".
2346   */
2347  public static final ca.uhn.fhir.model.api.Include INCLUDE_SITE = new ca.uhn.fhir.model.api.Include("ResearchStudy:site").toLocked();
2348
2349 /**
2350   * Search parameter: <b>category</b>
2351   * <p>
2352   * Description: <b>Classifications for the study</b><br>
2353   * Type: <b>token</b><br>
2354   * Path: <b>ResearchStudy.category</b><br>
2355   * </p>
2356   */
2357  @SearchParamDefinition(name="category", path="ResearchStudy.category", description="Classifications for the study", type="token" )
2358  public static final String SP_CATEGORY = "category";
2359 /**
2360   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2361   * <p>
2362   * Description: <b>Classifications for the study</b><br>
2363   * Type: <b>token</b><br>
2364   * Path: <b>ResearchStudy.category</b><br>
2365   * </p>
2366   */
2367  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2368
2369 /**
2370   * Search parameter: <b>keyword</b>
2371   * <p>
2372   * Description: <b>Used to search for the study</b><br>
2373   * Type: <b>token</b><br>
2374   * Path: <b>ResearchStudy.keyword</b><br>
2375   * </p>
2376   */
2377  @SearchParamDefinition(name="keyword", path="ResearchStudy.keyword", description="Used to search for the study", type="token" )
2378  public static final String SP_KEYWORD = "keyword";
2379 /**
2380   * <b>Fluent Client</b> search parameter constant for <b>keyword</b>
2381   * <p>
2382   * Description: <b>Used to search for the study</b><br>
2383   * Type: <b>token</b><br>
2384   * Path: <b>ResearchStudy.keyword</b><br>
2385   * </p>
2386   */
2387  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KEYWORD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KEYWORD);
2388
2389 /**
2390   * Search parameter: <b>status</b>
2391   * <p>
2392   * Description: <b>draft | in-progress | suspended | stopped | completed | entered-in-error</b><br>
2393   * Type: <b>token</b><br>
2394   * Path: <b>ResearchStudy.status</b><br>
2395   * </p>
2396   */
2397  @SearchParamDefinition(name="status", path="ResearchStudy.status", description="draft | in-progress | suspended | stopped | completed | entered-in-error", type="token" )
2398  public static final String SP_STATUS = "status";
2399 /**
2400   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2401   * <p>
2402   * Description: <b>draft | in-progress | suspended | stopped | completed | entered-in-error</b><br>
2403   * Type: <b>token</b><br>
2404   * Path: <b>ResearchStudy.status</b><br>
2405   * </p>
2406   */
2407  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2408
2409
2410}