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