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