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