001package org.hl7.fhir.r5.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 Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.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 scientific study of nature that sometimes includes processes involved in health and disease. For example, clinical trials are research studies that involve people. These studies may be related to new ways to screen, prevent, diagnose, and treat disease. They may also study certain outcomes and certain groups of people by looking at data collected in the past or future.
052 */
053@ResourceDef(name="ResearchStudy", profile="http://hl7.org/fhir/StructureDefinition/ResearchStudy")
054public class ResearchStudy extends DomainResource {
055
056    @Block()
057    public static class ResearchStudyLabelComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * Kind of name.
060         */
061        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
062        @Description(shortDefinition="primary | official | scientific | plain-language | subtitle | short-title | acronym | earlier-title | language | auto-translated | human-use | machine-use | duplicate-uid", formalDefinition="Kind of name." )
063        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/title-type")
064        protected CodeableConcept type;
065
066        /**
067         * The name.
068         */
069        @Child(name = "value", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
070        @Description(shortDefinition="The name", formalDefinition="The name." )
071        protected StringType value;
072
073        private static final long serialVersionUID = 944223389L;
074
075    /**
076     * Constructor
077     */
078      public ResearchStudyLabelComponent() {
079        super();
080      }
081
082        /**
083         * @return {@link #type} (Kind of name.)
084         */
085        public CodeableConcept getType() { 
086          if (this.type == null)
087            if (Configuration.errorOnAutoCreate())
088              throw new Error("Attempt to auto-create ResearchStudyLabelComponent.type");
089            else if (Configuration.doAutoCreate())
090              this.type = new CodeableConcept(); // cc
091          return this.type;
092        }
093
094        public boolean hasType() { 
095          return this.type != null && !this.type.isEmpty();
096        }
097
098        /**
099         * @param value {@link #type} (Kind of name.)
100         */
101        public ResearchStudyLabelComponent setType(CodeableConcept value) { 
102          this.type = value;
103          return this;
104        }
105
106        /**
107         * @return {@link #value} (The name.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
108         */
109        public StringType getValueElement() { 
110          if (this.value == null)
111            if (Configuration.errorOnAutoCreate())
112              throw new Error("Attempt to auto-create ResearchStudyLabelComponent.value");
113            else if (Configuration.doAutoCreate())
114              this.value = new StringType(); // bb
115          return this.value;
116        }
117
118        public boolean hasValueElement() { 
119          return this.value != null && !this.value.isEmpty();
120        }
121
122        public boolean hasValue() { 
123          return this.value != null && !this.value.isEmpty();
124        }
125
126        /**
127         * @param value {@link #value} (The name.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
128         */
129        public ResearchStudyLabelComponent setValueElement(StringType value) { 
130          this.value = value;
131          return this;
132        }
133
134        /**
135         * @return The name.
136         */
137        public String getValue() { 
138          return this.value == null ? null : this.value.getValue();
139        }
140
141        /**
142         * @param value The name.
143         */
144        public ResearchStudyLabelComponent setValue(String value) { 
145          if (Utilities.noString(value))
146            this.value = null;
147          else {
148            if (this.value == null)
149              this.value = new StringType();
150            this.value.setValue(value);
151          }
152          return this;
153        }
154
155        protected void listChildren(List<Property> children) {
156          super.listChildren(children);
157          children.add(new Property("type", "CodeableConcept", "Kind of name.", 0, 1, type));
158          children.add(new Property("value", "string", "The name.", 0, 1, value));
159        }
160
161        @Override
162        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
163          switch (_hash) {
164          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Kind of name.", 0, 1, type);
165          case 111972721: /*value*/  return new Property("value", "string", "The name.", 0, 1, value);
166          default: return super.getNamedProperty(_hash, _name, _checkValid);
167          }
168
169        }
170
171      @Override
172      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
173        switch (hash) {
174        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
175        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
176        default: return super.getProperty(hash, name, checkValid);
177        }
178
179      }
180
181      @Override
182      public Base setProperty(int hash, String name, Base value) throws FHIRException {
183        switch (hash) {
184        case 3575610: // type
185          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
186          return value;
187        case 111972721: // value
188          this.value = TypeConvertor.castToString(value); // StringType
189          return value;
190        default: return super.setProperty(hash, name, value);
191        }
192
193      }
194
195      @Override
196      public Base setProperty(String name, Base value) throws FHIRException {
197        if (name.equals("type")) {
198          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
199        } else if (name.equals("value")) {
200          this.value = TypeConvertor.castToString(value); // StringType
201        } else
202          return super.setProperty(name, value);
203        return value;
204      }
205
206      @Override
207      public Base makeProperty(int hash, String name) throws FHIRException {
208        switch (hash) {
209        case 3575610:  return getType();
210        case 111972721:  return getValueElement();
211        default: return super.makeProperty(hash, name);
212        }
213
214      }
215
216      @Override
217      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
218        switch (hash) {
219        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
220        case 111972721: /*value*/ return new String[] {"string"};
221        default: return super.getTypesForProperty(hash, name);
222        }
223
224      }
225
226      @Override
227      public Base addChild(String name) throws FHIRException {
228        if (name.equals("type")) {
229          this.type = new CodeableConcept();
230          return this.type;
231        }
232        else if (name.equals("value")) {
233          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.label.value");
234        }
235        else
236          return super.addChild(name);
237      }
238
239      public ResearchStudyLabelComponent copy() {
240        ResearchStudyLabelComponent dst = new ResearchStudyLabelComponent();
241        copyValues(dst);
242        return dst;
243      }
244
245      public void copyValues(ResearchStudyLabelComponent dst) {
246        super.copyValues(dst);
247        dst.type = type == null ? null : type.copy();
248        dst.value = value == null ? null : value.copy();
249      }
250
251      @Override
252      public boolean equalsDeep(Base other_) {
253        if (!super.equalsDeep(other_))
254          return false;
255        if (!(other_ instanceof ResearchStudyLabelComponent))
256          return false;
257        ResearchStudyLabelComponent o = (ResearchStudyLabelComponent) other_;
258        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true);
259      }
260
261      @Override
262      public boolean equalsShallow(Base other_) {
263        if (!super.equalsShallow(other_))
264          return false;
265        if (!(other_ instanceof ResearchStudyLabelComponent))
266          return false;
267        ResearchStudyLabelComponent o = (ResearchStudyLabelComponent) other_;
268        return compareValues(value, o.value, true);
269      }
270
271      public boolean isEmpty() {
272        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value);
273      }
274
275  public String fhirType() {
276    return "ResearchStudy.label";
277
278  }
279
280  }
281
282    @Block()
283    public static class ResearchStudyFocusComponent extends BackboneElement implements IBaseBackboneElement {
284        /**
285         * Identification of product under study.  This may be any combination of code and/or name.
286         */
287        @Child(name = "productCode", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
288        @Description(shortDefinition="Identification of product under study", formalDefinition="Identification of product under study.  This may be any combination of code and/or name." )
289        protected CodeableConcept productCode;
290
291        /**
292         * Indicates whether the focus is a medication, a device, a procedure, a specific factor or some other intervention or characteristic.
293         */
294        @Child(name = "focusType", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
295        @Description(shortDefinition="medication | device | intervention | factor", formalDefinition="Indicates whether the focus is a medication, a device, a procedure, a specific factor or some other intervention or characteristic." )
296        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-focus-type")
297        protected List<CodeableConcept> focusType;
298
299        /**
300         * A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.
301         */
302        @Child(name = "factor", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=false)
303        @Description(shortDefinition="An independent variable manipulated by the experimentalist", formalDefinition="A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay." )
304        protected MarkdownType factor;
305
306        private static final long serialVersionUID = 1526347182L;
307
308    /**
309     * Constructor
310     */
311      public ResearchStudyFocusComponent() {
312        super();
313      }
314
315        /**
316         * @return {@link #productCode} (Identification of product under study.  This may be any combination of code and/or name.)
317         */
318        public CodeableConcept getProductCode() { 
319          if (this.productCode == null)
320            if (Configuration.errorOnAutoCreate())
321              throw new Error("Attempt to auto-create ResearchStudyFocusComponent.productCode");
322            else if (Configuration.doAutoCreate())
323              this.productCode = new CodeableConcept(); // cc
324          return this.productCode;
325        }
326
327        public boolean hasProductCode() { 
328          return this.productCode != null && !this.productCode.isEmpty();
329        }
330
331        /**
332         * @param value {@link #productCode} (Identification of product under study.  This may be any combination of code and/or name.)
333         */
334        public ResearchStudyFocusComponent setProductCode(CodeableConcept value) { 
335          this.productCode = value;
336          return this;
337        }
338
339        /**
340         * @return {@link #focusType} (Indicates whether the focus is a medication, a device, a procedure, a specific factor or some other intervention or characteristic.)
341         */
342        public List<CodeableConcept> getFocusType() { 
343          if (this.focusType == null)
344            this.focusType = new ArrayList<CodeableConcept>();
345          return this.focusType;
346        }
347
348        /**
349         * @return Returns a reference to <code>this</code> for easy method chaining
350         */
351        public ResearchStudyFocusComponent setFocusType(List<CodeableConcept> theFocusType) { 
352          this.focusType = theFocusType;
353          return this;
354        }
355
356        public boolean hasFocusType() { 
357          if (this.focusType == null)
358            return false;
359          for (CodeableConcept item : this.focusType)
360            if (!item.isEmpty())
361              return true;
362          return false;
363        }
364
365        public CodeableConcept addFocusType() { //3
366          CodeableConcept t = new CodeableConcept();
367          if (this.focusType == null)
368            this.focusType = new ArrayList<CodeableConcept>();
369          this.focusType.add(t);
370          return t;
371        }
372
373        public ResearchStudyFocusComponent addFocusType(CodeableConcept t) { //3
374          if (t == null)
375            return this;
376          if (this.focusType == null)
377            this.focusType = new ArrayList<CodeableConcept>();
378          this.focusType.add(t);
379          return this;
380        }
381
382        /**
383         * @return The first repetition of repeating field {@link #focusType}, creating it if it does not already exist {3}
384         */
385        public CodeableConcept getFocusTypeFirstRep() { 
386          if (getFocusType().isEmpty()) {
387            addFocusType();
388          }
389          return getFocusType().get(0);
390        }
391
392        /**
393         * @return {@link #factor} (A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
394         */
395        public MarkdownType getFactorElement() { 
396          if (this.factor == null)
397            if (Configuration.errorOnAutoCreate())
398              throw new Error("Attempt to auto-create ResearchStudyFocusComponent.factor");
399            else if (Configuration.doAutoCreate())
400              this.factor = new MarkdownType(); // bb
401          return this.factor;
402        }
403
404        public boolean hasFactorElement() { 
405          return this.factor != null && !this.factor.isEmpty();
406        }
407
408        public boolean hasFactor() { 
409          return this.factor != null && !this.factor.isEmpty();
410        }
411
412        /**
413         * @param value {@link #factor} (A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
414         */
415        public ResearchStudyFocusComponent setFactorElement(MarkdownType value) { 
416          this.factor = value;
417          return this;
418        }
419
420        /**
421         * @return A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.
422         */
423        public String getFactor() { 
424          return this.factor == null ? null : this.factor.getValue();
425        }
426
427        /**
428         * @param value A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.
429         */
430        public ResearchStudyFocusComponent setFactor(String value) { 
431          if (value == null)
432            this.factor = null;
433          else {
434            if (this.factor == null)
435              this.factor = new MarkdownType();
436            this.factor.setValue(value);
437          }
438          return this;
439        }
440
441        protected void listChildren(List<Property> children) {
442          super.listChildren(children);
443          children.add(new Property("productCode", "CodeableConcept", "Identification of product under study.  This may be any combination of code and/or name.", 0, 1, productCode));
444          children.add(new Property("focusType", "CodeableConcept", "Indicates whether the focus is a medication, a device, a procedure, a specific factor or some other intervention or characteristic.", 0, java.lang.Integer.MAX_VALUE, focusType));
445          children.add(new Property("factor", "markdown", "A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.", 0, 1, factor));
446        }
447
448        @Override
449        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
450          switch (_hash) {
451          case -1492131972: /*productCode*/  return new Property("productCode", "CodeableConcept", "Identification of product under study.  This may be any combination of code and/or name.", 0, 1, productCode);
452          case 1628646450: /*focusType*/  return new Property("focusType", "CodeableConcept", "Indicates whether the focus is a medication, a device, a procedure, a specific factor or some other intervention or characteristic.", 0, java.lang.Integer.MAX_VALUE, focusType);
453          case -1282148017: /*factor*/  return new Property("factor", "markdown", "A factor corresponds to an independent variable manipulated by the experimentalist with the intention to affect biological systems in a way that can be measured by an assay.", 0, 1, factor);
454          default: return super.getNamedProperty(_hash, _name, _checkValid);
455          }
456
457        }
458
459      @Override
460      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
461        switch (hash) {
462        case -1492131972: /*productCode*/ return this.productCode == null ? new Base[0] : new Base[] {this.productCode}; // CodeableConcept
463        case 1628646450: /*focusType*/ return this.focusType == null ? new Base[0] : this.focusType.toArray(new Base[this.focusType.size()]); // CodeableConcept
464        case -1282148017: /*factor*/ return this.factor == null ? new Base[0] : new Base[] {this.factor}; // MarkdownType
465        default: return super.getProperty(hash, name, checkValid);
466        }
467
468      }
469
470      @Override
471      public Base setProperty(int hash, String name, Base value) throws FHIRException {
472        switch (hash) {
473        case -1492131972: // productCode
474          this.productCode = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
475          return value;
476        case 1628646450: // focusType
477          this.getFocusType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
478          return value;
479        case -1282148017: // factor
480          this.factor = TypeConvertor.castToMarkdown(value); // MarkdownType
481          return value;
482        default: return super.setProperty(hash, name, value);
483        }
484
485      }
486
487      @Override
488      public Base setProperty(String name, Base value) throws FHIRException {
489        if (name.equals("productCode")) {
490          this.productCode = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
491        } else if (name.equals("focusType")) {
492          this.getFocusType().add(TypeConvertor.castToCodeableConcept(value));
493        } else if (name.equals("factor")) {
494          this.factor = TypeConvertor.castToMarkdown(value); // MarkdownType
495        } else
496          return super.setProperty(name, value);
497        return value;
498      }
499
500      @Override
501      public Base makeProperty(int hash, String name) throws FHIRException {
502        switch (hash) {
503        case -1492131972:  return getProductCode();
504        case 1628646450:  return addFocusType(); 
505        case -1282148017:  return getFactorElement();
506        default: return super.makeProperty(hash, name);
507        }
508
509      }
510
511      @Override
512      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
513        switch (hash) {
514        case -1492131972: /*productCode*/ return new String[] {"CodeableConcept"};
515        case 1628646450: /*focusType*/ return new String[] {"CodeableConcept"};
516        case -1282148017: /*factor*/ return new String[] {"markdown"};
517        default: return super.getTypesForProperty(hash, name);
518        }
519
520      }
521
522      @Override
523      public Base addChild(String name) throws FHIRException {
524        if (name.equals("productCode")) {
525          this.productCode = new CodeableConcept();
526          return this.productCode;
527        }
528        else if (name.equals("focusType")) {
529          return addFocusType();
530        }
531        else if (name.equals("factor")) {
532          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.focus.factor");
533        }
534        else
535          return super.addChild(name);
536      }
537
538      public ResearchStudyFocusComponent copy() {
539        ResearchStudyFocusComponent dst = new ResearchStudyFocusComponent();
540        copyValues(dst);
541        return dst;
542      }
543
544      public void copyValues(ResearchStudyFocusComponent dst) {
545        super.copyValues(dst);
546        dst.productCode = productCode == null ? null : productCode.copy();
547        if (focusType != null) {
548          dst.focusType = new ArrayList<CodeableConcept>();
549          for (CodeableConcept i : focusType)
550            dst.focusType.add(i.copy());
551        };
552        dst.factor = factor == null ? null : factor.copy();
553      }
554
555      @Override
556      public boolean equalsDeep(Base other_) {
557        if (!super.equalsDeep(other_))
558          return false;
559        if (!(other_ instanceof ResearchStudyFocusComponent))
560          return false;
561        ResearchStudyFocusComponent o = (ResearchStudyFocusComponent) other_;
562        return compareDeep(productCode, o.productCode, true) && compareDeep(focusType, o.focusType, true)
563           && compareDeep(factor, o.factor, true);
564      }
565
566      @Override
567      public boolean equalsShallow(Base other_) {
568        if (!super.equalsShallow(other_))
569          return false;
570        if (!(other_ instanceof ResearchStudyFocusComponent))
571          return false;
572        ResearchStudyFocusComponent o = (ResearchStudyFocusComponent) other_;
573        return compareValues(factor, o.factor, true);
574      }
575
576      public boolean isEmpty() {
577        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(productCode, focusType, factor
578          );
579      }
580
581  public String fhirType() {
582    return "ResearchStudy.focus";
583
584  }
585
586  }
587
588    @Block()
589    public static class ResearchStudyAssociatedPartyComponent extends BackboneElement implements IBaseBackboneElement {
590        /**
591         * Name of associated party.
592         */
593        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
594        @Description(shortDefinition="Name of associated party", formalDefinition="Name of associated party." )
595        protected StringType name;
596
597        /**
598         * Type of association.
599         */
600        @Child(name = "role", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
601        @Description(shortDefinition="sponsor | lead-sponsor | sponsor-investigator | primary-investigator | collaborator | funding-source | general-contact | recruitment-contact | sub-investigator | study-director | study-chair", formalDefinition="Type of association." )
602        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-party-role")
603        protected CodeableConcept role;
604
605        /**
606         * Identifies the start date and the end date of the associated party in the role.
607         */
608        @Child(name = "period", type = {Period.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
609        @Description(shortDefinition="When active in the role", formalDefinition="Identifies the start date and the end date of the associated party in the role." )
610        protected List<Period> period;
611
612        /**
613         * A categorization other than role for the associated party.
614         */
615        @Child(name = "classifier", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
616        @Description(shortDefinition="nih | fda | government | nonprofit | academic | industry", formalDefinition="A categorization other than role for the associated party." )
617        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-party-org-type")
618        protected List<CodeableConcept> classifier;
619
620        /**
621         * Individual or organization associated with study (use practitionerRole to specify their organisation).
622         */
623        @Child(name = "party", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=5, min=0, max=1, modifier=false, summary=false)
624        @Description(shortDefinition="Individual or organization associated with study (use practitionerRole to specify their organisation)", formalDefinition="Individual or organization associated with study (use practitionerRole to specify their organisation)." )
625        protected Reference party;
626
627        private static final long serialVersionUID = -1418550998L;
628
629    /**
630     * Constructor
631     */
632      public ResearchStudyAssociatedPartyComponent() {
633        super();
634      }
635
636    /**
637     * Constructor
638     */
639      public ResearchStudyAssociatedPartyComponent(CodeableConcept role) {
640        super();
641        this.setRole(role);
642      }
643
644        /**
645         * @return {@link #name} (Name of associated party.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
646         */
647        public StringType getNameElement() { 
648          if (this.name == null)
649            if (Configuration.errorOnAutoCreate())
650              throw new Error("Attempt to auto-create ResearchStudyAssociatedPartyComponent.name");
651            else if (Configuration.doAutoCreate())
652              this.name = new StringType(); // bb
653          return this.name;
654        }
655
656        public boolean hasNameElement() { 
657          return this.name != null && !this.name.isEmpty();
658        }
659
660        public boolean hasName() { 
661          return this.name != null && !this.name.isEmpty();
662        }
663
664        /**
665         * @param value {@link #name} (Name of associated party.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
666         */
667        public ResearchStudyAssociatedPartyComponent setNameElement(StringType value) { 
668          this.name = value;
669          return this;
670        }
671
672        /**
673         * @return Name of associated party.
674         */
675        public String getName() { 
676          return this.name == null ? null : this.name.getValue();
677        }
678
679        /**
680         * @param value Name of associated party.
681         */
682        public ResearchStudyAssociatedPartyComponent setName(String value) { 
683          if (Utilities.noString(value))
684            this.name = null;
685          else {
686            if (this.name == null)
687              this.name = new StringType();
688            this.name.setValue(value);
689          }
690          return this;
691        }
692
693        /**
694         * @return {@link #role} (Type of association.)
695         */
696        public CodeableConcept getRole() { 
697          if (this.role == null)
698            if (Configuration.errorOnAutoCreate())
699              throw new Error("Attempt to auto-create ResearchStudyAssociatedPartyComponent.role");
700            else if (Configuration.doAutoCreate())
701              this.role = new CodeableConcept(); // cc
702          return this.role;
703        }
704
705        public boolean hasRole() { 
706          return this.role != null && !this.role.isEmpty();
707        }
708
709        /**
710         * @param value {@link #role} (Type of association.)
711         */
712        public ResearchStudyAssociatedPartyComponent setRole(CodeableConcept value) { 
713          this.role = value;
714          return this;
715        }
716
717        /**
718         * @return {@link #period} (Identifies the start date and the end date of the associated party in the role.)
719         */
720        public List<Period> getPeriod() { 
721          if (this.period == null)
722            this.period = new ArrayList<Period>();
723          return this.period;
724        }
725
726        /**
727         * @return Returns a reference to <code>this</code> for easy method chaining
728         */
729        public ResearchStudyAssociatedPartyComponent setPeriod(List<Period> thePeriod) { 
730          this.period = thePeriod;
731          return this;
732        }
733
734        public boolean hasPeriod() { 
735          if (this.period == null)
736            return false;
737          for (Period item : this.period)
738            if (!item.isEmpty())
739              return true;
740          return false;
741        }
742
743        public Period addPeriod() { //3
744          Period t = new Period();
745          if (this.period == null)
746            this.period = new ArrayList<Period>();
747          this.period.add(t);
748          return t;
749        }
750
751        public ResearchStudyAssociatedPartyComponent addPeriod(Period t) { //3
752          if (t == null)
753            return this;
754          if (this.period == null)
755            this.period = new ArrayList<Period>();
756          this.period.add(t);
757          return this;
758        }
759
760        /**
761         * @return The first repetition of repeating field {@link #period}, creating it if it does not already exist {3}
762         */
763        public Period getPeriodFirstRep() { 
764          if (getPeriod().isEmpty()) {
765            addPeriod();
766          }
767          return getPeriod().get(0);
768        }
769
770        /**
771         * @return {@link #classifier} (A categorization other than role for the associated party.)
772         */
773        public List<CodeableConcept> getClassifier() { 
774          if (this.classifier == null)
775            this.classifier = new ArrayList<CodeableConcept>();
776          return this.classifier;
777        }
778
779        /**
780         * @return Returns a reference to <code>this</code> for easy method chaining
781         */
782        public ResearchStudyAssociatedPartyComponent setClassifier(List<CodeableConcept> theClassifier) { 
783          this.classifier = theClassifier;
784          return this;
785        }
786
787        public boolean hasClassifier() { 
788          if (this.classifier == null)
789            return false;
790          for (CodeableConcept item : this.classifier)
791            if (!item.isEmpty())
792              return true;
793          return false;
794        }
795
796        public CodeableConcept addClassifier() { //3
797          CodeableConcept t = new CodeableConcept();
798          if (this.classifier == null)
799            this.classifier = new ArrayList<CodeableConcept>();
800          this.classifier.add(t);
801          return t;
802        }
803
804        public ResearchStudyAssociatedPartyComponent addClassifier(CodeableConcept t) { //3
805          if (t == null)
806            return this;
807          if (this.classifier == null)
808            this.classifier = new ArrayList<CodeableConcept>();
809          this.classifier.add(t);
810          return this;
811        }
812
813        /**
814         * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
815         */
816        public CodeableConcept getClassifierFirstRep() { 
817          if (getClassifier().isEmpty()) {
818            addClassifier();
819          }
820          return getClassifier().get(0);
821        }
822
823        /**
824         * @return {@link #party} (Individual or organization associated with study (use practitionerRole to specify their organisation).)
825         */
826        public Reference getParty() { 
827          if (this.party == null)
828            if (Configuration.errorOnAutoCreate())
829              throw new Error("Attempt to auto-create ResearchStudyAssociatedPartyComponent.party");
830            else if (Configuration.doAutoCreate())
831              this.party = new Reference(); // cc
832          return this.party;
833        }
834
835        public boolean hasParty() { 
836          return this.party != null && !this.party.isEmpty();
837        }
838
839        /**
840         * @param value {@link #party} (Individual or organization associated with study (use practitionerRole to specify their organisation).)
841         */
842        public ResearchStudyAssociatedPartyComponent setParty(Reference value) { 
843          this.party = value;
844          return this;
845        }
846
847        protected void listChildren(List<Property> children) {
848          super.listChildren(children);
849          children.add(new Property("name", "string", "Name of associated party.", 0, 1, name));
850          children.add(new Property("role", "CodeableConcept", "Type of association.", 0, 1, role));
851          children.add(new Property("period", "Period", "Identifies the start date and the end date of the associated party in the role.", 0, java.lang.Integer.MAX_VALUE, period));
852          children.add(new Property("classifier", "CodeableConcept", "A categorization other than role for the associated party.", 0, java.lang.Integer.MAX_VALUE, classifier));
853          children.add(new Property("party", "Reference(Practitioner|PractitionerRole|Organization)", "Individual or organization associated with study (use practitionerRole to specify their organisation).", 0, 1, party));
854        }
855
856        @Override
857        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
858          switch (_hash) {
859          case 3373707: /*name*/  return new Property("name", "string", "Name of associated party.", 0, 1, name);
860          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "Type of association.", 0, 1, role);
861          case -991726143: /*period*/  return new Property("period", "Period", "Identifies the start date and the end date of the associated party in the role.", 0, java.lang.Integer.MAX_VALUE, period);
862          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "A categorization other than role for the associated party.", 0, java.lang.Integer.MAX_VALUE, classifier);
863          case 106437350: /*party*/  return new Property("party", "Reference(Practitioner|PractitionerRole|Organization)", "Individual or organization associated with study (use practitionerRole to specify their organisation).", 0, 1, party);
864          default: return super.getNamedProperty(_hash, _name, _checkValid);
865          }
866
867        }
868
869      @Override
870      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
871        switch (hash) {
872        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
873        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
874        case -991726143: /*period*/ return this.period == null ? new Base[0] : this.period.toArray(new Base[this.period.size()]); // Period
875        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
876        case 106437350: /*party*/ return this.party == null ? new Base[0] : new Base[] {this.party}; // Reference
877        default: return super.getProperty(hash, name, checkValid);
878        }
879
880      }
881
882      @Override
883      public Base setProperty(int hash, String name, Base value) throws FHIRException {
884        switch (hash) {
885        case 3373707: // name
886          this.name = TypeConvertor.castToString(value); // StringType
887          return value;
888        case 3506294: // role
889          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
890          return value;
891        case -991726143: // period
892          this.getPeriod().add(TypeConvertor.castToPeriod(value)); // Period
893          return value;
894        case -281470431: // classifier
895          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
896          return value;
897        case 106437350: // party
898          this.party = TypeConvertor.castToReference(value); // Reference
899          return value;
900        default: return super.setProperty(hash, name, value);
901        }
902
903      }
904
905      @Override
906      public Base setProperty(String name, Base value) throws FHIRException {
907        if (name.equals("name")) {
908          this.name = TypeConvertor.castToString(value); // StringType
909        } else if (name.equals("role")) {
910          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
911        } else if (name.equals("period")) {
912          this.getPeriod().add(TypeConvertor.castToPeriod(value));
913        } else if (name.equals("classifier")) {
914          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
915        } else if (name.equals("party")) {
916          this.party = TypeConvertor.castToReference(value); // Reference
917        } else
918          return super.setProperty(name, value);
919        return value;
920      }
921
922      @Override
923      public Base makeProperty(int hash, String name) throws FHIRException {
924        switch (hash) {
925        case 3373707:  return getNameElement();
926        case 3506294:  return getRole();
927        case -991726143:  return addPeriod(); 
928        case -281470431:  return addClassifier(); 
929        case 106437350:  return getParty();
930        default: return super.makeProperty(hash, name);
931        }
932
933      }
934
935      @Override
936      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
937        switch (hash) {
938        case 3373707: /*name*/ return new String[] {"string"};
939        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
940        case -991726143: /*period*/ return new String[] {"Period"};
941        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
942        case 106437350: /*party*/ return new String[] {"Reference"};
943        default: return super.getTypesForProperty(hash, name);
944        }
945
946      }
947
948      @Override
949      public Base addChild(String name) throws FHIRException {
950        if (name.equals("name")) {
951          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.associatedParty.name");
952        }
953        else if (name.equals("role")) {
954          this.role = new CodeableConcept();
955          return this.role;
956        }
957        else if (name.equals("period")) {
958          return addPeriod();
959        }
960        else if (name.equals("classifier")) {
961          return addClassifier();
962        }
963        else if (name.equals("party")) {
964          this.party = new Reference();
965          return this.party;
966        }
967        else
968          return super.addChild(name);
969      }
970
971      public ResearchStudyAssociatedPartyComponent copy() {
972        ResearchStudyAssociatedPartyComponent dst = new ResearchStudyAssociatedPartyComponent();
973        copyValues(dst);
974        return dst;
975      }
976
977      public void copyValues(ResearchStudyAssociatedPartyComponent dst) {
978        super.copyValues(dst);
979        dst.name = name == null ? null : name.copy();
980        dst.role = role == null ? null : role.copy();
981        if (period != null) {
982          dst.period = new ArrayList<Period>();
983          for (Period i : period)
984            dst.period.add(i.copy());
985        };
986        if (classifier != null) {
987          dst.classifier = new ArrayList<CodeableConcept>();
988          for (CodeableConcept i : classifier)
989            dst.classifier.add(i.copy());
990        };
991        dst.party = party == null ? null : party.copy();
992      }
993
994      @Override
995      public boolean equalsDeep(Base other_) {
996        if (!super.equalsDeep(other_))
997          return false;
998        if (!(other_ instanceof ResearchStudyAssociatedPartyComponent))
999          return false;
1000        ResearchStudyAssociatedPartyComponent o = (ResearchStudyAssociatedPartyComponent) other_;
1001        return compareDeep(name, o.name, true) && compareDeep(role, o.role, true) && compareDeep(period, o.period, true)
1002           && compareDeep(classifier, o.classifier, true) && compareDeep(party, o.party, true);
1003      }
1004
1005      @Override
1006      public boolean equalsShallow(Base other_) {
1007        if (!super.equalsShallow(other_))
1008          return false;
1009        if (!(other_ instanceof ResearchStudyAssociatedPartyComponent))
1010          return false;
1011        ResearchStudyAssociatedPartyComponent o = (ResearchStudyAssociatedPartyComponent) other_;
1012        return compareValues(name, o.name, true);
1013      }
1014
1015      public boolean isEmpty() {
1016        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, role, period, classifier
1017          , party);
1018      }
1019
1020  public String fhirType() {
1021    return "ResearchStudy.associatedParty";
1022
1023  }
1024
1025  }
1026
1027    @Block()
1028    public static class ResearchStudyProgressStatusComponent extends BackboneElement implements IBaseBackboneElement {
1029        /**
1030         * Label for status or state (e.g. recruitment status).
1031         */
1032        @Child(name = "state", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1033        @Description(shortDefinition="Label for status or state (e.g. recruitment status)", formalDefinition="Label for status or state (e.g. recruitment status)." )
1034        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-status")
1035        protected CodeableConcept state;
1036
1037        /**
1038         * An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.
1039         */
1040        @Child(name = "actual", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1041        @Description(shortDefinition="Actual if true else anticipated", formalDefinition="An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date." )
1042        protected BooleanType actual;
1043
1044        /**
1045         * Date range.
1046         */
1047        @Child(name = "period", type = {Period.class}, order=3, min=0, max=1, modifier=false, summary=false)
1048        @Description(shortDefinition="Date range", formalDefinition="Date range." )
1049        protected Period period;
1050
1051        private static final long serialVersionUID = 1232680620L;
1052
1053    /**
1054     * Constructor
1055     */
1056      public ResearchStudyProgressStatusComponent() {
1057        super();
1058      }
1059
1060    /**
1061     * Constructor
1062     */
1063      public ResearchStudyProgressStatusComponent(CodeableConcept state) {
1064        super();
1065        this.setState(state);
1066      }
1067
1068        /**
1069         * @return {@link #state} (Label for status or state (e.g. recruitment status).)
1070         */
1071        public CodeableConcept getState() { 
1072          if (this.state == null)
1073            if (Configuration.errorOnAutoCreate())
1074              throw new Error("Attempt to auto-create ResearchStudyProgressStatusComponent.state");
1075            else if (Configuration.doAutoCreate())
1076              this.state = new CodeableConcept(); // cc
1077          return this.state;
1078        }
1079
1080        public boolean hasState() { 
1081          return this.state != null && !this.state.isEmpty();
1082        }
1083
1084        /**
1085         * @param value {@link #state} (Label for status or state (e.g. recruitment status).)
1086         */
1087        public ResearchStudyProgressStatusComponent setState(CodeableConcept value) { 
1088          this.state = value;
1089          return this;
1090        }
1091
1092        /**
1093         * @return {@link #actual} (An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1094         */
1095        public BooleanType getActualElement() { 
1096          if (this.actual == null)
1097            if (Configuration.errorOnAutoCreate())
1098              throw new Error("Attempt to auto-create ResearchStudyProgressStatusComponent.actual");
1099            else if (Configuration.doAutoCreate())
1100              this.actual = new BooleanType(); // bb
1101          return this.actual;
1102        }
1103
1104        public boolean hasActualElement() { 
1105          return this.actual != null && !this.actual.isEmpty();
1106        }
1107
1108        public boolean hasActual() { 
1109          return this.actual != null && !this.actual.isEmpty();
1110        }
1111
1112        /**
1113         * @param value {@link #actual} (An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.). This is the underlying object with id, value and extensions. The accessor "getActual" gives direct access to the value
1114         */
1115        public ResearchStudyProgressStatusComponent setActualElement(BooleanType value) { 
1116          this.actual = value;
1117          return this;
1118        }
1119
1120        /**
1121         * @return An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.
1122         */
1123        public boolean getActual() { 
1124          return this.actual == null || this.actual.isEmpty() ? false : this.actual.getValue();
1125        }
1126
1127        /**
1128         * @param value An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.
1129         */
1130        public ResearchStudyProgressStatusComponent setActual(boolean value) { 
1131            if (this.actual == null)
1132              this.actual = new BooleanType();
1133            this.actual.setValue(value);
1134          return this;
1135        }
1136
1137        /**
1138         * @return {@link #period} (Date range.)
1139         */
1140        public Period getPeriod() { 
1141          if (this.period == null)
1142            if (Configuration.errorOnAutoCreate())
1143              throw new Error("Attempt to auto-create ResearchStudyProgressStatusComponent.period");
1144            else if (Configuration.doAutoCreate())
1145              this.period = new Period(); // cc
1146          return this.period;
1147        }
1148
1149        public boolean hasPeriod() { 
1150          return this.period != null && !this.period.isEmpty();
1151        }
1152
1153        /**
1154         * @param value {@link #period} (Date range.)
1155         */
1156        public ResearchStudyProgressStatusComponent setPeriod(Period value) { 
1157          this.period = value;
1158          return this;
1159        }
1160
1161        protected void listChildren(List<Property> children) {
1162          super.listChildren(children);
1163          children.add(new Property("state", "CodeableConcept", "Label for status or state (e.g. recruitment status).", 0, 1, state));
1164          children.add(new Property("actual", "boolean", "An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.", 0, 1, actual));
1165          children.add(new Property("period", "Period", "Date range.", 0, 1, period));
1166        }
1167
1168        @Override
1169        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1170          switch (_hash) {
1171          case 109757585: /*state*/  return new Property("state", "CodeableConcept", "Label for status or state (e.g. recruitment status).", 0, 1, state);
1172          case -1422939762: /*actual*/  return new Property("actual", "boolean", "An indication of whether or not the date is a known date when the state changed or will change. A value of true indicates a known date. A value of false indicates an estimated date.", 0, 1, actual);
1173          case -991726143: /*period*/  return new Property("period", "Period", "Date range.", 0, 1, period);
1174          default: return super.getNamedProperty(_hash, _name, _checkValid);
1175          }
1176
1177        }
1178
1179      @Override
1180      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1181        switch (hash) {
1182        case 109757585: /*state*/ return this.state == null ? new Base[0] : new Base[] {this.state}; // CodeableConcept
1183        case -1422939762: /*actual*/ return this.actual == null ? new Base[0] : new Base[] {this.actual}; // BooleanType
1184        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1185        default: return super.getProperty(hash, name, checkValid);
1186        }
1187
1188      }
1189
1190      @Override
1191      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1192        switch (hash) {
1193        case 109757585: // state
1194          this.state = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1195          return value;
1196        case -1422939762: // actual
1197          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
1198          return value;
1199        case -991726143: // period
1200          this.period = TypeConvertor.castToPeriod(value); // Period
1201          return value;
1202        default: return super.setProperty(hash, name, value);
1203        }
1204
1205      }
1206
1207      @Override
1208      public Base setProperty(String name, Base value) throws FHIRException {
1209        if (name.equals("state")) {
1210          this.state = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1211        } else if (name.equals("actual")) {
1212          this.actual = TypeConvertor.castToBoolean(value); // BooleanType
1213        } else if (name.equals("period")) {
1214          this.period = TypeConvertor.castToPeriod(value); // Period
1215        } else
1216          return super.setProperty(name, value);
1217        return value;
1218      }
1219
1220      @Override
1221      public Base makeProperty(int hash, String name) throws FHIRException {
1222        switch (hash) {
1223        case 109757585:  return getState();
1224        case -1422939762:  return getActualElement();
1225        case -991726143:  return getPeriod();
1226        default: return super.makeProperty(hash, name);
1227        }
1228
1229      }
1230
1231      @Override
1232      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1233        switch (hash) {
1234        case 109757585: /*state*/ return new String[] {"CodeableConcept"};
1235        case -1422939762: /*actual*/ return new String[] {"boolean"};
1236        case -991726143: /*period*/ return new String[] {"Period"};
1237        default: return super.getTypesForProperty(hash, name);
1238        }
1239
1240      }
1241
1242      @Override
1243      public Base addChild(String name) throws FHIRException {
1244        if (name.equals("state")) {
1245          this.state = new CodeableConcept();
1246          return this.state;
1247        }
1248        else if (name.equals("actual")) {
1249          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.progressStatus.actual");
1250        }
1251        else if (name.equals("period")) {
1252          this.period = new Period();
1253          return this.period;
1254        }
1255        else
1256          return super.addChild(name);
1257      }
1258
1259      public ResearchStudyProgressStatusComponent copy() {
1260        ResearchStudyProgressStatusComponent dst = new ResearchStudyProgressStatusComponent();
1261        copyValues(dst);
1262        return dst;
1263      }
1264
1265      public void copyValues(ResearchStudyProgressStatusComponent dst) {
1266        super.copyValues(dst);
1267        dst.state = state == null ? null : state.copy();
1268        dst.actual = actual == null ? null : actual.copy();
1269        dst.period = period == null ? null : period.copy();
1270      }
1271
1272      @Override
1273      public boolean equalsDeep(Base other_) {
1274        if (!super.equalsDeep(other_))
1275          return false;
1276        if (!(other_ instanceof ResearchStudyProgressStatusComponent))
1277          return false;
1278        ResearchStudyProgressStatusComponent o = (ResearchStudyProgressStatusComponent) other_;
1279        return compareDeep(state, o.state, true) && compareDeep(actual, o.actual, true) && compareDeep(period, o.period, true)
1280          ;
1281      }
1282
1283      @Override
1284      public boolean equalsShallow(Base other_) {
1285        if (!super.equalsShallow(other_))
1286          return false;
1287        if (!(other_ instanceof ResearchStudyProgressStatusComponent))
1288          return false;
1289        ResearchStudyProgressStatusComponent o = (ResearchStudyProgressStatusComponent) other_;
1290        return compareValues(actual, o.actual, true);
1291      }
1292
1293      public boolean isEmpty() {
1294        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(state, actual, period);
1295      }
1296
1297  public String fhirType() {
1298    return "ResearchStudy.progressStatus";
1299
1300  }
1301
1302  }
1303
1304    @Block()
1305    public static class ResearchStudyRecruitmentComponent extends BackboneElement implements IBaseBackboneElement {
1306        /**
1307         * Estimated total number of participants to be enrolled.
1308         */
1309        @Child(name = "targetNumber", type = {UnsignedIntType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1310        @Description(shortDefinition="Estimated total number of participants to be enrolled", formalDefinition="Estimated total number of participants to be enrolled." )
1311        protected UnsignedIntType targetNumber;
1312
1313        /**
1314         * Actual total number of participants enrolled in study.
1315         */
1316        @Child(name = "actualNumber", type = {UnsignedIntType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1317        @Description(shortDefinition="Actual total number of participants enrolled in study", formalDefinition="Actual total number of participants enrolled in study." )
1318        protected UnsignedIntType actualNumber;
1319
1320        /**
1321         * Inclusion and exclusion criteria.
1322         */
1323        @Child(name = "eligibility", type = {Group.class, EvidenceVariable.class}, order=3, min=0, max=1, modifier=false, summary=false)
1324        @Description(shortDefinition="Inclusion and exclusion criteria", formalDefinition="Inclusion and exclusion criteria." )
1325        protected Reference eligibility;
1326
1327        /**
1328         * Group of participants who were enrolled in study.
1329         */
1330        @Child(name = "actualGroup", type = {Group.class}, order=4, min=0, max=1, modifier=false, summary=true)
1331        @Description(shortDefinition="Group of participants who were enrolled in study", formalDefinition="Group of participants who were enrolled in study." )
1332        protected Reference actualGroup;
1333
1334        private static final long serialVersionUID = 1483229827L;
1335
1336    /**
1337     * Constructor
1338     */
1339      public ResearchStudyRecruitmentComponent() {
1340        super();
1341      }
1342
1343        /**
1344         * @return {@link #targetNumber} (Estimated total number of participants to be enrolled.). This is the underlying object with id, value and extensions. The accessor "getTargetNumber" gives direct access to the value
1345         */
1346        public UnsignedIntType getTargetNumberElement() { 
1347          if (this.targetNumber == null)
1348            if (Configuration.errorOnAutoCreate())
1349              throw new Error("Attempt to auto-create ResearchStudyRecruitmentComponent.targetNumber");
1350            else if (Configuration.doAutoCreate())
1351              this.targetNumber = new UnsignedIntType(); // bb
1352          return this.targetNumber;
1353        }
1354
1355        public boolean hasTargetNumberElement() { 
1356          return this.targetNumber != null && !this.targetNumber.isEmpty();
1357        }
1358
1359        public boolean hasTargetNumber() { 
1360          return this.targetNumber != null && !this.targetNumber.isEmpty();
1361        }
1362
1363        /**
1364         * @param value {@link #targetNumber} (Estimated total number of participants to be enrolled.). This is the underlying object with id, value and extensions. The accessor "getTargetNumber" gives direct access to the value
1365         */
1366        public ResearchStudyRecruitmentComponent setTargetNumberElement(UnsignedIntType value) { 
1367          this.targetNumber = value;
1368          return this;
1369        }
1370
1371        /**
1372         * @return Estimated total number of participants to be enrolled.
1373         */
1374        public int getTargetNumber() { 
1375          return this.targetNumber == null || this.targetNumber.isEmpty() ? 0 : this.targetNumber.getValue();
1376        }
1377
1378        /**
1379         * @param value Estimated total number of participants to be enrolled.
1380         */
1381        public ResearchStudyRecruitmentComponent setTargetNumber(int value) { 
1382            if (this.targetNumber == null)
1383              this.targetNumber = new UnsignedIntType();
1384            this.targetNumber.setValue(value);
1385          return this;
1386        }
1387
1388        /**
1389         * @return {@link #actualNumber} (Actual total number of participants enrolled in study.). This is the underlying object with id, value and extensions. The accessor "getActualNumber" gives direct access to the value
1390         */
1391        public UnsignedIntType getActualNumberElement() { 
1392          if (this.actualNumber == null)
1393            if (Configuration.errorOnAutoCreate())
1394              throw new Error("Attempt to auto-create ResearchStudyRecruitmentComponent.actualNumber");
1395            else if (Configuration.doAutoCreate())
1396              this.actualNumber = new UnsignedIntType(); // bb
1397          return this.actualNumber;
1398        }
1399
1400        public boolean hasActualNumberElement() { 
1401          return this.actualNumber != null && !this.actualNumber.isEmpty();
1402        }
1403
1404        public boolean hasActualNumber() { 
1405          return this.actualNumber != null && !this.actualNumber.isEmpty();
1406        }
1407
1408        /**
1409         * @param value {@link #actualNumber} (Actual total number of participants enrolled in study.). This is the underlying object with id, value and extensions. The accessor "getActualNumber" gives direct access to the value
1410         */
1411        public ResearchStudyRecruitmentComponent setActualNumberElement(UnsignedIntType value) { 
1412          this.actualNumber = value;
1413          return this;
1414        }
1415
1416        /**
1417         * @return Actual total number of participants enrolled in study.
1418         */
1419        public int getActualNumber() { 
1420          return this.actualNumber == null || this.actualNumber.isEmpty() ? 0 : this.actualNumber.getValue();
1421        }
1422
1423        /**
1424         * @param value Actual total number of participants enrolled in study.
1425         */
1426        public ResearchStudyRecruitmentComponent setActualNumber(int value) { 
1427            if (this.actualNumber == null)
1428              this.actualNumber = new UnsignedIntType();
1429            this.actualNumber.setValue(value);
1430          return this;
1431        }
1432
1433        /**
1434         * @return {@link #eligibility} (Inclusion and exclusion criteria.)
1435         */
1436        public Reference getEligibility() { 
1437          if (this.eligibility == null)
1438            if (Configuration.errorOnAutoCreate())
1439              throw new Error("Attempt to auto-create ResearchStudyRecruitmentComponent.eligibility");
1440            else if (Configuration.doAutoCreate())
1441              this.eligibility = new Reference(); // cc
1442          return this.eligibility;
1443        }
1444
1445        public boolean hasEligibility() { 
1446          return this.eligibility != null && !this.eligibility.isEmpty();
1447        }
1448
1449        /**
1450         * @param value {@link #eligibility} (Inclusion and exclusion criteria.)
1451         */
1452        public ResearchStudyRecruitmentComponent setEligibility(Reference value) { 
1453          this.eligibility = value;
1454          return this;
1455        }
1456
1457        /**
1458         * @return {@link #actualGroup} (Group of participants who were enrolled in study.)
1459         */
1460        public Reference getActualGroup() { 
1461          if (this.actualGroup == null)
1462            if (Configuration.errorOnAutoCreate())
1463              throw new Error("Attempt to auto-create ResearchStudyRecruitmentComponent.actualGroup");
1464            else if (Configuration.doAutoCreate())
1465              this.actualGroup = new Reference(); // cc
1466          return this.actualGroup;
1467        }
1468
1469        public boolean hasActualGroup() { 
1470          return this.actualGroup != null && !this.actualGroup.isEmpty();
1471        }
1472
1473        /**
1474         * @param value {@link #actualGroup} (Group of participants who were enrolled in study.)
1475         */
1476        public ResearchStudyRecruitmentComponent setActualGroup(Reference value) { 
1477          this.actualGroup = value;
1478          return this;
1479        }
1480
1481        protected void listChildren(List<Property> children) {
1482          super.listChildren(children);
1483          children.add(new Property("targetNumber", "unsignedInt", "Estimated total number of participants to be enrolled.", 0, 1, targetNumber));
1484          children.add(new Property("actualNumber", "unsignedInt", "Actual total number of participants enrolled in study.", 0, 1, actualNumber));
1485          children.add(new Property("eligibility", "Reference(Group|EvidenceVariable)", "Inclusion and exclusion criteria.", 0, 1, eligibility));
1486          children.add(new Property("actualGroup", "Reference(Group)", "Group of participants who were enrolled in study.", 0, 1, actualGroup));
1487        }
1488
1489        @Override
1490        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1491          switch (_hash) {
1492          case -682948550: /*targetNumber*/  return new Property("targetNumber", "unsignedInt", "Estimated total number of participants to be enrolled.", 0, 1, targetNumber);
1493          case 746557047: /*actualNumber*/  return new Property("actualNumber", "unsignedInt", "Actual total number of participants enrolled in study.", 0, 1, actualNumber);
1494          case -930847859: /*eligibility*/  return new Property("eligibility", "Reference(Group|EvidenceVariable)", "Inclusion and exclusion criteria.", 0, 1, eligibility);
1495          case 1403004305: /*actualGroup*/  return new Property("actualGroup", "Reference(Group)", "Group of participants who were enrolled in study.", 0, 1, actualGroup);
1496          default: return super.getNamedProperty(_hash, _name, _checkValid);
1497          }
1498
1499        }
1500
1501      @Override
1502      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1503        switch (hash) {
1504        case -682948550: /*targetNumber*/ return this.targetNumber == null ? new Base[0] : new Base[] {this.targetNumber}; // UnsignedIntType
1505        case 746557047: /*actualNumber*/ return this.actualNumber == null ? new Base[0] : new Base[] {this.actualNumber}; // UnsignedIntType
1506        case -930847859: /*eligibility*/ return this.eligibility == null ? new Base[0] : new Base[] {this.eligibility}; // Reference
1507        case 1403004305: /*actualGroup*/ return this.actualGroup == null ? new Base[0] : new Base[] {this.actualGroup}; // Reference
1508        default: return super.getProperty(hash, name, checkValid);
1509        }
1510
1511      }
1512
1513      @Override
1514      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1515        switch (hash) {
1516        case -682948550: // targetNumber
1517          this.targetNumber = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1518          return value;
1519        case 746557047: // actualNumber
1520          this.actualNumber = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1521          return value;
1522        case -930847859: // eligibility
1523          this.eligibility = TypeConvertor.castToReference(value); // Reference
1524          return value;
1525        case 1403004305: // actualGroup
1526          this.actualGroup = TypeConvertor.castToReference(value); // Reference
1527          return value;
1528        default: return super.setProperty(hash, name, value);
1529        }
1530
1531      }
1532
1533      @Override
1534      public Base setProperty(String name, Base value) throws FHIRException {
1535        if (name.equals("targetNumber")) {
1536          this.targetNumber = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1537        } else if (name.equals("actualNumber")) {
1538          this.actualNumber = TypeConvertor.castToUnsignedInt(value); // UnsignedIntType
1539        } else if (name.equals("eligibility")) {
1540          this.eligibility = TypeConvertor.castToReference(value); // Reference
1541        } else if (name.equals("actualGroup")) {
1542          this.actualGroup = TypeConvertor.castToReference(value); // Reference
1543        } else
1544          return super.setProperty(name, value);
1545        return value;
1546      }
1547
1548      @Override
1549      public Base makeProperty(int hash, String name) throws FHIRException {
1550        switch (hash) {
1551        case -682948550:  return getTargetNumberElement();
1552        case 746557047:  return getActualNumberElement();
1553        case -930847859:  return getEligibility();
1554        case 1403004305:  return getActualGroup();
1555        default: return super.makeProperty(hash, name);
1556        }
1557
1558      }
1559
1560      @Override
1561      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1562        switch (hash) {
1563        case -682948550: /*targetNumber*/ return new String[] {"unsignedInt"};
1564        case 746557047: /*actualNumber*/ return new String[] {"unsignedInt"};
1565        case -930847859: /*eligibility*/ return new String[] {"Reference"};
1566        case 1403004305: /*actualGroup*/ return new String[] {"Reference"};
1567        default: return super.getTypesForProperty(hash, name);
1568        }
1569
1570      }
1571
1572      @Override
1573      public Base addChild(String name) throws FHIRException {
1574        if (name.equals("targetNumber")) {
1575          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.recruitment.targetNumber");
1576        }
1577        else if (name.equals("actualNumber")) {
1578          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.recruitment.actualNumber");
1579        }
1580        else if (name.equals("eligibility")) {
1581          this.eligibility = new Reference();
1582          return this.eligibility;
1583        }
1584        else if (name.equals("actualGroup")) {
1585          this.actualGroup = new Reference();
1586          return this.actualGroup;
1587        }
1588        else
1589          return super.addChild(name);
1590      }
1591
1592      public ResearchStudyRecruitmentComponent copy() {
1593        ResearchStudyRecruitmentComponent dst = new ResearchStudyRecruitmentComponent();
1594        copyValues(dst);
1595        return dst;
1596      }
1597
1598      public void copyValues(ResearchStudyRecruitmentComponent dst) {
1599        super.copyValues(dst);
1600        dst.targetNumber = targetNumber == null ? null : targetNumber.copy();
1601        dst.actualNumber = actualNumber == null ? null : actualNumber.copy();
1602        dst.eligibility = eligibility == null ? null : eligibility.copy();
1603        dst.actualGroup = actualGroup == null ? null : actualGroup.copy();
1604      }
1605
1606      @Override
1607      public boolean equalsDeep(Base other_) {
1608        if (!super.equalsDeep(other_))
1609          return false;
1610        if (!(other_ instanceof ResearchStudyRecruitmentComponent))
1611          return false;
1612        ResearchStudyRecruitmentComponent o = (ResearchStudyRecruitmentComponent) other_;
1613        return compareDeep(targetNumber, o.targetNumber, true) && compareDeep(actualNumber, o.actualNumber, true)
1614           && compareDeep(eligibility, o.eligibility, true) && compareDeep(actualGroup, o.actualGroup, true)
1615          ;
1616      }
1617
1618      @Override
1619      public boolean equalsShallow(Base other_) {
1620        if (!super.equalsShallow(other_))
1621          return false;
1622        if (!(other_ instanceof ResearchStudyRecruitmentComponent))
1623          return false;
1624        ResearchStudyRecruitmentComponent o = (ResearchStudyRecruitmentComponent) other_;
1625        return compareValues(targetNumber, o.targetNumber, true) && compareValues(actualNumber, o.actualNumber, true)
1626          ;
1627      }
1628
1629      public boolean isEmpty() {
1630        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(targetNumber, actualNumber
1631          , eligibility, actualGroup);
1632      }
1633
1634  public String fhirType() {
1635    return "ResearchStudy.recruitment";
1636
1637  }
1638
1639  }
1640
1641    @Block()
1642    public static class ResearchStudyComparisonGroupComponent extends BackboneElement implements IBaseBackboneElement {
1643        /**
1644         * Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.
1645         */
1646        @Child(name = "identifier", type = {UriType.class, Identifier.class}, order=1, min=0, max=1, modifier=false, summary=false)
1647        @Description(shortDefinition="Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily", formalDefinition="Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily." )
1648        protected DataType identifier;
1649
1650        /**
1651         * Unique, human-readable label for this comparisonGroup of the study.
1652         */
1653        @Child(name = "name", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=false)
1654        @Description(shortDefinition="Label for study comparisonGroup", formalDefinition="Unique, human-readable label for this comparisonGroup of the study." )
1655        protected StringType name;
1656
1657        /**
1658         * Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater.
1659         */
1660        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
1661        @Description(shortDefinition="Categorization of study comparisonGroup", formalDefinition="Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater." )
1662        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-arm-type")
1663        protected CodeableConcept type;
1664
1665        /**
1666         * A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.
1667         */
1668        @Child(name = "description", type = {MarkdownType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1669        @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 comparisonGroup." )
1670        protected MarkdownType description;
1671
1672        /**
1673         * Interventions or exposures in this comparisonGroup or cohort.
1674         */
1675        @Child(name = "intendedExposure", type = {EvidenceVariable.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1676        @Description(shortDefinition="Interventions or exposures in this comparisonGroup or cohort", formalDefinition="Interventions or exposures in this comparisonGroup or cohort." )
1677        protected List<Reference> intendedExposure;
1678
1679        /**
1680         * Group of participants who were enrolled in study comparisonGroup.
1681         */
1682        @Child(name = "observedGroup", type = {Group.class}, order=6, min=0, max=1, modifier=false, summary=false)
1683        @Description(shortDefinition="Group of participants who were enrolled in study comparisonGroup", formalDefinition="Group of participants who were enrolled in study comparisonGroup." )
1684        protected Reference observedGroup;
1685
1686        private static final long serialVersionUID = -600196662L;
1687
1688    /**
1689     * Constructor
1690     */
1691      public ResearchStudyComparisonGroupComponent() {
1692        super();
1693      }
1694
1695    /**
1696     * Constructor
1697     */
1698      public ResearchStudyComparisonGroupComponent(String name) {
1699        super();
1700        this.setName(name);
1701      }
1702
1703        /**
1704         * @return {@link #identifier} (Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.)
1705         */
1706        public DataType getIdentifier() { 
1707          return this.identifier;
1708        }
1709
1710        /**
1711         * @return {@link #identifier} (Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.)
1712         */
1713        public UriType getIdentifierUriType() throws FHIRException { 
1714          if (this.identifier == null)
1715            this.identifier = new UriType();
1716          if (!(this.identifier instanceof UriType))
1717            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.identifier.getClass().getName()+" was encountered");
1718          return (UriType) this.identifier;
1719        }
1720
1721        public boolean hasIdentifierUriType() { 
1722          return this != null && this.identifier instanceof UriType;
1723        }
1724
1725        /**
1726         * @return {@link #identifier} (Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.)
1727         */
1728        public Identifier getIdentifierIdentifier() throws FHIRException { 
1729          if (this.identifier == null)
1730            this.identifier = new Identifier();
1731          if (!(this.identifier instanceof Identifier))
1732            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.identifier.getClass().getName()+" was encountered");
1733          return (Identifier) this.identifier;
1734        }
1735
1736        public boolean hasIdentifierIdentifier() { 
1737          return this != null && this.identifier instanceof Identifier;
1738        }
1739
1740        public boolean hasIdentifier() { 
1741          return this.identifier != null && !this.identifier.isEmpty();
1742        }
1743
1744        /**
1745         * @param value {@link #identifier} (Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.)
1746         */
1747        public ResearchStudyComparisonGroupComponent setIdentifier(DataType value) { 
1748          if (value != null && !(value instanceof UriType || value instanceof Identifier))
1749            throw new Error("Not the right type for ResearchStudy.comparisonGroup.identifier[x]: "+value.fhirType());
1750          this.identifier = value;
1751          return this;
1752        }
1753
1754        /**
1755         * @return {@link #name} (Unique, human-readable label for this comparisonGroup of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1756         */
1757        public StringType getNameElement() { 
1758          if (this.name == null)
1759            if (Configuration.errorOnAutoCreate())
1760              throw new Error("Attempt to auto-create ResearchStudyComparisonGroupComponent.name");
1761            else if (Configuration.doAutoCreate())
1762              this.name = new StringType(); // bb
1763          return this.name;
1764        }
1765
1766        public boolean hasNameElement() { 
1767          return this.name != null && !this.name.isEmpty();
1768        }
1769
1770        public boolean hasName() { 
1771          return this.name != null && !this.name.isEmpty();
1772        }
1773
1774        /**
1775         * @param value {@link #name} (Unique, human-readable label for this comparisonGroup of the study.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1776         */
1777        public ResearchStudyComparisonGroupComponent setNameElement(StringType value) { 
1778          this.name = value;
1779          return this;
1780        }
1781
1782        /**
1783         * @return Unique, human-readable label for this comparisonGroup of the study.
1784         */
1785        public String getName() { 
1786          return this.name == null ? null : this.name.getValue();
1787        }
1788
1789        /**
1790         * @param value Unique, human-readable label for this comparisonGroup of the study.
1791         */
1792        public ResearchStudyComparisonGroupComponent setName(String value) { 
1793            if (this.name == null)
1794              this.name = new StringType();
1795            this.name.setValue(value);
1796          return this;
1797        }
1798
1799        /**
1800         * @return {@link #type} (Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater.)
1801         */
1802        public CodeableConcept getType() { 
1803          if (this.type == null)
1804            if (Configuration.errorOnAutoCreate())
1805              throw new Error("Attempt to auto-create ResearchStudyComparisonGroupComponent.type");
1806            else if (Configuration.doAutoCreate())
1807              this.type = new CodeableConcept(); // cc
1808          return this.type;
1809        }
1810
1811        public boolean hasType() { 
1812          return this.type != null && !this.type.isEmpty();
1813        }
1814
1815        /**
1816         * @param value {@link #type} (Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater.)
1817         */
1818        public ResearchStudyComparisonGroupComponent setType(CodeableConcept value) { 
1819          this.type = value;
1820          return this;
1821        }
1822
1823        /**
1824         * @return {@link #description} (A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1825         */
1826        public MarkdownType getDescriptionElement() { 
1827          if (this.description == null)
1828            if (Configuration.errorOnAutoCreate())
1829              throw new Error("Attempt to auto-create ResearchStudyComparisonGroupComponent.description");
1830            else if (Configuration.doAutoCreate())
1831              this.description = new MarkdownType(); // bb
1832          return this.description;
1833        }
1834
1835        public boolean hasDescriptionElement() { 
1836          return this.description != null && !this.description.isEmpty();
1837        }
1838
1839        public boolean hasDescription() { 
1840          return this.description != null && !this.description.isEmpty();
1841        }
1842
1843        /**
1844         * @param value {@link #description} (A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
1845         */
1846        public ResearchStudyComparisonGroupComponent setDescriptionElement(MarkdownType value) { 
1847          this.description = value;
1848          return this;
1849        }
1850
1851        /**
1852         * @return A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.
1853         */
1854        public String getDescription() { 
1855          return this.description == null ? null : this.description.getValue();
1856        }
1857
1858        /**
1859         * @param value A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.
1860         */
1861        public ResearchStudyComparisonGroupComponent setDescription(String value) { 
1862          if (value == null)
1863            this.description = null;
1864          else {
1865            if (this.description == null)
1866              this.description = new MarkdownType();
1867            this.description.setValue(value);
1868          }
1869          return this;
1870        }
1871
1872        /**
1873         * @return {@link #intendedExposure} (Interventions or exposures in this comparisonGroup or cohort.)
1874         */
1875        public List<Reference> getIntendedExposure() { 
1876          if (this.intendedExposure == null)
1877            this.intendedExposure = new ArrayList<Reference>();
1878          return this.intendedExposure;
1879        }
1880
1881        /**
1882         * @return Returns a reference to <code>this</code> for easy method chaining
1883         */
1884        public ResearchStudyComparisonGroupComponent setIntendedExposure(List<Reference> theIntendedExposure) { 
1885          this.intendedExposure = theIntendedExposure;
1886          return this;
1887        }
1888
1889        public boolean hasIntendedExposure() { 
1890          if (this.intendedExposure == null)
1891            return false;
1892          for (Reference item : this.intendedExposure)
1893            if (!item.isEmpty())
1894              return true;
1895          return false;
1896        }
1897
1898        public Reference addIntendedExposure() { //3
1899          Reference t = new Reference();
1900          if (this.intendedExposure == null)
1901            this.intendedExposure = new ArrayList<Reference>();
1902          this.intendedExposure.add(t);
1903          return t;
1904        }
1905
1906        public ResearchStudyComparisonGroupComponent addIntendedExposure(Reference t) { //3
1907          if (t == null)
1908            return this;
1909          if (this.intendedExposure == null)
1910            this.intendedExposure = new ArrayList<Reference>();
1911          this.intendedExposure.add(t);
1912          return this;
1913        }
1914
1915        /**
1916         * @return The first repetition of repeating field {@link #intendedExposure}, creating it if it does not already exist {3}
1917         */
1918        public Reference getIntendedExposureFirstRep() { 
1919          if (getIntendedExposure().isEmpty()) {
1920            addIntendedExposure();
1921          }
1922          return getIntendedExposure().get(0);
1923        }
1924
1925        /**
1926         * @return {@link #observedGroup} (Group of participants who were enrolled in study comparisonGroup.)
1927         */
1928        public Reference getObservedGroup() { 
1929          if (this.observedGroup == null)
1930            if (Configuration.errorOnAutoCreate())
1931              throw new Error("Attempt to auto-create ResearchStudyComparisonGroupComponent.observedGroup");
1932            else if (Configuration.doAutoCreate())
1933              this.observedGroup = new Reference(); // cc
1934          return this.observedGroup;
1935        }
1936
1937        public boolean hasObservedGroup() { 
1938          return this.observedGroup != null && !this.observedGroup.isEmpty();
1939        }
1940
1941        /**
1942         * @param value {@link #observedGroup} (Group of participants who were enrolled in study comparisonGroup.)
1943         */
1944        public ResearchStudyComparisonGroupComponent setObservedGroup(Reference value) { 
1945          this.observedGroup = value;
1946          return this;
1947        }
1948
1949        protected void listChildren(List<Property> children) {
1950          super.listChildren(children);
1951          children.add(new Property("identifier[x]", "uri|Identifier", "Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.", 0, 1, identifier));
1952          children.add(new Property("name", "string", "Unique, human-readable label for this comparisonGroup of the study.", 0, 1, name));
1953          children.add(new Property("type", "CodeableConcept", "Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater.", 0, 1, type));
1954          children.add(new Property("description", "markdown", "A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.", 0, 1, description));
1955          children.add(new Property("intendedExposure", "Reference(EvidenceVariable)", "Interventions or exposures in this comparisonGroup or cohort.", 0, java.lang.Integer.MAX_VALUE, intendedExposure));
1956          children.add(new Property("observedGroup", "Reference(Group)", "Group of participants who were enrolled in study comparisonGroup.", 0, 1, observedGroup));
1957        }
1958
1959        @Override
1960        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1961          switch (_hash) {
1962          case 569772855: /*identifier[x]*/  return new Property("identifier[x]", "uri|Identifier", "Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.", 0, 1, identifier);
1963          case -1618432855: /*identifier*/  return new Property("identifier[x]", "uri|Identifier", "Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.", 0, 1, identifier);
1964          case 569766915: /*identifierUri*/  return new Property("identifier[x]", "uri", "Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.", 0, 1, identifier);
1965          case -554289614: /*identifierIdentifier*/  return new Property("identifier[x]", "Identifier", "Allows the comparisonGroup for the study and the comparisonGroup for the subject to be linked easily.", 0, 1, identifier);
1966          case 3373707: /*name*/  return new Property("name", "string", "Unique, human-readable label for this comparisonGroup of the study.", 0, 1, name);
1967          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Categorization of study comparisonGroup, e.g. experimental, active comparator, placebo comparater.", 0, 1, type);
1968          case -1724546052: /*description*/  return new Property("description", "markdown", "A succinct description of the path through the study that would be followed by a subject adhering to this comparisonGroup.", 0, 1, description);
1969          case -407218606: /*intendedExposure*/  return new Property("intendedExposure", "Reference(EvidenceVariable)", "Interventions or exposures in this comparisonGroup or cohort.", 0, java.lang.Integer.MAX_VALUE, intendedExposure);
1970          case 375599255: /*observedGroup*/  return new Property("observedGroup", "Reference(Group)", "Group of participants who were enrolled in study comparisonGroup.", 0, 1, observedGroup);
1971          default: return super.getNamedProperty(_hash, _name, _checkValid);
1972          }
1973
1974        }
1975
1976      @Override
1977      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1978        switch (hash) {
1979        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // DataType
1980        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1981        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1982        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
1983        case -407218606: /*intendedExposure*/ return this.intendedExposure == null ? new Base[0] : this.intendedExposure.toArray(new Base[this.intendedExposure.size()]); // Reference
1984        case 375599255: /*observedGroup*/ return this.observedGroup == null ? new Base[0] : new Base[] {this.observedGroup}; // Reference
1985        default: return super.getProperty(hash, name, checkValid);
1986        }
1987
1988      }
1989
1990      @Override
1991      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1992        switch (hash) {
1993        case -1618432855: // identifier
1994          this.identifier = TypeConvertor.castToType(value); // DataType
1995          return value;
1996        case 3373707: // name
1997          this.name = TypeConvertor.castToString(value); // StringType
1998          return value;
1999        case 3575610: // type
2000          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2001          return value;
2002        case -1724546052: // description
2003          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2004          return value;
2005        case -407218606: // intendedExposure
2006          this.getIntendedExposure().add(TypeConvertor.castToReference(value)); // Reference
2007          return value;
2008        case 375599255: // observedGroup
2009          this.observedGroup = TypeConvertor.castToReference(value); // Reference
2010          return value;
2011        default: return super.setProperty(hash, name, value);
2012        }
2013
2014      }
2015
2016      @Override
2017      public Base setProperty(String name, Base value) throws FHIRException {
2018        if (name.equals("identifier[x]")) {
2019          this.identifier = TypeConvertor.castToType(value); // DataType
2020        } else if (name.equals("name")) {
2021          this.name = TypeConvertor.castToString(value); // StringType
2022        } else if (name.equals("type")) {
2023          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2024        } else if (name.equals("description")) {
2025          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2026        } else if (name.equals("intendedExposure")) {
2027          this.getIntendedExposure().add(TypeConvertor.castToReference(value));
2028        } else if (name.equals("observedGroup")) {
2029          this.observedGroup = TypeConvertor.castToReference(value); // Reference
2030        } else
2031          return super.setProperty(name, value);
2032        return value;
2033      }
2034
2035      @Override
2036      public Base makeProperty(int hash, String name) throws FHIRException {
2037        switch (hash) {
2038        case 569772855:  return getIdentifier();
2039        case -1618432855:  return getIdentifier();
2040        case 3373707:  return getNameElement();
2041        case 3575610:  return getType();
2042        case -1724546052:  return getDescriptionElement();
2043        case -407218606:  return addIntendedExposure(); 
2044        case 375599255:  return getObservedGroup();
2045        default: return super.makeProperty(hash, name);
2046        }
2047
2048      }
2049
2050      @Override
2051      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2052        switch (hash) {
2053        case -1618432855: /*identifier*/ return new String[] {"uri", "Identifier"};
2054        case 3373707: /*name*/ return new String[] {"string"};
2055        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2056        case -1724546052: /*description*/ return new String[] {"markdown"};
2057        case -407218606: /*intendedExposure*/ return new String[] {"Reference"};
2058        case 375599255: /*observedGroup*/ return new String[] {"Reference"};
2059        default: return super.getTypesForProperty(hash, name);
2060        }
2061
2062      }
2063
2064      @Override
2065      public Base addChild(String name) throws FHIRException {
2066        if (name.equals("identifierUri")) {
2067          this.identifier = new UriType();
2068          return this.identifier;
2069        }
2070        else if (name.equals("identifierIdentifier")) {
2071          this.identifier = new Identifier();
2072          return this.identifier;
2073        }
2074        else if (name.equals("name")) {
2075          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.comparisonGroup.name");
2076        }
2077        else if (name.equals("type")) {
2078          this.type = new CodeableConcept();
2079          return this.type;
2080        }
2081        else if (name.equals("description")) {
2082          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.comparisonGroup.description");
2083        }
2084        else if (name.equals("intendedExposure")) {
2085          return addIntendedExposure();
2086        }
2087        else if (name.equals("observedGroup")) {
2088          this.observedGroup = new Reference();
2089          return this.observedGroup;
2090        }
2091        else
2092          return super.addChild(name);
2093      }
2094
2095      public ResearchStudyComparisonGroupComponent copy() {
2096        ResearchStudyComparisonGroupComponent dst = new ResearchStudyComparisonGroupComponent();
2097        copyValues(dst);
2098        return dst;
2099      }
2100
2101      public void copyValues(ResearchStudyComparisonGroupComponent dst) {
2102        super.copyValues(dst);
2103        dst.identifier = identifier == null ? null : identifier.copy();
2104        dst.name = name == null ? null : name.copy();
2105        dst.type = type == null ? null : type.copy();
2106        dst.description = description == null ? null : description.copy();
2107        if (intendedExposure != null) {
2108          dst.intendedExposure = new ArrayList<Reference>();
2109          for (Reference i : intendedExposure)
2110            dst.intendedExposure.add(i.copy());
2111        };
2112        dst.observedGroup = observedGroup == null ? null : observedGroup.copy();
2113      }
2114
2115      @Override
2116      public boolean equalsDeep(Base other_) {
2117        if (!super.equalsDeep(other_))
2118          return false;
2119        if (!(other_ instanceof ResearchStudyComparisonGroupComponent))
2120          return false;
2121        ResearchStudyComparisonGroupComponent o = (ResearchStudyComparisonGroupComponent) other_;
2122        return compareDeep(identifier, o.identifier, true) && compareDeep(name, o.name, true) && compareDeep(type, o.type, true)
2123           && compareDeep(description, o.description, true) && compareDeep(intendedExposure, o.intendedExposure, true)
2124           && compareDeep(observedGroup, o.observedGroup, true);
2125      }
2126
2127      @Override
2128      public boolean equalsShallow(Base other_) {
2129        if (!super.equalsShallow(other_))
2130          return false;
2131        if (!(other_ instanceof ResearchStudyComparisonGroupComponent))
2132          return false;
2133        ResearchStudyComparisonGroupComponent o = (ResearchStudyComparisonGroupComponent) other_;
2134        return compareValues(name, o.name, true) && compareValues(description, o.description, true);
2135      }
2136
2137      public boolean isEmpty() {
2138        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, name, type, description
2139          , intendedExposure, observedGroup);
2140      }
2141
2142  public String fhirType() {
2143    return "ResearchStudy.comparisonGroup";
2144
2145  }
2146
2147  }
2148
2149    @Block()
2150    public static class ResearchStudyObjectiveComponent extends BackboneElement implements IBaseBackboneElement {
2151        /**
2152         * Unique, human-readable label for this objective of the study.
2153         */
2154        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2155        @Description(shortDefinition="Label for the objective", formalDefinition="Unique, human-readable label for this objective of the study." )
2156        protected StringType name;
2157
2158        /**
2159         * The kind of study objective.
2160         */
2161        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
2162        @Description(shortDefinition="primary | secondary | exploratory", formalDefinition="The kind of study objective." )
2163        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-objective-type")
2164        protected CodeableConcept type;
2165
2166        /**
2167         * Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).
2168         */
2169        @Child(name = "description", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2170        @Description(shortDefinition="Description of the objective", formalDefinition="Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description)." )
2171        protected MarkdownType description;
2172
2173        private static final long serialVersionUID = -1976083810L;
2174
2175    /**
2176     * Constructor
2177     */
2178      public ResearchStudyObjectiveComponent() {
2179        super();
2180      }
2181
2182        /**
2183         * @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
2184         */
2185        public StringType getNameElement() { 
2186          if (this.name == null)
2187            if (Configuration.errorOnAutoCreate())
2188              throw new Error("Attempt to auto-create ResearchStudyObjectiveComponent.name");
2189            else if (Configuration.doAutoCreate())
2190              this.name = new StringType(); // bb
2191          return this.name;
2192        }
2193
2194        public boolean hasNameElement() { 
2195          return this.name != null && !this.name.isEmpty();
2196        }
2197
2198        public boolean hasName() { 
2199          return this.name != null && !this.name.isEmpty();
2200        }
2201
2202        /**
2203         * @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
2204         */
2205        public ResearchStudyObjectiveComponent setNameElement(StringType value) { 
2206          this.name = value;
2207          return this;
2208        }
2209
2210        /**
2211         * @return Unique, human-readable label for this objective of the study.
2212         */
2213        public String getName() { 
2214          return this.name == null ? null : this.name.getValue();
2215        }
2216
2217        /**
2218         * @param value Unique, human-readable label for this objective of the study.
2219         */
2220        public ResearchStudyObjectiveComponent setName(String value) { 
2221          if (Utilities.noString(value))
2222            this.name = null;
2223          else {
2224            if (this.name == null)
2225              this.name = new StringType();
2226            this.name.setValue(value);
2227          }
2228          return this;
2229        }
2230
2231        /**
2232         * @return {@link #type} (The kind of study objective.)
2233         */
2234        public CodeableConcept getType() { 
2235          if (this.type == null)
2236            if (Configuration.errorOnAutoCreate())
2237              throw new Error("Attempt to auto-create ResearchStudyObjectiveComponent.type");
2238            else if (Configuration.doAutoCreate())
2239              this.type = new CodeableConcept(); // cc
2240          return this.type;
2241        }
2242
2243        public boolean hasType() { 
2244          return this.type != null && !this.type.isEmpty();
2245        }
2246
2247        /**
2248         * @param value {@link #type} (The kind of study objective.)
2249         */
2250        public ResearchStudyObjectiveComponent setType(CodeableConcept value) { 
2251          this.type = value;
2252          return this;
2253        }
2254
2255        /**
2256         * @return {@link #description} (Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2257         */
2258        public MarkdownType getDescriptionElement() { 
2259          if (this.description == null)
2260            if (Configuration.errorOnAutoCreate())
2261              throw new Error("Attempt to auto-create ResearchStudyObjectiveComponent.description");
2262            else if (Configuration.doAutoCreate())
2263              this.description = new MarkdownType(); // bb
2264          return this.description;
2265        }
2266
2267        public boolean hasDescriptionElement() { 
2268          return this.description != null && !this.description.isEmpty();
2269        }
2270
2271        public boolean hasDescription() { 
2272          return this.description != null && !this.description.isEmpty();
2273        }
2274
2275        /**
2276         * @param value {@link #description} (Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2277         */
2278        public ResearchStudyObjectiveComponent setDescriptionElement(MarkdownType value) { 
2279          this.description = value;
2280          return this;
2281        }
2282
2283        /**
2284         * @return Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).
2285         */
2286        public String getDescription() { 
2287          return this.description == null ? null : this.description.getValue();
2288        }
2289
2290        /**
2291         * @param value Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).
2292         */
2293        public ResearchStudyObjectiveComponent setDescription(String value) { 
2294          if (value == null)
2295            this.description = null;
2296          else {
2297            if (this.description == null)
2298              this.description = new MarkdownType();
2299            this.description.setValue(value);
2300          }
2301          return this;
2302        }
2303
2304        protected void listChildren(List<Property> children) {
2305          super.listChildren(children);
2306          children.add(new Property("name", "string", "Unique, human-readable label for this objective of the study.", 0, 1, name));
2307          children.add(new Property("type", "CodeableConcept", "The kind of study objective.", 0, 1, type));
2308          children.add(new Property("description", "markdown", "Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).", 0, 1, description));
2309        }
2310
2311        @Override
2312        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2313          switch (_hash) {
2314          case 3373707: /*name*/  return new Property("name", "string", "Unique, human-readable label for this objective of the study.", 0, 1, name);
2315          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of study objective.", 0, 1, type);
2316          case -1724546052: /*description*/  return new Property("description", "markdown", "Free text description of the objective of the study.  This is what the study is trying to achieve rather than how it is going to achieve it (see ResearchStudy.description).", 0, 1, description);
2317          default: return super.getNamedProperty(_hash, _name, _checkValid);
2318          }
2319
2320        }
2321
2322      @Override
2323      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2324        switch (hash) {
2325        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2326        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2327        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2328        default: return super.getProperty(hash, name, checkValid);
2329        }
2330
2331      }
2332
2333      @Override
2334      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2335        switch (hash) {
2336        case 3373707: // name
2337          this.name = TypeConvertor.castToString(value); // StringType
2338          return value;
2339        case 3575610: // type
2340          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2341          return value;
2342        case -1724546052: // description
2343          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2344          return value;
2345        default: return super.setProperty(hash, name, value);
2346        }
2347
2348      }
2349
2350      @Override
2351      public Base setProperty(String name, Base value) throws FHIRException {
2352        if (name.equals("name")) {
2353          this.name = TypeConvertor.castToString(value); // StringType
2354        } else if (name.equals("type")) {
2355          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2356        } else if (name.equals("description")) {
2357          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2358        } else
2359          return super.setProperty(name, value);
2360        return value;
2361      }
2362
2363      @Override
2364      public Base makeProperty(int hash, String name) throws FHIRException {
2365        switch (hash) {
2366        case 3373707:  return getNameElement();
2367        case 3575610:  return getType();
2368        case -1724546052:  return getDescriptionElement();
2369        default: return super.makeProperty(hash, name);
2370        }
2371
2372      }
2373
2374      @Override
2375      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2376        switch (hash) {
2377        case 3373707: /*name*/ return new String[] {"string"};
2378        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2379        case -1724546052: /*description*/ return new String[] {"markdown"};
2380        default: return super.getTypesForProperty(hash, name);
2381        }
2382
2383      }
2384
2385      @Override
2386      public Base addChild(String name) throws FHIRException {
2387        if (name.equals("name")) {
2388          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.objective.name");
2389        }
2390        else if (name.equals("type")) {
2391          this.type = new CodeableConcept();
2392          return this.type;
2393        }
2394        else if (name.equals("description")) {
2395          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.objective.description");
2396        }
2397        else
2398          return super.addChild(name);
2399      }
2400
2401      public ResearchStudyObjectiveComponent copy() {
2402        ResearchStudyObjectiveComponent dst = new ResearchStudyObjectiveComponent();
2403        copyValues(dst);
2404        return dst;
2405      }
2406
2407      public void copyValues(ResearchStudyObjectiveComponent dst) {
2408        super.copyValues(dst);
2409        dst.name = name == null ? null : name.copy();
2410        dst.type = type == null ? null : type.copy();
2411        dst.description = description == null ? null : description.copy();
2412      }
2413
2414      @Override
2415      public boolean equalsDeep(Base other_) {
2416        if (!super.equalsDeep(other_))
2417          return false;
2418        if (!(other_ instanceof ResearchStudyObjectiveComponent))
2419          return false;
2420        ResearchStudyObjectiveComponent o = (ResearchStudyObjectiveComponent) other_;
2421        return compareDeep(name, o.name, true) && compareDeep(type, o.type, true) && compareDeep(description, o.description, true)
2422          ;
2423      }
2424
2425      @Override
2426      public boolean equalsShallow(Base other_) {
2427        if (!super.equalsShallow(other_))
2428          return false;
2429        if (!(other_ instanceof ResearchStudyObjectiveComponent))
2430          return false;
2431        ResearchStudyObjectiveComponent o = (ResearchStudyObjectiveComponent) other_;
2432        return compareValues(name, o.name, true) && compareValues(description, o.description, true);
2433      }
2434
2435      public boolean isEmpty() {
2436        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, type, description
2437          );
2438      }
2439
2440  public String fhirType() {
2441    return "ResearchStudy.objective";
2442
2443  }
2444
2445  }
2446
2447    @Block()
2448    public static class ResearchStudyOutcomeMeasureComponent extends BackboneElement implements IBaseBackboneElement {
2449        /**
2450         * Label for the outcome.
2451         */
2452        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2453        @Description(shortDefinition="Label for the outcome", formalDefinition="Label for the outcome." )
2454        protected StringType name;
2455
2456        /**
2457         * The parameter or characteristic being assessed as one of the values by which the study is assessed.
2458         */
2459        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2460        @Description(shortDefinition="primary | secondary | exploratory", formalDefinition="The parameter or characteristic being assessed as one of the values by which the study is assessed." )
2461        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-objective-type")
2462        protected List<CodeableConcept> type;
2463
2464        /**
2465         * Description of the outcome.
2466         */
2467        @Child(name = "description", type = {MarkdownType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2468        @Description(shortDefinition="Description of the outcome", formalDefinition="Description of the outcome." )
2469        protected MarkdownType description;
2470
2471        /**
2472         * Structured outcome definition.
2473         */
2474        @Child(name = "reference", type = {EvidenceVariable.class}, order=4, min=0, max=1, modifier=false, summary=false)
2475        @Description(shortDefinition="Structured outcome definition", formalDefinition="Structured outcome definition." )
2476        protected Reference reference;
2477
2478        private static final long serialVersionUID = 1786559672L;
2479
2480    /**
2481     * Constructor
2482     */
2483      public ResearchStudyOutcomeMeasureComponent() {
2484        super();
2485      }
2486
2487        /**
2488         * @return {@link #name} (Label for the outcome.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2489         */
2490        public StringType getNameElement() { 
2491          if (this.name == null)
2492            if (Configuration.errorOnAutoCreate())
2493              throw new Error("Attempt to auto-create ResearchStudyOutcomeMeasureComponent.name");
2494            else if (Configuration.doAutoCreate())
2495              this.name = new StringType(); // bb
2496          return this.name;
2497        }
2498
2499        public boolean hasNameElement() { 
2500          return this.name != null && !this.name.isEmpty();
2501        }
2502
2503        public boolean hasName() { 
2504          return this.name != null && !this.name.isEmpty();
2505        }
2506
2507        /**
2508         * @param value {@link #name} (Label for the outcome.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2509         */
2510        public ResearchStudyOutcomeMeasureComponent setNameElement(StringType value) { 
2511          this.name = value;
2512          return this;
2513        }
2514
2515        /**
2516         * @return Label for the outcome.
2517         */
2518        public String getName() { 
2519          return this.name == null ? null : this.name.getValue();
2520        }
2521
2522        /**
2523         * @param value Label for the outcome.
2524         */
2525        public ResearchStudyOutcomeMeasureComponent setName(String value) { 
2526          if (Utilities.noString(value))
2527            this.name = null;
2528          else {
2529            if (this.name == null)
2530              this.name = new StringType();
2531            this.name.setValue(value);
2532          }
2533          return this;
2534        }
2535
2536        /**
2537         * @return {@link #type} (The parameter or characteristic being assessed as one of the values by which the study is assessed.)
2538         */
2539        public List<CodeableConcept> getType() { 
2540          if (this.type == null)
2541            this.type = new ArrayList<CodeableConcept>();
2542          return this.type;
2543        }
2544
2545        /**
2546         * @return Returns a reference to <code>this</code> for easy method chaining
2547         */
2548        public ResearchStudyOutcomeMeasureComponent setType(List<CodeableConcept> theType) { 
2549          this.type = theType;
2550          return this;
2551        }
2552
2553        public boolean hasType() { 
2554          if (this.type == null)
2555            return false;
2556          for (CodeableConcept item : this.type)
2557            if (!item.isEmpty())
2558              return true;
2559          return false;
2560        }
2561
2562        public CodeableConcept addType() { //3
2563          CodeableConcept t = new CodeableConcept();
2564          if (this.type == null)
2565            this.type = new ArrayList<CodeableConcept>();
2566          this.type.add(t);
2567          return t;
2568        }
2569
2570        public ResearchStudyOutcomeMeasureComponent addType(CodeableConcept t) { //3
2571          if (t == null)
2572            return this;
2573          if (this.type == null)
2574            this.type = new ArrayList<CodeableConcept>();
2575          this.type.add(t);
2576          return this;
2577        }
2578
2579        /**
2580         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
2581         */
2582        public CodeableConcept getTypeFirstRep() { 
2583          if (getType().isEmpty()) {
2584            addType();
2585          }
2586          return getType().get(0);
2587        }
2588
2589        /**
2590         * @return {@link #description} (Description of the outcome.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2591         */
2592        public MarkdownType getDescriptionElement() { 
2593          if (this.description == null)
2594            if (Configuration.errorOnAutoCreate())
2595              throw new Error("Attempt to auto-create ResearchStudyOutcomeMeasureComponent.description");
2596            else if (Configuration.doAutoCreate())
2597              this.description = new MarkdownType(); // bb
2598          return this.description;
2599        }
2600
2601        public boolean hasDescriptionElement() { 
2602          return this.description != null && !this.description.isEmpty();
2603        }
2604
2605        public boolean hasDescription() { 
2606          return this.description != null && !this.description.isEmpty();
2607        }
2608
2609        /**
2610         * @param value {@link #description} (Description of the outcome.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2611         */
2612        public ResearchStudyOutcomeMeasureComponent setDescriptionElement(MarkdownType value) { 
2613          this.description = value;
2614          return this;
2615        }
2616
2617        /**
2618         * @return Description of the outcome.
2619         */
2620        public String getDescription() { 
2621          return this.description == null ? null : this.description.getValue();
2622        }
2623
2624        /**
2625         * @param value Description of the outcome.
2626         */
2627        public ResearchStudyOutcomeMeasureComponent setDescription(String value) { 
2628          if (value == null)
2629            this.description = null;
2630          else {
2631            if (this.description == null)
2632              this.description = new MarkdownType();
2633            this.description.setValue(value);
2634          }
2635          return this;
2636        }
2637
2638        /**
2639         * @return {@link #reference} (Structured outcome definition.)
2640         */
2641        public Reference getReference() { 
2642          if (this.reference == null)
2643            if (Configuration.errorOnAutoCreate())
2644              throw new Error("Attempt to auto-create ResearchStudyOutcomeMeasureComponent.reference");
2645            else if (Configuration.doAutoCreate())
2646              this.reference = new Reference(); // cc
2647          return this.reference;
2648        }
2649
2650        public boolean hasReference() { 
2651          return this.reference != null && !this.reference.isEmpty();
2652        }
2653
2654        /**
2655         * @param value {@link #reference} (Structured outcome definition.)
2656         */
2657        public ResearchStudyOutcomeMeasureComponent setReference(Reference value) { 
2658          this.reference = value;
2659          return this;
2660        }
2661
2662        protected void listChildren(List<Property> children) {
2663          super.listChildren(children);
2664          children.add(new Property("name", "string", "Label for the outcome.", 0, 1, name));
2665          children.add(new Property("type", "CodeableConcept", "The parameter or characteristic being assessed as one of the values by which the study is assessed.", 0, java.lang.Integer.MAX_VALUE, type));
2666          children.add(new Property("description", "markdown", "Description of the outcome.", 0, 1, description));
2667          children.add(new Property("reference", "Reference(EvidenceVariable)", "Structured outcome definition.", 0, 1, reference));
2668        }
2669
2670        @Override
2671        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2672          switch (_hash) {
2673          case 3373707: /*name*/  return new Property("name", "string", "Label for the outcome.", 0, 1, name);
2674          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The parameter or characteristic being assessed as one of the values by which the study is assessed.", 0, java.lang.Integer.MAX_VALUE, type);
2675          case -1724546052: /*description*/  return new Property("description", "markdown", "Description of the outcome.", 0, 1, description);
2676          case -925155509: /*reference*/  return new Property("reference", "Reference(EvidenceVariable)", "Structured outcome definition.", 0, 1, reference);
2677          default: return super.getNamedProperty(_hash, _name, _checkValid);
2678          }
2679
2680        }
2681
2682      @Override
2683      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2684        switch (hash) {
2685        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2686        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
2687        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2688        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
2689        default: return super.getProperty(hash, name, checkValid);
2690        }
2691
2692      }
2693
2694      @Override
2695      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2696        switch (hash) {
2697        case 3373707: // name
2698          this.name = TypeConvertor.castToString(value); // StringType
2699          return value;
2700        case 3575610: // type
2701          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2702          return value;
2703        case -1724546052: // description
2704          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2705          return value;
2706        case -925155509: // reference
2707          this.reference = TypeConvertor.castToReference(value); // Reference
2708          return value;
2709        default: return super.setProperty(hash, name, value);
2710        }
2711
2712      }
2713
2714      @Override
2715      public Base setProperty(String name, Base value) throws FHIRException {
2716        if (name.equals("name")) {
2717          this.name = TypeConvertor.castToString(value); // StringType
2718        } else if (name.equals("type")) {
2719          this.getType().add(TypeConvertor.castToCodeableConcept(value));
2720        } else if (name.equals("description")) {
2721          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
2722        } else if (name.equals("reference")) {
2723          this.reference = TypeConvertor.castToReference(value); // Reference
2724        } else
2725          return super.setProperty(name, value);
2726        return value;
2727      }
2728
2729      @Override
2730      public Base makeProperty(int hash, String name) throws FHIRException {
2731        switch (hash) {
2732        case 3373707:  return getNameElement();
2733        case 3575610:  return addType(); 
2734        case -1724546052:  return getDescriptionElement();
2735        case -925155509:  return getReference();
2736        default: return super.makeProperty(hash, name);
2737        }
2738
2739      }
2740
2741      @Override
2742      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2743        switch (hash) {
2744        case 3373707: /*name*/ return new String[] {"string"};
2745        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2746        case -1724546052: /*description*/ return new String[] {"markdown"};
2747        case -925155509: /*reference*/ return new String[] {"Reference"};
2748        default: return super.getTypesForProperty(hash, name);
2749        }
2750
2751      }
2752
2753      @Override
2754      public Base addChild(String name) throws FHIRException {
2755        if (name.equals("name")) {
2756          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.outcomeMeasure.name");
2757        }
2758        else if (name.equals("type")) {
2759          return addType();
2760        }
2761        else if (name.equals("description")) {
2762          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.outcomeMeasure.description");
2763        }
2764        else if (name.equals("reference")) {
2765          this.reference = new Reference();
2766          return this.reference;
2767        }
2768        else
2769          return super.addChild(name);
2770      }
2771
2772      public ResearchStudyOutcomeMeasureComponent copy() {
2773        ResearchStudyOutcomeMeasureComponent dst = new ResearchStudyOutcomeMeasureComponent();
2774        copyValues(dst);
2775        return dst;
2776      }
2777
2778      public void copyValues(ResearchStudyOutcomeMeasureComponent dst) {
2779        super.copyValues(dst);
2780        dst.name = name == null ? null : name.copy();
2781        if (type != null) {
2782          dst.type = new ArrayList<CodeableConcept>();
2783          for (CodeableConcept i : type)
2784            dst.type.add(i.copy());
2785        };
2786        dst.description = description == null ? null : description.copy();
2787        dst.reference = reference == null ? null : reference.copy();
2788      }
2789
2790      @Override
2791      public boolean equalsDeep(Base other_) {
2792        if (!super.equalsDeep(other_))
2793          return false;
2794        if (!(other_ instanceof ResearchStudyOutcomeMeasureComponent))
2795          return false;
2796        ResearchStudyOutcomeMeasureComponent o = (ResearchStudyOutcomeMeasureComponent) other_;
2797        return compareDeep(name, o.name, true) && compareDeep(type, o.type, true) && compareDeep(description, o.description, true)
2798           && compareDeep(reference, o.reference, true);
2799      }
2800
2801      @Override
2802      public boolean equalsShallow(Base other_) {
2803        if (!super.equalsShallow(other_))
2804          return false;
2805        if (!(other_ instanceof ResearchStudyOutcomeMeasureComponent))
2806          return false;
2807        ResearchStudyOutcomeMeasureComponent o = (ResearchStudyOutcomeMeasureComponent) other_;
2808        return compareValues(name, o.name, true) && compareValues(description, o.description, true);
2809      }
2810
2811      public boolean isEmpty() {
2812        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, type, description
2813          , reference);
2814      }
2815
2816  public String fhirType() {
2817    return "ResearchStudy.outcomeMeasure";
2818
2819  }
2820
2821  }
2822
2823    @Block()
2824    public static class ResearchStudyWebLocationComponent extends BackboneElement implements IBaseBackboneElement {
2825        /**
2826         * Describes the nature of the location being specified.
2827         */
2828        @Child(name = "classifier", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
2829        @Description(shortDefinition="registry-page|recruitment-page|contact-page", formalDefinition="Describes the nature of the location being specified." )
2830        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/artifact-url-classifier")
2831        protected CodeableConcept classifier;
2832
2833        /**
2834         * The location address.
2835         */
2836        @Child(name = "url", type = {UriType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2837        @Description(shortDefinition="The location address", formalDefinition="The location address." )
2838        protected UriType url;
2839
2840        private static final long serialVersionUID = -1718812997L;
2841
2842    /**
2843     * Constructor
2844     */
2845      public ResearchStudyWebLocationComponent() {
2846        super();
2847      }
2848
2849    /**
2850     * Constructor
2851     */
2852      public ResearchStudyWebLocationComponent(String url) {
2853        super();
2854        this.setUrl(url);
2855      }
2856
2857        /**
2858         * @return {@link #classifier} (Describes the nature of the location being specified.)
2859         */
2860        public CodeableConcept getClassifier() { 
2861          if (this.classifier == null)
2862            if (Configuration.errorOnAutoCreate())
2863              throw new Error("Attempt to auto-create ResearchStudyWebLocationComponent.classifier");
2864            else if (Configuration.doAutoCreate())
2865              this.classifier = new CodeableConcept(); // cc
2866          return this.classifier;
2867        }
2868
2869        public boolean hasClassifier() { 
2870          return this.classifier != null && !this.classifier.isEmpty();
2871        }
2872
2873        /**
2874         * @param value {@link #classifier} (Describes the nature of the location being specified.)
2875         */
2876        public ResearchStudyWebLocationComponent setClassifier(CodeableConcept value) { 
2877          this.classifier = value;
2878          return this;
2879        }
2880
2881        /**
2882         * @return {@link #url} (The location address.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2883         */
2884        public UriType getUrlElement() { 
2885          if (this.url == null)
2886            if (Configuration.errorOnAutoCreate())
2887              throw new Error("Attempt to auto-create ResearchStudyWebLocationComponent.url");
2888            else if (Configuration.doAutoCreate())
2889              this.url = new UriType(); // bb
2890          return this.url;
2891        }
2892
2893        public boolean hasUrlElement() { 
2894          return this.url != null && !this.url.isEmpty();
2895        }
2896
2897        public boolean hasUrl() { 
2898          return this.url != null && !this.url.isEmpty();
2899        }
2900
2901        /**
2902         * @param value {@link #url} (The location address.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2903         */
2904        public ResearchStudyWebLocationComponent setUrlElement(UriType value) { 
2905          this.url = value;
2906          return this;
2907        }
2908
2909        /**
2910         * @return The location address.
2911         */
2912        public String getUrl() { 
2913          return this.url == null ? null : this.url.getValue();
2914        }
2915
2916        /**
2917         * @param value The location address.
2918         */
2919        public ResearchStudyWebLocationComponent setUrl(String value) { 
2920            if (this.url == null)
2921              this.url = new UriType();
2922            this.url.setValue(value);
2923          return this;
2924        }
2925
2926        protected void listChildren(List<Property> children) {
2927          super.listChildren(children);
2928          children.add(new Property("classifier", "CodeableConcept", "Describes the nature of the location being specified.", 0, 1, classifier));
2929          children.add(new Property("url", "uri", "The location address.", 0, 1, url));
2930        }
2931
2932        @Override
2933        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2934          switch (_hash) {
2935          case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "Describes the nature of the location being specified.", 0, 1, classifier);
2936          case 116079: /*url*/  return new Property("url", "uri", "The location address.", 0, 1, url);
2937          default: return super.getNamedProperty(_hash, _name, _checkValid);
2938          }
2939
2940        }
2941
2942      @Override
2943      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2944        switch (hash) {
2945        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : new Base[] {this.classifier}; // CodeableConcept
2946        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2947        default: return super.getProperty(hash, name, checkValid);
2948        }
2949
2950      }
2951
2952      @Override
2953      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2954        switch (hash) {
2955        case -281470431: // classifier
2956          this.classifier = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2957          return value;
2958        case 116079: // url
2959          this.url = TypeConvertor.castToUri(value); // UriType
2960          return value;
2961        default: return super.setProperty(hash, name, value);
2962        }
2963
2964      }
2965
2966      @Override
2967      public Base setProperty(String name, Base value) throws FHIRException {
2968        if (name.equals("classifier")) {
2969          this.classifier = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2970        } else if (name.equals("url")) {
2971          this.url = TypeConvertor.castToUri(value); // UriType
2972        } else
2973          return super.setProperty(name, value);
2974        return value;
2975      }
2976
2977      @Override
2978      public Base makeProperty(int hash, String name) throws FHIRException {
2979        switch (hash) {
2980        case -281470431:  return getClassifier();
2981        case 116079:  return getUrlElement();
2982        default: return super.makeProperty(hash, name);
2983        }
2984
2985      }
2986
2987      @Override
2988      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2989        switch (hash) {
2990        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
2991        case 116079: /*url*/ return new String[] {"uri"};
2992        default: return super.getTypesForProperty(hash, name);
2993        }
2994
2995      }
2996
2997      @Override
2998      public Base addChild(String name) throws FHIRException {
2999        if (name.equals("classifier")) {
3000          this.classifier = new CodeableConcept();
3001          return this.classifier;
3002        }
3003        else if (name.equals("url")) {
3004          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.webLocation.url");
3005        }
3006        else
3007          return super.addChild(name);
3008      }
3009
3010      public ResearchStudyWebLocationComponent copy() {
3011        ResearchStudyWebLocationComponent dst = new ResearchStudyWebLocationComponent();
3012        copyValues(dst);
3013        return dst;
3014      }
3015
3016      public void copyValues(ResearchStudyWebLocationComponent dst) {
3017        super.copyValues(dst);
3018        dst.classifier = classifier == null ? null : classifier.copy();
3019        dst.url = url == null ? null : url.copy();
3020      }
3021
3022      @Override
3023      public boolean equalsDeep(Base other_) {
3024        if (!super.equalsDeep(other_))
3025          return false;
3026        if (!(other_ instanceof ResearchStudyWebLocationComponent))
3027          return false;
3028        ResearchStudyWebLocationComponent o = (ResearchStudyWebLocationComponent) other_;
3029        return compareDeep(classifier, o.classifier, true) && compareDeep(url, o.url, true);
3030      }
3031
3032      @Override
3033      public boolean equalsShallow(Base other_) {
3034        if (!super.equalsShallow(other_))
3035          return false;
3036        if (!(other_ instanceof ResearchStudyWebLocationComponent))
3037          return false;
3038        ResearchStudyWebLocationComponent o = (ResearchStudyWebLocationComponent) other_;
3039        return compareValues(url, o.url, true);
3040      }
3041
3042      public boolean isEmpty() {
3043        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(classifier, url);
3044      }
3045
3046  public String fhirType() {
3047    return "ResearchStudy.webLocation";
3048
3049  }
3050
3051  }
3052
3053    /**
3054     * Canonical identifier for this study resource, represented as a globally unique URI.
3055     */
3056    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=false)
3057    @Description(shortDefinition="Canonical identifier for this study resource", formalDefinition="Canonical identifier for this study resource, represented as a globally unique URI." )
3058    protected UriType url;
3059
3060    /**
3061     * Identifiers assigned to this research study by the sponsor or other systems.
3062     */
3063    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3064    @Description(shortDefinition="Business Identifier for study", formalDefinition="Identifiers assigned to this research study by the sponsor or other systems." )
3065    protected List<Identifier> identifier;
3066
3067    /**
3068     * The business version for the study record.
3069     */
3070    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3071    @Description(shortDefinition="The business version for the study record", formalDefinition="The business version for the study record." )
3072    protected StringType version;
3073
3074    /**
3075     * Name for this study (computer friendly).
3076     */
3077    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
3078    @Description(shortDefinition="Name for this study (computer friendly)", formalDefinition="Name for this study (computer friendly)." )
3079    protected StringType name;
3080
3081    /**
3082     * The human readable name of the research study.
3083     */
3084    @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
3085    @Description(shortDefinition="Human readable name of the study", formalDefinition="The human readable name of the research study." )
3086    protected StringType title;
3087
3088    /**
3089     * Additional names for the study.
3090     */
3091    @Child(name = "label", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3092    @Description(shortDefinition="Additional names for the study", formalDefinition="Additional names for the study." )
3093    protected List<ResearchStudyLabelComponent> label;
3094
3095    /**
3096     * The set of steps expected to be performed as part of the execution of the study.
3097     */
3098    @Child(name = "protocol", type = {PlanDefinition.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3099    @Description(shortDefinition="Steps followed in executing study", formalDefinition="The set of steps expected to be performed as part of the execution of the study." )
3100    protected List<Reference> protocol;
3101
3102    /**
3103     * A larger research study of which this particular study is a component or step.
3104     */
3105    @Child(name = "partOf", type = {ResearchStudy.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3106    @Description(shortDefinition="Part of larger study", formalDefinition="A larger research study of which this particular study is a component or step." )
3107    protected List<Reference> partOf;
3108
3109    /**
3110     * Citations, references and other related documents.
3111     */
3112    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3113    @Description(shortDefinition="References and dependencies", formalDefinition="Citations, references and other related documents." )
3114    protected List<RelatedArtifact> relatedArtifact;
3115
3116    /**
3117     * The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.
3118     */
3119    @Child(name = "date", type = {DateTimeType.class}, order=9, min=0, max=1, modifier=false, summary=false)
3120    @Description(shortDefinition="Date the resource last changed", formalDefinition="The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes." )
3121    protected DateTimeType date;
3122
3123    /**
3124     * The publication state of the resource (not of the study).
3125     */
3126    @Child(name = "status", type = {CodeType.class}, order=10, min=1, max=1, modifier=true, summary=true)
3127    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The publication state of the resource (not of the study)." )
3128    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
3129    protected Enumeration<PublicationStatus> status;
3130
3131    /**
3132     * The type of study based upon the intent of the study activities. A classification of the intent of the study.
3133     */
3134    @Child(name = "primaryPurposeType", type = {CodeableConcept.class}, order=11, min=0, max=1, modifier=false, summary=true)
3135    @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 activities. A classification of the intent of the study." )
3136    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-prim-purp-type")
3137    protected CodeableConcept primaryPurposeType;
3138
3139    /**
3140     * The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.
3141     */
3142    @Child(name = "phase", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=false, summary=true)
3143    @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." )
3144    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-phase")
3145    protected CodeableConcept phase;
3146
3147    /**
3148     * Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.
3149     */
3150    @Child(name = "studyDesign", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3151    @Description(shortDefinition="Classifications of the study design characteristics", formalDefinition="Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc." )
3152    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/study-design")
3153    protected List<CodeableConcept> studyDesign;
3154
3155    /**
3156     * The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.
3157     */
3158    @Child(name = "focus", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3159    @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." )
3160    protected List<ResearchStudyFocusComponent> focus;
3161
3162    /**
3163     * 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.
3164     */
3165    @Child(name = "condition", type = {CodeableConcept.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3166    @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." )
3167    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
3168    protected List<CodeableConcept> condition;
3169
3170    /**
3171     * Key terms to aid in searching for or filtering the study.
3172     */
3173    @Child(name = "keyword", type = {CodeableConcept.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3174    @Description(shortDefinition="Used to search for the study", formalDefinition="Key terms to aid in searching for or filtering the study." )
3175    protected List<CodeableConcept> keyword;
3176
3177    /**
3178     * A country, state or other area where the study is taking place rather than its precise geographic location or address.
3179     */
3180    @Child(name = "region", type = {CodeableConcept.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3181    @Description(shortDefinition="Geographic area for the study", formalDefinition="A country, state or other area where the study is taking place rather than its precise geographic location or address." )
3182    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
3183    protected List<CodeableConcept> region;
3184
3185    /**
3186     * A brief text for explaining the study.
3187     */
3188    @Child(name = "descriptionSummary", type = {MarkdownType.class}, order=18, min=0, max=1, modifier=false, summary=false)
3189    @Description(shortDefinition="Brief text explaining the study", formalDefinition="A brief text for explaining the study." )
3190    protected MarkdownType descriptionSummary;
3191
3192    /**
3193     * A detailed and human-readable narrative of the study. E.g., study abstract.
3194     */
3195    @Child(name = "description", type = {MarkdownType.class}, order=19, min=0, max=1, modifier=false, summary=false)
3196    @Description(shortDefinition="Detailed narrative of the study", formalDefinition="A detailed and human-readable narrative of the study. E.g., study abstract." )
3197    protected MarkdownType description;
3198
3199    /**
3200     * Identifies the start date and the expected (or actual, depending on status) end date for the study.
3201     */
3202    @Child(name = "period", type = {Period.class}, order=20, min=0, max=1, modifier=false, summary=true)
3203    @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." )
3204    protected Period period;
3205
3206    /**
3207     * A facility in which study activities are conducted.
3208     */
3209    @Child(name = "site", type = {Location.class, ResearchStudy.class, Organization.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3210    @Description(shortDefinition="Facility where study activities are conducted", formalDefinition="A facility in which study activities are conducted." )
3211    protected List<Reference> site;
3212
3213    /**
3214     * Comments made about the study by the performer, subject or other participants.
3215     */
3216    @Child(name = "note", type = {Annotation.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3217    @Description(shortDefinition="Comments made about the study", formalDefinition="Comments made about the study by the performer, subject or other participants." )
3218    protected List<Annotation> note;
3219
3220    /**
3221     * Additional grouping mechanism or categorization of a research study. Example: FDA regulated device, FDA regulated drug, MPG Paragraph 23b (a German legal requirement), IRB-exempt, etc. Implementation Note: do not use the classifier element to support existing semantics that are already supported thru explicit elements in the resource.
3222     */
3223    @Child(name = "classifier", type = {CodeableConcept.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3224    @Description(shortDefinition="Classification for the study", formalDefinition="Additional grouping mechanism or categorization of a research study. Example: FDA regulated device, FDA regulated drug, MPG Paragraph 23b (a German legal requirement), IRB-exempt, etc. Implementation Note: do not use the classifier element to support existing semantics that are already supported thru explicit elements in the resource." )
3225    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-classifiers")
3226    protected List<CodeableConcept> classifier;
3227
3228    /**
3229     * Sponsors, collaborators, and other parties.
3230     */
3231    @Child(name = "associatedParty", type = {}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3232    @Description(shortDefinition="Sponsors, collaborators, and other parties", formalDefinition="Sponsors, collaborators, and other parties." )
3233    protected List<ResearchStudyAssociatedPartyComponent> associatedParty;
3234
3235    /**
3236     * Status of study with time for that status.
3237     */
3238    @Child(name = "progressStatus", type = {}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3239    @Description(shortDefinition="Status of study with time for that status", formalDefinition="Status of study with time for that status." )
3240    protected List<ResearchStudyProgressStatusComponent> progressStatus;
3241
3242    /**
3243     * A description and/or code explaining the premature termination of the study.
3244     */
3245    @Child(name = "whyStopped", type = {CodeableConcept.class}, order=26, min=0, max=1, modifier=false, summary=true)
3246    @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." )
3247    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/research-study-reason-stopped")
3248    protected CodeableConcept whyStopped;
3249
3250    /**
3251     * Target or actual group of participants enrolled in study.
3252     */
3253    @Child(name = "recruitment", type = {}, order=27, min=0, max=1, modifier=false, summary=true)
3254    @Description(shortDefinition="Target or actual group of participants enrolled in study", formalDefinition="Target or actual group of participants enrolled in study." )
3255    protected ResearchStudyRecruitmentComponent recruitment;
3256
3257    /**
3258     * 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.
3259     */
3260    @Child(name = "comparisonGroup", type = {}, order=28, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3261    @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." )
3262    protected List<ResearchStudyComparisonGroupComponent> comparisonGroup;
3263
3264    /**
3265     * 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.
3266     */
3267    @Child(name = "objective", type = {}, order=29, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3268    @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." )
3269    protected List<ResearchStudyObjectiveComponent> objective;
3270
3271    /**
3272     * An outcome or planned variable to measure during the study.
3273     */
3274    @Child(name = "outcomeMeasure", type = {}, order=30, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3275    @Description(shortDefinition="An outcome or planned variable to measure during the study", formalDefinition="An outcome or planned variable to measure during the study." )
3276    protected List<ResearchStudyOutcomeMeasureComponent> outcomeMeasure;
3277
3278    /**
3279     * Link to one or more sets of results generated by the study.  Could also link to a research registry holding the results such as ClinicalTrials.gov.
3280     */
3281    @Child(name = "result", type = {EvidenceReport.class, Citation.class, DiagnosticReport.class}, order=31, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
3282    @Description(shortDefinition="Link to results generated during the study", formalDefinition="Link to one or more sets of results generated by the study.  Could also link to a research registry holding the results such as ClinicalTrials.gov." )
3283    protected List<Reference> result;
3284
3285    /**
3286     * A general storage or archive location for the study.  This may contain an assortment of content which is not specified in advance.
3287     */
3288    @Child(name = "webLocation", type = {}, order=32, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3289    @Description(shortDefinition="Archive location for the study", formalDefinition="A general storage or archive location for the study.  This may contain an assortment of content which is not specified in advance." )
3290    protected List<ResearchStudyWebLocationComponent> webLocation;
3291
3292    private static final long serialVersionUID = 1995353917L;
3293
3294  /**
3295   * Constructor
3296   */
3297    public ResearchStudy() {
3298      super();
3299    }
3300
3301  /**
3302   * Constructor
3303   */
3304    public ResearchStudy(PublicationStatus status) {
3305      super();
3306      this.setStatus(status);
3307    }
3308
3309    /**
3310     * @return {@link #url} (Canonical identifier for this study resource, represented as a globally unique URI.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
3311     */
3312    public UriType getUrlElement() { 
3313      if (this.url == null)
3314        if (Configuration.errorOnAutoCreate())
3315          throw new Error("Attempt to auto-create ResearchStudy.url");
3316        else if (Configuration.doAutoCreate())
3317          this.url = new UriType(); // bb
3318      return this.url;
3319    }
3320
3321    public boolean hasUrlElement() { 
3322      return this.url != null && !this.url.isEmpty();
3323    }
3324
3325    public boolean hasUrl() { 
3326      return this.url != null && !this.url.isEmpty();
3327    }
3328
3329    /**
3330     * @param value {@link #url} (Canonical identifier for this study resource, represented as a globally unique URI.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
3331     */
3332    public ResearchStudy setUrlElement(UriType value) { 
3333      this.url = value;
3334      return this;
3335    }
3336
3337    /**
3338     * @return Canonical identifier for this study resource, represented as a globally unique URI.
3339     */
3340    public String getUrl() { 
3341      return this.url == null ? null : this.url.getValue();
3342    }
3343
3344    /**
3345     * @param value Canonical identifier for this study resource, represented as a globally unique URI.
3346     */
3347    public ResearchStudy setUrl(String value) { 
3348      if (Utilities.noString(value))
3349        this.url = null;
3350      else {
3351        if (this.url == null)
3352          this.url = new UriType();
3353        this.url.setValue(value);
3354      }
3355      return this;
3356    }
3357
3358    /**
3359     * @return {@link #identifier} (Identifiers assigned to this research study by the sponsor or other systems.)
3360     */
3361    public List<Identifier> getIdentifier() { 
3362      if (this.identifier == null)
3363        this.identifier = new ArrayList<Identifier>();
3364      return this.identifier;
3365    }
3366
3367    /**
3368     * @return Returns a reference to <code>this</code> for easy method chaining
3369     */
3370    public ResearchStudy setIdentifier(List<Identifier> theIdentifier) { 
3371      this.identifier = theIdentifier;
3372      return this;
3373    }
3374
3375    public boolean hasIdentifier() { 
3376      if (this.identifier == null)
3377        return false;
3378      for (Identifier item : this.identifier)
3379        if (!item.isEmpty())
3380          return true;
3381      return false;
3382    }
3383
3384    public Identifier addIdentifier() { //3
3385      Identifier t = new Identifier();
3386      if (this.identifier == null)
3387        this.identifier = new ArrayList<Identifier>();
3388      this.identifier.add(t);
3389      return t;
3390    }
3391
3392    public ResearchStudy addIdentifier(Identifier t) { //3
3393      if (t == null)
3394        return this;
3395      if (this.identifier == null)
3396        this.identifier = new ArrayList<Identifier>();
3397      this.identifier.add(t);
3398      return this;
3399    }
3400
3401    /**
3402     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
3403     */
3404    public Identifier getIdentifierFirstRep() { 
3405      if (getIdentifier().isEmpty()) {
3406        addIdentifier();
3407      }
3408      return getIdentifier().get(0);
3409    }
3410
3411    /**
3412     * @return {@link #version} (The business version for the study record.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
3413     */
3414    public StringType getVersionElement() { 
3415      if (this.version == null)
3416        if (Configuration.errorOnAutoCreate())
3417          throw new Error("Attempt to auto-create ResearchStudy.version");
3418        else if (Configuration.doAutoCreate())
3419          this.version = new StringType(); // bb
3420      return this.version;
3421    }
3422
3423    public boolean hasVersionElement() { 
3424      return this.version != null && !this.version.isEmpty();
3425    }
3426
3427    public boolean hasVersion() { 
3428      return this.version != null && !this.version.isEmpty();
3429    }
3430
3431    /**
3432     * @param value {@link #version} (The business version for the study record.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
3433     */
3434    public ResearchStudy setVersionElement(StringType value) { 
3435      this.version = value;
3436      return this;
3437    }
3438
3439    /**
3440     * @return The business version for the study record.
3441     */
3442    public String getVersion() { 
3443      return this.version == null ? null : this.version.getValue();
3444    }
3445
3446    /**
3447     * @param value The business version for the study record.
3448     */
3449    public ResearchStudy setVersion(String value) { 
3450      if (Utilities.noString(value))
3451        this.version = null;
3452      else {
3453        if (this.version == null)
3454          this.version = new StringType();
3455        this.version.setValue(value);
3456      }
3457      return this;
3458    }
3459
3460    /**
3461     * @return {@link #name} (Name for this study (computer friendly).). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
3462     */
3463    public StringType getNameElement() { 
3464      if (this.name == null)
3465        if (Configuration.errorOnAutoCreate())
3466          throw new Error("Attempt to auto-create ResearchStudy.name");
3467        else if (Configuration.doAutoCreate())
3468          this.name = new StringType(); // bb
3469      return this.name;
3470    }
3471
3472    public boolean hasNameElement() { 
3473      return this.name != null && !this.name.isEmpty();
3474    }
3475
3476    public boolean hasName() { 
3477      return this.name != null && !this.name.isEmpty();
3478    }
3479
3480    /**
3481     * @param value {@link #name} (Name for this study (computer friendly).). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
3482     */
3483    public ResearchStudy setNameElement(StringType value) { 
3484      this.name = value;
3485      return this;
3486    }
3487
3488    /**
3489     * @return Name for this study (computer friendly).
3490     */
3491    public String getName() { 
3492      return this.name == null ? null : this.name.getValue();
3493    }
3494
3495    /**
3496     * @param value Name for this study (computer friendly).
3497     */
3498    public ResearchStudy setName(String value) { 
3499      if (Utilities.noString(value))
3500        this.name = null;
3501      else {
3502        if (this.name == null)
3503          this.name = new StringType();
3504        this.name.setValue(value);
3505      }
3506      return this;
3507    }
3508
3509    /**
3510     * @return {@link #title} (The human readable name of the research study.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
3511     */
3512    public StringType getTitleElement() { 
3513      if (this.title == null)
3514        if (Configuration.errorOnAutoCreate())
3515          throw new Error("Attempt to auto-create ResearchStudy.title");
3516        else if (Configuration.doAutoCreate())
3517          this.title = new StringType(); // bb
3518      return this.title;
3519    }
3520
3521    public boolean hasTitleElement() { 
3522      return this.title != null && !this.title.isEmpty();
3523    }
3524
3525    public boolean hasTitle() { 
3526      return this.title != null && !this.title.isEmpty();
3527    }
3528
3529    /**
3530     * @param value {@link #title} (The human readable name of the research study.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
3531     */
3532    public ResearchStudy setTitleElement(StringType value) { 
3533      this.title = value;
3534      return this;
3535    }
3536
3537    /**
3538     * @return The human readable name of the research study.
3539     */
3540    public String getTitle() { 
3541      return this.title == null ? null : this.title.getValue();
3542    }
3543
3544    /**
3545     * @param value The human readable name of the research study.
3546     */
3547    public ResearchStudy setTitle(String value) { 
3548      if (Utilities.noString(value))
3549        this.title = null;
3550      else {
3551        if (this.title == null)
3552          this.title = new StringType();
3553        this.title.setValue(value);
3554      }
3555      return this;
3556    }
3557
3558    /**
3559     * @return {@link #label} (Additional names for the study.)
3560     */
3561    public List<ResearchStudyLabelComponent> getLabel() { 
3562      if (this.label == null)
3563        this.label = new ArrayList<ResearchStudyLabelComponent>();
3564      return this.label;
3565    }
3566
3567    /**
3568     * @return Returns a reference to <code>this</code> for easy method chaining
3569     */
3570    public ResearchStudy setLabel(List<ResearchStudyLabelComponent> theLabel) { 
3571      this.label = theLabel;
3572      return this;
3573    }
3574
3575    public boolean hasLabel() { 
3576      if (this.label == null)
3577        return false;
3578      for (ResearchStudyLabelComponent item : this.label)
3579        if (!item.isEmpty())
3580          return true;
3581      return false;
3582    }
3583
3584    public ResearchStudyLabelComponent addLabel() { //3
3585      ResearchStudyLabelComponent t = new ResearchStudyLabelComponent();
3586      if (this.label == null)
3587        this.label = new ArrayList<ResearchStudyLabelComponent>();
3588      this.label.add(t);
3589      return t;
3590    }
3591
3592    public ResearchStudy addLabel(ResearchStudyLabelComponent t) { //3
3593      if (t == null)
3594        return this;
3595      if (this.label == null)
3596        this.label = new ArrayList<ResearchStudyLabelComponent>();
3597      this.label.add(t);
3598      return this;
3599    }
3600
3601    /**
3602     * @return The first repetition of repeating field {@link #label}, creating it if it does not already exist {3}
3603     */
3604    public ResearchStudyLabelComponent getLabelFirstRep() { 
3605      if (getLabel().isEmpty()) {
3606        addLabel();
3607      }
3608      return getLabel().get(0);
3609    }
3610
3611    /**
3612     * @return {@link #protocol} (The set of steps expected to be performed as part of the execution of the study.)
3613     */
3614    public List<Reference> getProtocol() { 
3615      if (this.protocol == null)
3616        this.protocol = new ArrayList<Reference>();
3617      return this.protocol;
3618    }
3619
3620    /**
3621     * @return Returns a reference to <code>this</code> for easy method chaining
3622     */
3623    public ResearchStudy setProtocol(List<Reference> theProtocol) { 
3624      this.protocol = theProtocol;
3625      return this;
3626    }
3627
3628    public boolean hasProtocol() { 
3629      if (this.protocol == null)
3630        return false;
3631      for (Reference item : this.protocol)
3632        if (!item.isEmpty())
3633          return true;
3634      return false;
3635    }
3636
3637    public Reference addProtocol() { //3
3638      Reference t = new Reference();
3639      if (this.protocol == null)
3640        this.protocol = new ArrayList<Reference>();
3641      this.protocol.add(t);
3642      return t;
3643    }
3644
3645    public ResearchStudy addProtocol(Reference t) { //3
3646      if (t == null)
3647        return this;
3648      if (this.protocol == null)
3649        this.protocol = new ArrayList<Reference>();
3650      this.protocol.add(t);
3651      return this;
3652    }
3653
3654    /**
3655     * @return The first repetition of repeating field {@link #protocol}, creating it if it does not already exist {3}
3656     */
3657    public Reference getProtocolFirstRep() { 
3658      if (getProtocol().isEmpty()) {
3659        addProtocol();
3660      }
3661      return getProtocol().get(0);
3662    }
3663
3664    /**
3665     * @return {@link #partOf} (A larger research study of which this particular study is a component or step.)
3666     */
3667    public List<Reference> getPartOf() { 
3668      if (this.partOf == null)
3669        this.partOf = new ArrayList<Reference>();
3670      return this.partOf;
3671    }
3672
3673    /**
3674     * @return Returns a reference to <code>this</code> for easy method chaining
3675     */
3676    public ResearchStudy setPartOf(List<Reference> thePartOf) { 
3677      this.partOf = thePartOf;
3678      return this;
3679    }
3680
3681    public boolean hasPartOf() { 
3682      if (this.partOf == null)
3683        return false;
3684      for (Reference item : this.partOf)
3685        if (!item.isEmpty())
3686          return true;
3687      return false;
3688    }
3689
3690    public Reference addPartOf() { //3
3691      Reference t = new Reference();
3692      if (this.partOf == null)
3693        this.partOf = new ArrayList<Reference>();
3694      this.partOf.add(t);
3695      return t;
3696    }
3697
3698    public ResearchStudy addPartOf(Reference t) { //3
3699      if (t == null)
3700        return this;
3701      if (this.partOf == null)
3702        this.partOf = new ArrayList<Reference>();
3703      this.partOf.add(t);
3704      return this;
3705    }
3706
3707    /**
3708     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist {3}
3709     */
3710    public Reference getPartOfFirstRep() { 
3711      if (getPartOf().isEmpty()) {
3712        addPartOf();
3713      }
3714      return getPartOf().get(0);
3715    }
3716
3717    /**
3718     * @return {@link #relatedArtifact} (Citations, references and other related documents.)
3719     */
3720    public List<RelatedArtifact> getRelatedArtifact() { 
3721      if (this.relatedArtifact == null)
3722        this.relatedArtifact = new ArrayList<RelatedArtifact>();
3723      return this.relatedArtifact;
3724    }
3725
3726    /**
3727     * @return Returns a reference to <code>this</code> for easy method chaining
3728     */
3729    public ResearchStudy setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
3730      this.relatedArtifact = theRelatedArtifact;
3731      return this;
3732    }
3733
3734    public boolean hasRelatedArtifact() { 
3735      if (this.relatedArtifact == null)
3736        return false;
3737      for (RelatedArtifact item : this.relatedArtifact)
3738        if (!item.isEmpty())
3739          return true;
3740      return false;
3741    }
3742
3743    public RelatedArtifact addRelatedArtifact() { //3
3744      RelatedArtifact t = new RelatedArtifact();
3745      if (this.relatedArtifact == null)
3746        this.relatedArtifact = new ArrayList<RelatedArtifact>();
3747      this.relatedArtifact.add(t);
3748      return t;
3749    }
3750
3751    public ResearchStudy addRelatedArtifact(RelatedArtifact t) { //3
3752      if (t == null)
3753        return this;
3754      if (this.relatedArtifact == null)
3755        this.relatedArtifact = new ArrayList<RelatedArtifact>();
3756      this.relatedArtifact.add(t);
3757      return this;
3758    }
3759
3760    /**
3761     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
3762     */
3763    public RelatedArtifact getRelatedArtifactFirstRep() { 
3764      if (getRelatedArtifact().isEmpty()) {
3765        addRelatedArtifact();
3766      }
3767      return getRelatedArtifact().get(0);
3768    }
3769
3770    /**
3771     * @return {@link #date} (The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3772     */
3773    public DateTimeType getDateElement() { 
3774      if (this.date == null)
3775        if (Configuration.errorOnAutoCreate())
3776          throw new Error("Attempt to auto-create ResearchStudy.date");
3777        else if (Configuration.doAutoCreate())
3778          this.date = new DateTimeType(); // bb
3779      return this.date;
3780    }
3781
3782    public boolean hasDateElement() { 
3783      return this.date != null && !this.date.isEmpty();
3784    }
3785
3786    public boolean hasDate() { 
3787      return this.date != null && !this.date.isEmpty();
3788    }
3789
3790    /**
3791     * @param value {@link #date} (The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3792     */
3793    public ResearchStudy setDateElement(DateTimeType value) { 
3794      this.date = value;
3795      return this;
3796    }
3797
3798    /**
3799     * @return The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.
3800     */
3801    public Date getDate() { 
3802      return this.date == null ? null : this.date.getValue();
3803    }
3804
3805    /**
3806     * @param value The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.
3807     */
3808    public ResearchStudy setDate(Date value) { 
3809      if (value == null)
3810        this.date = null;
3811      else {
3812        if (this.date == null)
3813          this.date = new DateTimeType();
3814        this.date.setValue(value);
3815      }
3816      return this;
3817    }
3818
3819    /**
3820     * @return {@link #status} (The publication state of the resource (not of the study).). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3821     */
3822    public Enumeration<PublicationStatus> getStatusElement() { 
3823      if (this.status == null)
3824        if (Configuration.errorOnAutoCreate())
3825          throw new Error("Attempt to auto-create ResearchStudy.status");
3826        else if (Configuration.doAutoCreate())
3827          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
3828      return this.status;
3829    }
3830
3831    public boolean hasStatusElement() { 
3832      return this.status != null && !this.status.isEmpty();
3833    }
3834
3835    public boolean hasStatus() { 
3836      return this.status != null && !this.status.isEmpty();
3837    }
3838
3839    /**
3840     * @param value {@link #status} (The publication state of the resource (not of the study).). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3841     */
3842    public ResearchStudy setStatusElement(Enumeration<PublicationStatus> value) { 
3843      this.status = value;
3844      return this;
3845    }
3846
3847    /**
3848     * @return The publication state of the resource (not of the study).
3849     */
3850    public PublicationStatus getStatus() { 
3851      return this.status == null ? null : this.status.getValue();
3852    }
3853
3854    /**
3855     * @param value The publication state of the resource (not of the study).
3856     */
3857    public ResearchStudy setStatus(PublicationStatus value) { 
3858        if (this.status == null)
3859          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
3860        this.status.setValue(value);
3861      return this;
3862    }
3863
3864    /**
3865     * @return {@link #primaryPurposeType} (The type of study based upon the intent of the study activities. A classification of the intent of the study.)
3866     */
3867    public CodeableConcept getPrimaryPurposeType() { 
3868      if (this.primaryPurposeType == null)
3869        if (Configuration.errorOnAutoCreate())
3870          throw new Error("Attempt to auto-create ResearchStudy.primaryPurposeType");
3871        else if (Configuration.doAutoCreate())
3872          this.primaryPurposeType = new CodeableConcept(); // cc
3873      return this.primaryPurposeType;
3874    }
3875
3876    public boolean hasPrimaryPurposeType() { 
3877      return this.primaryPurposeType != null && !this.primaryPurposeType.isEmpty();
3878    }
3879
3880    /**
3881     * @param value {@link #primaryPurposeType} (The type of study based upon the intent of the study activities. A classification of the intent of the study.)
3882     */
3883    public ResearchStudy setPrimaryPurposeType(CodeableConcept value) { 
3884      this.primaryPurposeType = value;
3885      return this;
3886    }
3887
3888    /**
3889     * @return {@link #phase} (The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.)
3890     */
3891    public CodeableConcept getPhase() { 
3892      if (this.phase == null)
3893        if (Configuration.errorOnAutoCreate())
3894          throw new Error("Attempt to auto-create ResearchStudy.phase");
3895        else if (Configuration.doAutoCreate())
3896          this.phase = new CodeableConcept(); // cc
3897      return this.phase;
3898    }
3899
3900    public boolean hasPhase() { 
3901      return this.phase != null && !this.phase.isEmpty();
3902    }
3903
3904    /**
3905     * @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.)
3906     */
3907    public ResearchStudy setPhase(CodeableConcept value) { 
3908      this.phase = value;
3909      return this;
3910    }
3911
3912    /**
3913     * @return {@link #studyDesign} (Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.)
3914     */
3915    public List<CodeableConcept> getStudyDesign() { 
3916      if (this.studyDesign == null)
3917        this.studyDesign = new ArrayList<CodeableConcept>();
3918      return this.studyDesign;
3919    }
3920
3921    /**
3922     * @return Returns a reference to <code>this</code> for easy method chaining
3923     */
3924    public ResearchStudy setStudyDesign(List<CodeableConcept> theStudyDesign) { 
3925      this.studyDesign = theStudyDesign;
3926      return this;
3927    }
3928
3929    public boolean hasStudyDesign() { 
3930      if (this.studyDesign == null)
3931        return false;
3932      for (CodeableConcept item : this.studyDesign)
3933        if (!item.isEmpty())
3934          return true;
3935      return false;
3936    }
3937
3938    public CodeableConcept addStudyDesign() { //3
3939      CodeableConcept t = new CodeableConcept();
3940      if (this.studyDesign == null)
3941        this.studyDesign = new ArrayList<CodeableConcept>();
3942      this.studyDesign.add(t);
3943      return t;
3944    }
3945
3946    public ResearchStudy addStudyDesign(CodeableConcept t) { //3
3947      if (t == null)
3948        return this;
3949      if (this.studyDesign == null)
3950        this.studyDesign = new ArrayList<CodeableConcept>();
3951      this.studyDesign.add(t);
3952      return this;
3953    }
3954
3955    /**
3956     * @return The first repetition of repeating field {@link #studyDesign}, creating it if it does not already exist {3}
3957     */
3958    public CodeableConcept getStudyDesignFirstRep() { 
3959      if (getStudyDesign().isEmpty()) {
3960        addStudyDesign();
3961      }
3962      return getStudyDesign().get(0);
3963    }
3964
3965    /**
3966     * @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.)
3967     */
3968    public List<ResearchStudyFocusComponent> getFocus() { 
3969      if (this.focus == null)
3970        this.focus = new ArrayList<ResearchStudyFocusComponent>();
3971      return this.focus;
3972    }
3973
3974    /**
3975     * @return Returns a reference to <code>this</code> for easy method chaining
3976     */
3977    public ResearchStudy setFocus(List<ResearchStudyFocusComponent> theFocus) { 
3978      this.focus = theFocus;
3979      return this;
3980    }
3981
3982    public boolean hasFocus() { 
3983      if (this.focus == null)
3984        return false;
3985      for (ResearchStudyFocusComponent item : this.focus)
3986        if (!item.isEmpty())
3987          return true;
3988      return false;
3989    }
3990
3991    public ResearchStudyFocusComponent addFocus() { //3
3992      ResearchStudyFocusComponent t = new ResearchStudyFocusComponent();
3993      if (this.focus == null)
3994        this.focus = new ArrayList<ResearchStudyFocusComponent>();
3995      this.focus.add(t);
3996      return t;
3997    }
3998
3999    public ResearchStudy addFocus(ResearchStudyFocusComponent t) { //3
4000      if (t == null)
4001        return this;
4002      if (this.focus == null)
4003        this.focus = new ArrayList<ResearchStudyFocusComponent>();
4004      this.focus.add(t);
4005      return this;
4006    }
4007
4008    /**
4009     * @return The first repetition of repeating field {@link #focus}, creating it if it does not already exist {3}
4010     */
4011    public ResearchStudyFocusComponent getFocusFirstRep() { 
4012      if (getFocus().isEmpty()) {
4013        addFocus();
4014      }
4015      return getFocus().get(0);
4016    }
4017
4018    /**
4019     * @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.)
4020     */
4021    public List<CodeableConcept> getCondition() { 
4022      if (this.condition == null)
4023        this.condition = new ArrayList<CodeableConcept>();
4024      return this.condition;
4025    }
4026
4027    /**
4028     * @return Returns a reference to <code>this</code> for easy method chaining
4029     */
4030    public ResearchStudy setCondition(List<CodeableConcept> theCondition) { 
4031      this.condition = theCondition;
4032      return this;
4033    }
4034
4035    public boolean hasCondition() { 
4036      if (this.condition == null)
4037        return false;
4038      for (CodeableConcept item : this.condition)
4039        if (!item.isEmpty())
4040          return true;
4041      return false;
4042    }
4043
4044    public CodeableConcept addCondition() { //3
4045      CodeableConcept t = new CodeableConcept();
4046      if (this.condition == null)
4047        this.condition = new ArrayList<CodeableConcept>();
4048      this.condition.add(t);
4049      return t;
4050    }
4051
4052    public ResearchStudy addCondition(CodeableConcept t) { //3
4053      if (t == null)
4054        return this;
4055      if (this.condition == null)
4056        this.condition = new ArrayList<CodeableConcept>();
4057      this.condition.add(t);
4058      return this;
4059    }
4060
4061    /**
4062     * @return The first repetition of repeating field {@link #condition}, creating it if it does not already exist {3}
4063     */
4064    public CodeableConcept getConditionFirstRep() { 
4065      if (getCondition().isEmpty()) {
4066        addCondition();
4067      }
4068      return getCondition().get(0);
4069    }
4070
4071    /**
4072     * @return {@link #keyword} (Key terms to aid in searching for or filtering the study.)
4073     */
4074    public List<CodeableConcept> getKeyword() { 
4075      if (this.keyword == null)
4076        this.keyword = new ArrayList<CodeableConcept>();
4077      return this.keyword;
4078    }
4079
4080    /**
4081     * @return Returns a reference to <code>this</code> for easy method chaining
4082     */
4083    public ResearchStudy setKeyword(List<CodeableConcept> theKeyword) { 
4084      this.keyword = theKeyword;
4085      return this;
4086    }
4087
4088    public boolean hasKeyword() { 
4089      if (this.keyword == null)
4090        return false;
4091      for (CodeableConcept item : this.keyword)
4092        if (!item.isEmpty())
4093          return true;
4094      return false;
4095    }
4096
4097    public CodeableConcept addKeyword() { //3
4098      CodeableConcept t = new CodeableConcept();
4099      if (this.keyword == null)
4100        this.keyword = new ArrayList<CodeableConcept>();
4101      this.keyword.add(t);
4102      return t;
4103    }
4104
4105    public ResearchStudy addKeyword(CodeableConcept t) { //3
4106      if (t == null)
4107        return this;
4108      if (this.keyword == null)
4109        this.keyword = new ArrayList<CodeableConcept>();
4110      this.keyword.add(t);
4111      return this;
4112    }
4113
4114    /**
4115     * @return The first repetition of repeating field {@link #keyword}, creating it if it does not already exist {3}
4116     */
4117    public CodeableConcept getKeywordFirstRep() { 
4118      if (getKeyword().isEmpty()) {
4119        addKeyword();
4120      }
4121      return getKeyword().get(0);
4122    }
4123
4124    /**
4125     * @return {@link #region} (A country, state or other area where the study is taking place rather than its precise geographic location or address.)
4126     */
4127    public List<CodeableConcept> getRegion() { 
4128      if (this.region == null)
4129        this.region = new ArrayList<CodeableConcept>();
4130      return this.region;
4131    }
4132
4133    /**
4134     * @return Returns a reference to <code>this</code> for easy method chaining
4135     */
4136    public ResearchStudy setRegion(List<CodeableConcept> theRegion) { 
4137      this.region = theRegion;
4138      return this;
4139    }
4140
4141    public boolean hasRegion() { 
4142      if (this.region == null)
4143        return false;
4144      for (CodeableConcept item : this.region)
4145        if (!item.isEmpty())
4146          return true;
4147      return false;
4148    }
4149
4150    public CodeableConcept addRegion() { //3
4151      CodeableConcept t = new CodeableConcept();
4152      if (this.region == null)
4153        this.region = new ArrayList<CodeableConcept>();
4154      this.region.add(t);
4155      return t;
4156    }
4157
4158    public ResearchStudy addRegion(CodeableConcept t) { //3
4159      if (t == null)
4160        return this;
4161      if (this.region == null)
4162        this.region = new ArrayList<CodeableConcept>();
4163      this.region.add(t);
4164      return this;
4165    }
4166
4167    /**
4168     * @return The first repetition of repeating field {@link #region}, creating it if it does not already exist {3}
4169     */
4170    public CodeableConcept getRegionFirstRep() { 
4171      if (getRegion().isEmpty()) {
4172        addRegion();
4173      }
4174      return getRegion().get(0);
4175    }
4176
4177    /**
4178     * @return {@link #descriptionSummary} (A brief text for explaining the study.). This is the underlying object with id, value and extensions. The accessor "getDescriptionSummary" gives direct access to the value
4179     */
4180    public MarkdownType getDescriptionSummaryElement() { 
4181      if (this.descriptionSummary == null)
4182        if (Configuration.errorOnAutoCreate())
4183          throw new Error("Attempt to auto-create ResearchStudy.descriptionSummary");
4184        else if (Configuration.doAutoCreate())
4185          this.descriptionSummary = new MarkdownType(); // bb
4186      return this.descriptionSummary;
4187    }
4188
4189    public boolean hasDescriptionSummaryElement() { 
4190      return this.descriptionSummary != null && !this.descriptionSummary.isEmpty();
4191    }
4192
4193    public boolean hasDescriptionSummary() { 
4194      return this.descriptionSummary != null && !this.descriptionSummary.isEmpty();
4195    }
4196
4197    /**
4198     * @param value {@link #descriptionSummary} (A brief text for explaining the study.). This is the underlying object with id, value and extensions. The accessor "getDescriptionSummary" gives direct access to the value
4199     */
4200    public ResearchStudy setDescriptionSummaryElement(MarkdownType value) { 
4201      this.descriptionSummary = value;
4202      return this;
4203    }
4204
4205    /**
4206     * @return A brief text for explaining the study.
4207     */
4208    public String getDescriptionSummary() { 
4209      return this.descriptionSummary == null ? null : this.descriptionSummary.getValue();
4210    }
4211
4212    /**
4213     * @param value A brief text for explaining the study.
4214     */
4215    public ResearchStudy setDescriptionSummary(String value) { 
4216      if (value == null)
4217        this.descriptionSummary = null;
4218      else {
4219        if (this.descriptionSummary == null)
4220          this.descriptionSummary = new MarkdownType();
4221        this.descriptionSummary.setValue(value);
4222      }
4223      return this;
4224    }
4225
4226    /**
4227     * @return {@link #description} (A detailed and human-readable narrative of the study. E.g., study abstract.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4228     */
4229    public MarkdownType getDescriptionElement() { 
4230      if (this.description == null)
4231        if (Configuration.errorOnAutoCreate())
4232          throw new Error("Attempt to auto-create ResearchStudy.description");
4233        else if (Configuration.doAutoCreate())
4234          this.description = new MarkdownType(); // bb
4235      return this.description;
4236    }
4237
4238    public boolean hasDescriptionElement() { 
4239      return this.description != null && !this.description.isEmpty();
4240    }
4241
4242    public boolean hasDescription() { 
4243      return this.description != null && !this.description.isEmpty();
4244    }
4245
4246    /**
4247     * @param value {@link #description} (A detailed and human-readable narrative of the study. E.g., study abstract.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4248     */
4249    public ResearchStudy setDescriptionElement(MarkdownType value) { 
4250      this.description = value;
4251      return this;
4252    }
4253
4254    /**
4255     * @return A detailed and human-readable narrative of the study. E.g., study abstract.
4256     */
4257    public String getDescription() { 
4258      return this.description == null ? null : this.description.getValue();
4259    }
4260
4261    /**
4262     * @param value A detailed and human-readable narrative of the study. E.g., study abstract.
4263     */
4264    public ResearchStudy setDescription(String value) { 
4265      if (value == null)
4266        this.description = null;
4267      else {
4268        if (this.description == null)
4269          this.description = new MarkdownType();
4270        this.description.setValue(value);
4271      }
4272      return this;
4273    }
4274
4275    /**
4276     * @return {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
4277     */
4278    public Period getPeriod() { 
4279      if (this.period == null)
4280        if (Configuration.errorOnAutoCreate())
4281          throw new Error("Attempt to auto-create ResearchStudy.period");
4282        else if (Configuration.doAutoCreate())
4283          this.period = new Period(); // cc
4284      return this.period;
4285    }
4286
4287    public boolean hasPeriod() { 
4288      return this.period != null && !this.period.isEmpty();
4289    }
4290
4291    /**
4292     * @param value {@link #period} (Identifies the start date and the expected (or actual, depending on status) end date for the study.)
4293     */
4294    public ResearchStudy setPeriod(Period value) { 
4295      this.period = value;
4296      return this;
4297    }
4298
4299    /**
4300     * @return {@link #site} (A facility in which study activities are conducted.)
4301     */
4302    public List<Reference> getSite() { 
4303      if (this.site == null)
4304        this.site = new ArrayList<Reference>();
4305      return this.site;
4306    }
4307
4308    /**
4309     * @return Returns a reference to <code>this</code> for easy method chaining
4310     */
4311    public ResearchStudy setSite(List<Reference> theSite) { 
4312      this.site = theSite;
4313      return this;
4314    }
4315
4316    public boolean hasSite() { 
4317      if (this.site == null)
4318        return false;
4319      for (Reference item : this.site)
4320        if (!item.isEmpty())
4321          return true;
4322      return false;
4323    }
4324
4325    public Reference addSite() { //3
4326      Reference t = new Reference();
4327      if (this.site == null)
4328        this.site = new ArrayList<Reference>();
4329      this.site.add(t);
4330      return t;
4331    }
4332
4333    public ResearchStudy addSite(Reference t) { //3
4334      if (t == null)
4335        return this;
4336      if (this.site == null)
4337        this.site = new ArrayList<Reference>();
4338      this.site.add(t);
4339      return this;
4340    }
4341
4342    /**
4343     * @return The first repetition of repeating field {@link #site}, creating it if it does not already exist {3}
4344     */
4345    public Reference getSiteFirstRep() { 
4346      if (getSite().isEmpty()) {
4347        addSite();
4348      }
4349      return getSite().get(0);
4350    }
4351
4352    /**
4353     * @return {@link #note} (Comments made about the study by the performer, subject or other participants.)
4354     */
4355    public List<Annotation> getNote() { 
4356      if (this.note == null)
4357        this.note = new ArrayList<Annotation>();
4358      return this.note;
4359    }
4360
4361    /**
4362     * @return Returns a reference to <code>this</code> for easy method chaining
4363     */
4364    public ResearchStudy setNote(List<Annotation> theNote) { 
4365      this.note = theNote;
4366      return this;
4367    }
4368
4369    public boolean hasNote() { 
4370      if (this.note == null)
4371        return false;
4372      for (Annotation item : this.note)
4373        if (!item.isEmpty())
4374          return true;
4375      return false;
4376    }
4377
4378    public Annotation addNote() { //3
4379      Annotation t = new Annotation();
4380      if (this.note == null)
4381        this.note = new ArrayList<Annotation>();
4382      this.note.add(t);
4383      return t;
4384    }
4385
4386    public ResearchStudy addNote(Annotation t) { //3
4387      if (t == null)
4388        return this;
4389      if (this.note == null)
4390        this.note = new ArrayList<Annotation>();
4391      this.note.add(t);
4392      return this;
4393    }
4394
4395    /**
4396     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
4397     */
4398    public Annotation getNoteFirstRep() { 
4399      if (getNote().isEmpty()) {
4400        addNote();
4401      }
4402      return getNote().get(0);
4403    }
4404
4405    /**
4406     * @return {@link #classifier} (Additional grouping mechanism or categorization of a research study. Example: FDA regulated device, FDA regulated drug, MPG Paragraph 23b (a German legal requirement), IRB-exempt, etc. Implementation Note: do not use the classifier element to support existing semantics that are already supported thru explicit elements in the resource.)
4407     */
4408    public List<CodeableConcept> getClassifier() { 
4409      if (this.classifier == null)
4410        this.classifier = new ArrayList<CodeableConcept>();
4411      return this.classifier;
4412    }
4413
4414    /**
4415     * @return Returns a reference to <code>this</code> for easy method chaining
4416     */
4417    public ResearchStudy setClassifier(List<CodeableConcept> theClassifier) { 
4418      this.classifier = theClassifier;
4419      return this;
4420    }
4421
4422    public boolean hasClassifier() { 
4423      if (this.classifier == null)
4424        return false;
4425      for (CodeableConcept item : this.classifier)
4426        if (!item.isEmpty())
4427          return true;
4428      return false;
4429    }
4430
4431    public CodeableConcept addClassifier() { //3
4432      CodeableConcept t = new CodeableConcept();
4433      if (this.classifier == null)
4434        this.classifier = new ArrayList<CodeableConcept>();
4435      this.classifier.add(t);
4436      return t;
4437    }
4438
4439    public ResearchStudy addClassifier(CodeableConcept t) { //3
4440      if (t == null)
4441        return this;
4442      if (this.classifier == null)
4443        this.classifier = new ArrayList<CodeableConcept>();
4444      this.classifier.add(t);
4445      return this;
4446    }
4447
4448    /**
4449     * @return The first repetition of repeating field {@link #classifier}, creating it if it does not already exist {3}
4450     */
4451    public CodeableConcept getClassifierFirstRep() { 
4452      if (getClassifier().isEmpty()) {
4453        addClassifier();
4454      }
4455      return getClassifier().get(0);
4456    }
4457
4458    /**
4459     * @return {@link #associatedParty} (Sponsors, collaborators, and other parties.)
4460     */
4461    public List<ResearchStudyAssociatedPartyComponent> getAssociatedParty() { 
4462      if (this.associatedParty == null)
4463        this.associatedParty = new ArrayList<ResearchStudyAssociatedPartyComponent>();
4464      return this.associatedParty;
4465    }
4466
4467    /**
4468     * @return Returns a reference to <code>this</code> for easy method chaining
4469     */
4470    public ResearchStudy setAssociatedParty(List<ResearchStudyAssociatedPartyComponent> theAssociatedParty) { 
4471      this.associatedParty = theAssociatedParty;
4472      return this;
4473    }
4474
4475    public boolean hasAssociatedParty() { 
4476      if (this.associatedParty == null)
4477        return false;
4478      for (ResearchStudyAssociatedPartyComponent item : this.associatedParty)
4479        if (!item.isEmpty())
4480          return true;
4481      return false;
4482    }
4483
4484    public ResearchStudyAssociatedPartyComponent addAssociatedParty() { //3
4485      ResearchStudyAssociatedPartyComponent t = new ResearchStudyAssociatedPartyComponent();
4486      if (this.associatedParty == null)
4487        this.associatedParty = new ArrayList<ResearchStudyAssociatedPartyComponent>();
4488      this.associatedParty.add(t);
4489      return t;
4490    }
4491
4492    public ResearchStudy addAssociatedParty(ResearchStudyAssociatedPartyComponent t) { //3
4493      if (t == null)
4494        return this;
4495      if (this.associatedParty == null)
4496        this.associatedParty = new ArrayList<ResearchStudyAssociatedPartyComponent>();
4497      this.associatedParty.add(t);
4498      return this;
4499    }
4500
4501    /**
4502     * @return The first repetition of repeating field {@link #associatedParty}, creating it if it does not already exist {3}
4503     */
4504    public ResearchStudyAssociatedPartyComponent getAssociatedPartyFirstRep() { 
4505      if (getAssociatedParty().isEmpty()) {
4506        addAssociatedParty();
4507      }
4508      return getAssociatedParty().get(0);
4509    }
4510
4511    /**
4512     * @return {@link #progressStatus} (Status of study with time for that status.)
4513     */
4514    public List<ResearchStudyProgressStatusComponent> getProgressStatus() { 
4515      if (this.progressStatus == null)
4516        this.progressStatus = new ArrayList<ResearchStudyProgressStatusComponent>();
4517      return this.progressStatus;
4518    }
4519
4520    /**
4521     * @return Returns a reference to <code>this</code> for easy method chaining
4522     */
4523    public ResearchStudy setProgressStatus(List<ResearchStudyProgressStatusComponent> theProgressStatus) { 
4524      this.progressStatus = theProgressStatus;
4525      return this;
4526    }
4527
4528    public boolean hasProgressStatus() { 
4529      if (this.progressStatus == null)
4530        return false;
4531      for (ResearchStudyProgressStatusComponent item : this.progressStatus)
4532        if (!item.isEmpty())
4533          return true;
4534      return false;
4535    }
4536
4537    public ResearchStudyProgressStatusComponent addProgressStatus() { //3
4538      ResearchStudyProgressStatusComponent t = new ResearchStudyProgressStatusComponent();
4539      if (this.progressStatus == null)
4540        this.progressStatus = new ArrayList<ResearchStudyProgressStatusComponent>();
4541      this.progressStatus.add(t);
4542      return t;
4543    }
4544
4545    public ResearchStudy addProgressStatus(ResearchStudyProgressStatusComponent t) { //3
4546      if (t == null)
4547        return this;
4548      if (this.progressStatus == null)
4549        this.progressStatus = new ArrayList<ResearchStudyProgressStatusComponent>();
4550      this.progressStatus.add(t);
4551      return this;
4552    }
4553
4554    /**
4555     * @return The first repetition of repeating field {@link #progressStatus}, creating it if it does not already exist {3}
4556     */
4557    public ResearchStudyProgressStatusComponent getProgressStatusFirstRep() { 
4558      if (getProgressStatus().isEmpty()) {
4559        addProgressStatus();
4560      }
4561      return getProgressStatus().get(0);
4562    }
4563
4564    /**
4565     * @return {@link #whyStopped} (A description and/or code explaining the premature termination of the study.)
4566     */
4567    public CodeableConcept getWhyStopped() { 
4568      if (this.whyStopped == null)
4569        if (Configuration.errorOnAutoCreate())
4570          throw new Error("Attempt to auto-create ResearchStudy.whyStopped");
4571        else if (Configuration.doAutoCreate())
4572          this.whyStopped = new CodeableConcept(); // cc
4573      return this.whyStopped;
4574    }
4575
4576    public boolean hasWhyStopped() { 
4577      return this.whyStopped != null && !this.whyStopped.isEmpty();
4578    }
4579
4580    /**
4581     * @param value {@link #whyStopped} (A description and/or code explaining the premature termination of the study.)
4582     */
4583    public ResearchStudy setWhyStopped(CodeableConcept value) { 
4584      this.whyStopped = value;
4585      return this;
4586    }
4587
4588    /**
4589     * @return {@link #recruitment} (Target or actual group of participants enrolled in study.)
4590     */
4591    public ResearchStudyRecruitmentComponent getRecruitment() { 
4592      if (this.recruitment == null)
4593        if (Configuration.errorOnAutoCreate())
4594          throw new Error("Attempt to auto-create ResearchStudy.recruitment");
4595        else if (Configuration.doAutoCreate())
4596          this.recruitment = new ResearchStudyRecruitmentComponent(); // cc
4597      return this.recruitment;
4598    }
4599
4600    public boolean hasRecruitment() { 
4601      return this.recruitment != null && !this.recruitment.isEmpty();
4602    }
4603
4604    /**
4605     * @param value {@link #recruitment} (Target or actual group of participants enrolled in study.)
4606     */
4607    public ResearchStudy setRecruitment(ResearchStudyRecruitmentComponent value) { 
4608      this.recruitment = value;
4609      return this;
4610    }
4611
4612    /**
4613     * @return {@link #comparisonGroup} (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.)
4614     */
4615    public List<ResearchStudyComparisonGroupComponent> getComparisonGroup() { 
4616      if (this.comparisonGroup == null)
4617        this.comparisonGroup = new ArrayList<ResearchStudyComparisonGroupComponent>();
4618      return this.comparisonGroup;
4619    }
4620
4621    /**
4622     * @return Returns a reference to <code>this</code> for easy method chaining
4623     */
4624    public ResearchStudy setComparisonGroup(List<ResearchStudyComparisonGroupComponent> theComparisonGroup) { 
4625      this.comparisonGroup = theComparisonGroup;
4626      return this;
4627    }
4628
4629    public boolean hasComparisonGroup() { 
4630      if (this.comparisonGroup == null)
4631        return false;
4632      for (ResearchStudyComparisonGroupComponent item : this.comparisonGroup)
4633        if (!item.isEmpty())
4634          return true;
4635      return false;
4636    }
4637
4638    public ResearchStudyComparisonGroupComponent addComparisonGroup() { //3
4639      ResearchStudyComparisonGroupComponent t = new ResearchStudyComparisonGroupComponent();
4640      if (this.comparisonGroup == null)
4641        this.comparisonGroup = new ArrayList<ResearchStudyComparisonGroupComponent>();
4642      this.comparisonGroup.add(t);
4643      return t;
4644    }
4645
4646    public ResearchStudy addComparisonGroup(ResearchStudyComparisonGroupComponent t) { //3
4647      if (t == null)
4648        return this;
4649      if (this.comparisonGroup == null)
4650        this.comparisonGroup = new ArrayList<ResearchStudyComparisonGroupComponent>();
4651      this.comparisonGroup.add(t);
4652      return this;
4653    }
4654
4655    /**
4656     * @return The first repetition of repeating field {@link #comparisonGroup}, creating it if it does not already exist {3}
4657     */
4658    public ResearchStudyComparisonGroupComponent getComparisonGroupFirstRep() { 
4659      if (getComparisonGroup().isEmpty()) {
4660        addComparisonGroup();
4661      }
4662      return getComparisonGroup().get(0);
4663    }
4664
4665    /**
4666     * @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.)
4667     */
4668    public List<ResearchStudyObjectiveComponent> getObjective() { 
4669      if (this.objective == null)
4670        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
4671      return this.objective;
4672    }
4673
4674    /**
4675     * @return Returns a reference to <code>this</code> for easy method chaining
4676     */
4677    public ResearchStudy setObjective(List<ResearchStudyObjectiveComponent> theObjective) { 
4678      this.objective = theObjective;
4679      return this;
4680    }
4681
4682    public boolean hasObjective() { 
4683      if (this.objective == null)
4684        return false;
4685      for (ResearchStudyObjectiveComponent item : this.objective)
4686        if (!item.isEmpty())
4687          return true;
4688      return false;
4689    }
4690
4691    public ResearchStudyObjectiveComponent addObjective() { //3
4692      ResearchStudyObjectiveComponent t = new ResearchStudyObjectiveComponent();
4693      if (this.objective == null)
4694        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
4695      this.objective.add(t);
4696      return t;
4697    }
4698
4699    public ResearchStudy addObjective(ResearchStudyObjectiveComponent t) { //3
4700      if (t == null)
4701        return this;
4702      if (this.objective == null)
4703        this.objective = new ArrayList<ResearchStudyObjectiveComponent>();
4704      this.objective.add(t);
4705      return this;
4706    }
4707
4708    /**
4709     * @return The first repetition of repeating field {@link #objective}, creating it if it does not already exist {3}
4710     */
4711    public ResearchStudyObjectiveComponent getObjectiveFirstRep() { 
4712      if (getObjective().isEmpty()) {
4713        addObjective();
4714      }
4715      return getObjective().get(0);
4716    }
4717
4718    /**
4719     * @return {@link #outcomeMeasure} (An outcome or planned variable to measure during the study.)
4720     */
4721    public List<ResearchStudyOutcomeMeasureComponent> getOutcomeMeasure() { 
4722      if (this.outcomeMeasure == null)
4723        this.outcomeMeasure = new ArrayList<ResearchStudyOutcomeMeasureComponent>();
4724      return this.outcomeMeasure;
4725    }
4726
4727    /**
4728     * @return Returns a reference to <code>this</code> for easy method chaining
4729     */
4730    public ResearchStudy setOutcomeMeasure(List<ResearchStudyOutcomeMeasureComponent> theOutcomeMeasure) { 
4731      this.outcomeMeasure = theOutcomeMeasure;
4732      return this;
4733    }
4734
4735    public boolean hasOutcomeMeasure() { 
4736      if (this.outcomeMeasure == null)
4737        return false;
4738      for (ResearchStudyOutcomeMeasureComponent item : this.outcomeMeasure)
4739        if (!item.isEmpty())
4740          return true;
4741      return false;
4742    }
4743
4744    public ResearchStudyOutcomeMeasureComponent addOutcomeMeasure() { //3
4745      ResearchStudyOutcomeMeasureComponent t = new ResearchStudyOutcomeMeasureComponent();
4746      if (this.outcomeMeasure == null)
4747        this.outcomeMeasure = new ArrayList<ResearchStudyOutcomeMeasureComponent>();
4748      this.outcomeMeasure.add(t);
4749      return t;
4750    }
4751
4752    public ResearchStudy addOutcomeMeasure(ResearchStudyOutcomeMeasureComponent t) { //3
4753      if (t == null)
4754        return this;
4755      if (this.outcomeMeasure == null)
4756        this.outcomeMeasure = new ArrayList<ResearchStudyOutcomeMeasureComponent>();
4757      this.outcomeMeasure.add(t);
4758      return this;
4759    }
4760
4761    /**
4762     * @return The first repetition of repeating field {@link #outcomeMeasure}, creating it if it does not already exist {3}
4763     */
4764    public ResearchStudyOutcomeMeasureComponent getOutcomeMeasureFirstRep() { 
4765      if (getOutcomeMeasure().isEmpty()) {
4766        addOutcomeMeasure();
4767      }
4768      return getOutcomeMeasure().get(0);
4769    }
4770
4771    /**
4772     * @return {@link #result} (Link to one or more sets of results generated by the study.  Could also link to a research registry holding the results such as ClinicalTrials.gov.)
4773     */
4774    public List<Reference> getResult() { 
4775      if (this.result == null)
4776        this.result = new ArrayList<Reference>();
4777      return this.result;
4778    }
4779
4780    /**
4781     * @return Returns a reference to <code>this</code> for easy method chaining
4782     */
4783    public ResearchStudy setResult(List<Reference> theResult) { 
4784      this.result = theResult;
4785      return this;
4786    }
4787
4788    public boolean hasResult() { 
4789      if (this.result == null)
4790        return false;
4791      for (Reference item : this.result)
4792        if (!item.isEmpty())
4793          return true;
4794      return false;
4795    }
4796
4797    public Reference addResult() { //3
4798      Reference t = new Reference();
4799      if (this.result == null)
4800        this.result = new ArrayList<Reference>();
4801      this.result.add(t);
4802      return t;
4803    }
4804
4805    public ResearchStudy addResult(Reference t) { //3
4806      if (t == null)
4807        return this;
4808      if (this.result == null)
4809        this.result = new ArrayList<Reference>();
4810      this.result.add(t);
4811      return this;
4812    }
4813
4814    /**
4815     * @return The first repetition of repeating field {@link #result}, creating it if it does not already exist {3}
4816     */
4817    public Reference getResultFirstRep() { 
4818      if (getResult().isEmpty()) {
4819        addResult();
4820      }
4821      return getResult().get(0);
4822    }
4823
4824    /**
4825     * @return {@link #webLocation} (A general storage or archive location for the study.  This may contain an assortment of content which is not specified in advance.)
4826     */
4827    public List<ResearchStudyWebLocationComponent> getWebLocation() { 
4828      if (this.webLocation == null)
4829        this.webLocation = new ArrayList<ResearchStudyWebLocationComponent>();
4830      return this.webLocation;
4831    }
4832
4833    /**
4834     * @return Returns a reference to <code>this</code> for easy method chaining
4835     */
4836    public ResearchStudy setWebLocation(List<ResearchStudyWebLocationComponent> theWebLocation) { 
4837      this.webLocation = theWebLocation;
4838      return this;
4839    }
4840
4841    public boolean hasWebLocation() { 
4842      if (this.webLocation == null)
4843        return false;
4844      for (ResearchStudyWebLocationComponent item : this.webLocation)
4845        if (!item.isEmpty())
4846          return true;
4847      return false;
4848    }
4849
4850    public ResearchStudyWebLocationComponent addWebLocation() { //3
4851      ResearchStudyWebLocationComponent t = new ResearchStudyWebLocationComponent();
4852      if (this.webLocation == null)
4853        this.webLocation = new ArrayList<ResearchStudyWebLocationComponent>();
4854      this.webLocation.add(t);
4855      return t;
4856    }
4857
4858    public ResearchStudy addWebLocation(ResearchStudyWebLocationComponent t) { //3
4859      if (t == null)
4860        return this;
4861      if (this.webLocation == null)
4862        this.webLocation = new ArrayList<ResearchStudyWebLocationComponent>();
4863      this.webLocation.add(t);
4864      return this;
4865    }
4866
4867    /**
4868     * @return The first repetition of repeating field {@link #webLocation}, creating it if it does not already exist {3}
4869     */
4870    public ResearchStudyWebLocationComponent getWebLocationFirstRep() { 
4871      if (getWebLocation().isEmpty()) {
4872        addWebLocation();
4873      }
4874      return getWebLocation().get(0);
4875    }
4876
4877      protected void listChildren(List<Property> children) {
4878        super.listChildren(children);
4879        children.add(new Property("url", "uri", "Canonical identifier for this study resource, represented as a globally unique URI.", 0, 1, url));
4880        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));
4881        children.add(new Property("version", "string", "The business version for the study record.", 0, 1, version));
4882        children.add(new Property("name", "string", "Name for this study (computer friendly).", 0, 1, name));
4883        children.add(new Property("title", "string", "The human readable name of the research study.", 0, 1, title));
4884        children.add(new Property("label", "", "Additional names for the study.", 0, java.lang.Integer.MAX_VALUE, label));
4885        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));
4886        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));
4887        children.add(new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
4888        children.add(new Property("date", "dateTime", "The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.", 0, 1, date));
4889        children.add(new Property("status", "code", "The publication state of the resource (not of the study).", 0, 1, status));
4890        children.add(new Property("primaryPurposeType", "CodeableConcept", "The type of study based upon the intent of the study activities. A classification of the intent of the study.", 0, 1, primaryPurposeType));
4891        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));
4892        children.add(new Property("studyDesign", "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, studyDesign));
4893        children.add(new Property("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.", 0, java.lang.Integer.MAX_VALUE, focus));
4894        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));
4895        children.add(new Property("keyword", "CodeableConcept", "Key terms to aid in searching for or filtering the study.", 0, java.lang.Integer.MAX_VALUE, keyword));
4896        children.add(new Property("region", "CodeableConcept", "A country, state or other area where the study is taking place rather than its precise geographic location or address.", 0, java.lang.Integer.MAX_VALUE, region));
4897        children.add(new Property("descriptionSummary", "markdown", "A brief text for explaining the study.", 0, 1, descriptionSummary));
4898        children.add(new Property("description", "markdown", "A detailed and human-readable narrative of the study. E.g., study abstract.", 0, 1, description));
4899        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));
4900        children.add(new Property("site", "Reference(Location|ResearchStudy|Organization)", "A facility in which study activities are conducted.", 0, java.lang.Integer.MAX_VALUE, site));
4901        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));
4902        children.add(new Property("classifier", "CodeableConcept", "Additional grouping mechanism or categorization of a research study. Example: FDA regulated device, FDA regulated drug, MPG Paragraph 23b (a German legal requirement), IRB-exempt, etc. Implementation Note: do not use the classifier element to support existing semantics that are already supported thru explicit elements in the resource.", 0, java.lang.Integer.MAX_VALUE, classifier));
4903        children.add(new Property("associatedParty", "", "Sponsors, collaborators, and other parties.", 0, java.lang.Integer.MAX_VALUE, associatedParty));
4904        children.add(new Property("progressStatus", "", "Status of study with time for that status.", 0, java.lang.Integer.MAX_VALUE, progressStatus));
4905        children.add(new Property("whyStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, whyStopped));
4906        children.add(new Property("recruitment", "", "Target or actual group of participants enrolled in study.", 0, 1, recruitment));
4907        children.add(new Property("comparisonGroup", "", "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, comparisonGroup));
4908        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));
4909        children.add(new Property("outcomeMeasure", "", "An outcome or planned variable to measure during the study.", 0, java.lang.Integer.MAX_VALUE, outcomeMeasure));
4910        children.add(new Property("result", "Reference(EvidenceReport|Citation|DiagnosticReport)", "Link to one or more sets of results generated by the study.  Could also link to a research registry holding the results such as ClinicalTrials.gov.", 0, java.lang.Integer.MAX_VALUE, result));
4911        children.add(new Property("webLocation", "", "A general storage or archive location for the study.  This may contain an assortment of content which is not specified in advance.", 0, java.lang.Integer.MAX_VALUE, webLocation));
4912      }
4913
4914      @Override
4915      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4916        switch (_hash) {
4917        case 116079: /*url*/  return new Property("url", "uri", "Canonical identifier for this study resource, represented as a globally unique URI.", 0, 1, url);
4918        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);
4919        case 351608024: /*version*/  return new Property("version", "string", "The business version for the study record.", 0, 1, version);
4920        case 3373707: /*name*/  return new Property("name", "string", "Name for this study (computer friendly).", 0, 1, name);
4921        case 110371416: /*title*/  return new Property("title", "string", "The human readable name of the research study.", 0, 1, title);
4922        case 102727412: /*label*/  return new Property("label", "", "Additional names for the study.", 0, java.lang.Integer.MAX_VALUE, label);
4923        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);
4924        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);
4925        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Citations, references and other related documents.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
4926        case 3076014: /*date*/  return new Property("date", "dateTime", "The date (and optionally time) when the ResearchStudy Resource was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the ResearchStudy Resource changes.", 0, 1, date);
4927        case -892481550: /*status*/  return new Property("status", "code", "The publication state of the resource (not of the study).", 0, 1, status);
4928        case -2132842986: /*primaryPurposeType*/  return new Property("primaryPurposeType", "CodeableConcept", "The type of study based upon the intent of the study activities. A classification of the intent of the study.", 0, 1, primaryPurposeType);
4929        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);
4930        case 1709211879: /*studyDesign*/  return new Property("studyDesign", "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, studyDesign);
4931        case 97604824: /*focus*/  return new Property("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.", 0, java.lang.Integer.MAX_VALUE, focus);
4932        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);
4933        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);
4934        case -934795532: /*region*/  return new Property("region", "CodeableConcept", "A country, state or other area where the study is taking place rather than its precise geographic location or address.", 0, java.lang.Integer.MAX_VALUE, region);
4935        case 21530634: /*descriptionSummary*/  return new Property("descriptionSummary", "markdown", "A brief text for explaining the study.", 0, 1, descriptionSummary);
4936        case -1724546052: /*description*/  return new Property("description", "markdown", "A detailed and human-readable narrative of the study. E.g., study abstract.", 0, 1, description);
4937        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);
4938        case 3530567: /*site*/  return new Property("site", "Reference(Location|ResearchStudy|Organization)", "A facility in which study activities are conducted.", 0, java.lang.Integer.MAX_VALUE, site);
4939        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);
4940        case -281470431: /*classifier*/  return new Property("classifier", "CodeableConcept", "Additional grouping mechanism or categorization of a research study. Example: FDA regulated device, FDA regulated drug, MPG Paragraph 23b (a German legal requirement), IRB-exempt, etc. Implementation Note: do not use the classifier element to support existing semantics that are already supported thru explicit elements in the resource.", 0, java.lang.Integer.MAX_VALUE, classifier);
4941        case -1841460864: /*associatedParty*/  return new Property("associatedParty", "", "Sponsors, collaborators, and other parties.", 0, java.lang.Integer.MAX_VALUE, associatedParty);
4942        case -1897502593: /*progressStatus*/  return new Property("progressStatus", "", "Status of study with time for that status.", 0, java.lang.Integer.MAX_VALUE, progressStatus);
4943        case -699986715: /*whyStopped*/  return new Property("whyStopped", "CodeableConcept", "A description and/or code explaining the premature termination of the study.", 0, 1, whyStopped);
4944        case 780783004: /*recruitment*/  return new Property("recruitment", "", "Target or actual group of participants enrolled in study.", 0, 1, recruitment);
4945        case -138266634: /*comparisonGroup*/  return new Property("comparisonGroup", "", "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, comparisonGroup);
4946        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);
4947        case -1510689364: /*outcomeMeasure*/  return new Property("outcomeMeasure", "", "An outcome or planned variable to measure during the study.", 0, java.lang.Integer.MAX_VALUE, outcomeMeasure);
4948        case -934426595: /*result*/  return new Property("result", "Reference(EvidenceReport|Citation|DiagnosticReport)", "Link to one or more sets of results generated by the study.  Could also link to a research registry holding the results such as ClinicalTrials.gov.", 0, java.lang.Integer.MAX_VALUE, result);
4949        case -828032215: /*webLocation*/  return new Property("webLocation", "", "A general storage or archive location for the study.  This may contain an assortment of content which is not specified in advance.", 0, java.lang.Integer.MAX_VALUE, webLocation);
4950        default: return super.getNamedProperty(_hash, _name, _checkValid);
4951        }
4952
4953      }
4954
4955      @Override
4956      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4957        switch (hash) {
4958        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
4959        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
4960        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
4961        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
4962        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
4963        case 102727412: /*label*/ return this.label == null ? new Base[0] : this.label.toArray(new Base[this.label.size()]); // ResearchStudyLabelComponent
4964        case -989163880: /*protocol*/ return this.protocol == null ? new Base[0] : this.protocol.toArray(new Base[this.protocol.size()]); // Reference
4965        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
4966        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
4967        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
4968        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
4969        case -2132842986: /*primaryPurposeType*/ return this.primaryPurposeType == null ? new Base[0] : new Base[] {this.primaryPurposeType}; // CodeableConcept
4970        case 106629499: /*phase*/ return this.phase == null ? new Base[0] : new Base[] {this.phase}; // CodeableConcept
4971        case 1709211879: /*studyDesign*/ return this.studyDesign == null ? new Base[0] : this.studyDesign.toArray(new Base[this.studyDesign.size()]); // CodeableConcept
4972        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // ResearchStudyFocusComponent
4973        case -861311717: /*condition*/ return this.condition == null ? new Base[0] : this.condition.toArray(new Base[this.condition.size()]); // CodeableConcept
4974        case -814408215: /*keyword*/ return this.keyword == null ? new Base[0] : this.keyword.toArray(new Base[this.keyword.size()]); // CodeableConcept
4975        case -934795532: /*region*/ return this.region == null ? new Base[0] : this.region.toArray(new Base[this.region.size()]); // CodeableConcept
4976        case 21530634: /*descriptionSummary*/ return this.descriptionSummary == null ? new Base[0] : new Base[] {this.descriptionSummary}; // MarkdownType
4977        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
4978        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
4979        case 3530567: /*site*/ return this.site == null ? new Base[0] : this.site.toArray(new Base[this.site.size()]); // Reference
4980        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
4981        case -281470431: /*classifier*/ return this.classifier == null ? new Base[0] : this.classifier.toArray(new Base[this.classifier.size()]); // CodeableConcept
4982        case -1841460864: /*associatedParty*/ return this.associatedParty == null ? new Base[0] : this.associatedParty.toArray(new Base[this.associatedParty.size()]); // ResearchStudyAssociatedPartyComponent
4983        case -1897502593: /*progressStatus*/ return this.progressStatus == null ? new Base[0] : this.progressStatus.toArray(new Base[this.progressStatus.size()]); // ResearchStudyProgressStatusComponent
4984        case -699986715: /*whyStopped*/ return this.whyStopped == null ? new Base[0] : new Base[] {this.whyStopped}; // CodeableConcept
4985        case 780783004: /*recruitment*/ return this.recruitment == null ? new Base[0] : new Base[] {this.recruitment}; // ResearchStudyRecruitmentComponent
4986        case -138266634: /*comparisonGroup*/ return this.comparisonGroup == null ? new Base[0] : this.comparisonGroup.toArray(new Base[this.comparisonGroup.size()]); // ResearchStudyComparisonGroupComponent
4987        case -1489585863: /*objective*/ return this.objective == null ? new Base[0] : this.objective.toArray(new Base[this.objective.size()]); // ResearchStudyObjectiveComponent
4988        case -1510689364: /*outcomeMeasure*/ return this.outcomeMeasure == null ? new Base[0] : this.outcomeMeasure.toArray(new Base[this.outcomeMeasure.size()]); // ResearchStudyOutcomeMeasureComponent
4989        case -934426595: /*result*/ return this.result == null ? new Base[0] : this.result.toArray(new Base[this.result.size()]); // Reference
4990        case -828032215: /*webLocation*/ return this.webLocation == null ? new Base[0] : this.webLocation.toArray(new Base[this.webLocation.size()]); // ResearchStudyWebLocationComponent
4991        default: return super.getProperty(hash, name, checkValid);
4992        }
4993
4994      }
4995
4996      @Override
4997      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4998        switch (hash) {
4999        case 116079: // url
5000          this.url = TypeConvertor.castToUri(value); // UriType
5001          return value;
5002        case -1618432855: // identifier
5003          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
5004          return value;
5005        case 351608024: // version
5006          this.version = TypeConvertor.castToString(value); // StringType
5007          return value;
5008        case 3373707: // name
5009          this.name = TypeConvertor.castToString(value); // StringType
5010          return value;
5011        case 110371416: // title
5012          this.title = TypeConvertor.castToString(value); // StringType
5013          return value;
5014        case 102727412: // label
5015          this.getLabel().add((ResearchStudyLabelComponent) value); // ResearchStudyLabelComponent
5016          return value;
5017        case -989163880: // protocol
5018          this.getProtocol().add(TypeConvertor.castToReference(value)); // Reference
5019          return value;
5020        case -995410646: // partOf
5021          this.getPartOf().add(TypeConvertor.castToReference(value)); // Reference
5022          return value;
5023        case 666807069: // relatedArtifact
5024          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
5025          return value;
5026        case 3076014: // date
5027          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5028          return value;
5029        case -892481550: // status
5030          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5031          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5032          return value;
5033        case -2132842986: // primaryPurposeType
5034          this.primaryPurposeType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5035          return value;
5036        case 106629499: // phase
5037          this.phase = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5038          return value;
5039        case 1709211879: // studyDesign
5040          this.getStudyDesign().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5041          return value;
5042        case 97604824: // focus
5043          this.getFocus().add((ResearchStudyFocusComponent) value); // ResearchStudyFocusComponent
5044          return value;
5045        case -861311717: // condition
5046          this.getCondition().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5047          return value;
5048        case -814408215: // keyword
5049          this.getKeyword().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5050          return value;
5051        case -934795532: // region
5052          this.getRegion().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5053          return value;
5054        case 21530634: // descriptionSummary
5055          this.descriptionSummary = TypeConvertor.castToMarkdown(value); // MarkdownType
5056          return value;
5057        case -1724546052: // description
5058          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5059          return value;
5060        case -991726143: // period
5061          this.period = TypeConvertor.castToPeriod(value); // Period
5062          return value;
5063        case 3530567: // site
5064          this.getSite().add(TypeConvertor.castToReference(value)); // Reference
5065          return value;
5066        case 3387378: // note
5067          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
5068          return value;
5069        case -281470431: // classifier
5070          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5071          return value;
5072        case -1841460864: // associatedParty
5073          this.getAssociatedParty().add((ResearchStudyAssociatedPartyComponent) value); // ResearchStudyAssociatedPartyComponent
5074          return value;
5075        case -1897502593: // progressStatus
5076          this.getProgressStatus().add((ResearchStudyProgressStatusComponent) value); // ResearchStudyProgressStatusComponent
5077          return value;
5078        case -699986715: // whyStopped
5079          this.whyStopped = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5080          return value;
5081        case 780783004: // recruitment
5082          this.recruitment = (ResearchStudyRecruitmentComponent) value; // ResearchStudyRecruitmentComponent
5083          return value;
5084        case -138266634: // comparisonGroup
5085          this.getComparisonGroup().add((ResearchStudyComparisonGroupComponent) value); // ResearchStudyComparisonGroupComponent
5086          return value;
5087        case -1489585863: // objective
5088          this.getObjective().add((ResearchStudyObjectiveComponent) value); // ResearchStudyObjectiveComponent
5089          return value;
5090        case -1510689364: // outcomeMeasure
5091          this.getOutcomeMeasure().add((ResearchStudyOutcomeMeasureComponent) value); // ResearchStudyOutcomeMeasureComponent
5092          return value;
5093        case -934426595: // result
5094          this.getResult().add(TypeConvertor.castToReference(value)); // Reference
5095          return value;
5096        case -828032215: // webLocation
5097          this.getWebLocation().add((ResearchStudyWebLocationComponent) value); // ResearchStudyWebLocationComponent
5098          return value;
5099        default: return super.setProperty(hash, name, value);
5100        }
5101
5102      }
5103
5104      @Override
5105      public Base setProperty(String name, Base value) throws FHIRException {
5106        if (name.equals("url")) {
5107          this.url = TypeConvertor.castToUri(value); // UriType
5108        } else if (name.equals("identifier")) {
5109          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
5110        } else if (name.equals("version")) {
5111          this.version = TypeConvertor.castToString(value); // StringType
5112        } else if (name.equals("name")) {
5113          this.name = TypeConvertor.castToString(value); // StringType
5114        } else if (name.equals("title")) {
5115          this.title = TypeConvertor.castToString(value); // StringType
5116        } else if (name.equals("label")) {
5117          this.getLabel().add((ResearchStudyLabelComponent) value);
5118        } else if (name.equals("protocol")) {
5119          this.getProtocol().add(TypeConvertor.castToReference(value));
5120        } else if (name.equals("partOf")) {
5121          this.getPartOf().add(TypeConvertor.castToReference(value));
5122        } else if (name.equals("relatedArtifact")) {
5123          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
5124        } else if (name.equals("date")) {
5125          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5126        } else if (name.equals("status")) {
5127          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5128          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5129        } else if (name.equals("primaryPurposeType")) {
5130          this.primaryPurposeType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5131        } else if (name.equals("phase")) {
5132          this.phase = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5133        } else if (name.equals("studyDesign")) {
5134          this.getStudyDesign().add(TypeConvertor.castToCodeableConcept(value));
5135        } else if (name.equals("focus")) {
5136          this.getFocus().add((ResearchStudyFocusComponent) value);
5137        } else if (name.equals("condition")) {
5138          this.getCondition().add(TypeConvertor.castToCodeableConcept(value));
5139        } else if (name.equals("keyword")) {
5140          this.getKeyword().add(TypeConvertor.castToCodeableConcept(value));
5141        } else if (name.equals("region")) {
5142          this.getRegion().add(TypeConvertor.castToCodeableConcept(value));
5143        } else if (name.equals("descriptionSummary")) {
5144          this.descriptionSummary = TypeConvertor.castToMarkdown(value); // MarkdownType
5145        } else if (name.equals("description")) {
5146          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5147        } else if (name.equals("period")) {
5148          this.period = TypeConvertor.castToPeriod(value); // Period
5149        } else if (name.equals("site")) {
5150          this.getSite().add(TypeConvertor.castToReference(value));
5151        } else if (name.equals("note")) {
5152          this.getNote().add(TypeConvertor.castToAnnotation(value));
5153        } else if (name.equals("classifier")) {
5154          this.getClassifier().add(TypeConvertor.castToCodeableConcept(value));
5155        } else if (name.equals("associatedParty")) {
5156          this.getAssociatedParty().add((ResearchStudyAssociatedPartyComponent) value);
5157        } else if (name.equals("progressStatus")) {
5158          this.getProgressStatus().add((ResearchStudyProgressStatusComponent) value);
5159        } else if (name.equals("whyStopped")) {
5160          this.whyStopped = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
5161        } else if (name.equals("recruitment")) {
5162          this.recruitment = (ResearchStudyRecruitmentComponent) value; // ResearchStudyRecruitmentComponent
5163        } else if (name.equals("comparisonGroup")) {
5164          this.getComparisonGroup().add((ResearchStudyComparisonGroupComponent) value);
5165        } else if (name.equals("objective")) {
5166          this.getObjective().add((ResearchStudyObjectiveComponent) value);
5167        } else if (name.equals("outcomeMeasure")) {
5168          this.getOutcomeMeasure().add((ResearchStudyOutcomeMeasureComponent) value);
5169        } else if (name.equals("result")) {
5170          this.getResult().add(TypeConvertor.castToReference(value));
5171        } else if (name.equals("webLocation")) {
5172          this.getWebLocation().add((ResearchStudyWebLocationComponent) value);
5173        } else
5174          return super.setProperty(name, value);
5175        return value;
5176      }
5177
5178      @Override
5179      public Base makeProperty(int hash, String name) throws FHIRException {
5180        switch (hash) {
5181        case 116079:  return getUrlElement();
5182        case -1618432855:  return addIdentifier(); 
5183        case 351608024:  return getVersionElement();
5184        case 3373707:  return getNameElement();
5185        case 110371416:  return getTitleElement();
5186        case 102727412:  return addLabel(); 
5187        case -989163880:  return addProtocol(); 
5188        case -995410646:  return addPartOf(); 
5189        case 666807069:  return addRelatedArtifact(); 
5190        case 3076014:  return getDateElement();
5191        case -892481550:  return getStatusElement();
5192        case -2132842986:  return getPrimaryPurposeType();
5193        case 106629499:  return getPhase();
5194        case 1709211879:  return addStudyDesign(); 
5195        case 97604824:  return addFocus(); 
5196        case -861311717:  return addCondition(); 
5197        case -814408215:  return addKeyword(); 
5198        case -934795532:  return addRegion(); 
5199        case 21530634:  return getDescriptionSummaryElement();
5200        case -1724546052:  return getDescriptionElement();
5201        case -991726143:  return getPeriod();
5202        case 3530567:  return addSite(); 
5203        case 3387378:  return addNote(); 
5204        case -281470431:  return addClassifier(); 
5205        case -1841460864:  return addAssociatedParty(); 
5206        case -1897502593:  return addProgressStatus(); 
5207        case -699986715:  return getWhyStopped();
5208        case 780783004:  return getRecruitment();
5209        case -138266634:  return addComparisonGroup(); 
5210        case -1489585863:  return addObjective(); 
5211        case -1510689364:  return addOutcomeMeasure(); 
5212        case -934426595:  return addResult(); 
5213        case -828032215:  return addWebLocation(); 
5214        default: return super.makeProperty(hash, name);
5215        }
5216
5217      }
5218
5219      @Override
5220      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5221        switch (hash) {
5222        case 116079: /*url*/ return new String[] {"uri"};
5223        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
5224        case 351608024: /*version*/ return new String[] {"string"};
5225        case 3373707: /*name*/ return new String[] {"string"};
5226        case 110371416: /*title*/ return new String[] {"string"};
5227        case 102727412: /*label*/ return new String[] {};
5228        case -989163880: /*protocol*/ return new String[] {"Reference"};
5229        case -995410646: /*partOf*/ return new String[] {"Reference"};
5230        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
5231        case 3076014: /*date*/ return new String[] {"dateTime"};
5232        case -892481550: /*status*/ return new String[] {"code"};
5233        case -2132842986: /*primaryPurposeType*/ return new String[] {"CodeableConcept"};
5234        case 106629499: /*phase*/ return new String[] {"CodeableConcept"};
5235        case 1709211879: /*studyDesign*/ return new String[] {"CodeableConcept"};
5236        case 97604824: /*focus*/ return new String[] {};
5237        case -861311717: /*condition*/ return new String[] {"CodeableConcept"};
5238        case -814408215: /*keyword*/ return new String[] {"CodeableConcept"};
5239        case -934795532: /*region*/ return new String[] {"CodeableConcept"};
5240        case 21530634: /*descriptionSummary*/ return new String[] {"markdown"};
5241        case -1724546052: /*description*/ return new String[] {"markdown"};
5242        case -991726143: /*period*/ return new String[] {"Period"};
5243        case 3530567: /*site*/ return new String[] {"Reference"};
5244        case 3387378: /*note*/ return new String[] {"Annotation"};
5245        case -281470431: /*classifier*/ return new String[] {"CodeableConcept"};
5246        case -1841460864: /*associatedParty*/ return new String[] {};
5247        case -1897502593: /*progressStatus*/ return new String[] {};
5248        case -699986715: /*whyStopped*/ return new String[] {"CodeableConcept"};
5249        case 780783004: /*recruitment*/ return new String[] {};
5250        case -138266634: /*comparisonGroup*/ return new String[] {};
5251        case -1489585863: /*objective*/ return new String[] {};
5252        case -1510689364: /*outcomeMeasure*/ return new String[] {};
5253        case -934426595: /*result*/ return new String[] {"Reference"};
5254        case -828032215: /*webLocation*/ return new String[] {};
5255        default: return super.getTypesForProperty(hash, name);
5256        }
5257
5258      }
5259
5260      @Override
5261      public Base addChild(String name) throws FHIRException {
5262        if (name.equals("url")) {
5263          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.url");
5264        }
5265        else if (name.equals("identifier")) {
5266          return addIdentifier();
5267        }
5268        else if (name.equals("version")) {
5269          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.version");
5270        }
5271        else if (name.equals("name")) {
5272          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.name");
5273        }
5274        else if (name.equals("title")) {
5275          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.title");
5276        }
5277        else if (name.equals("label")) {
5278          return addLabel();
5279        }
5280        else if (name.equals("protocol")) {
5281          return addProtocol();
5282        }
5283        else if (name.equals("partOf")) {
5284          return addPartOf();
5285        }
5286        else if (name.equals("relatedArtifact")) {
5287          return addRelatedArtifact();
5288        }
5289        else if (name.equals("date")) {
5290          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.date");
5291        }
5292        else if (name.equals("status")) {
5293          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.status");
5294        }
5295        else if (name.equals("primaryPurposeType")) {
5296          this.primaryPurposeType = new CodeableConcept();
5297          return this.primaryPurposeType;
5298        }
5299        else if (name.equals("phase")) {
5300          this.phase = new CodeableConcept();
5301          return this.phase;
5302        }
5303        else if (name.equals("studyDesign")) {
5304          return addStudyDesign();
5305        }
5306        else if (name.equals("focus")) {
5307          return addFocus();
5308        }
5309        else if (name.equals("condition")) {
5310          return addCondition();
5311        }
5312        else if (name.equals("keyword")) {
5313          return addKeyword();
5314        }
5315        else if (name.equals("region")) {
5316          return addRegion();
5317        }
5318        else if (name.equals("descriptionSummary")) {
5319          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.descriptionSummary");
5320        }
5321        else if (name.equals("description")) {
5322          throw new FHIRException("Cannot call addChild on a primitive type ResearchStudy.description");
5323        }
5324        else if (name.equals("period")) {
5325          this.period = new Period();
5326          return this.period;
5327        }
5328        else if (name.equals("site")) {
5329          return addSite();
5330        }
5331        else if (name.equals("note")) {
5332          return addNote();
5333        }
5334        else if (name.equals("classifier")) {
5335          return addClassifier();
5336        }
5337        else if (name.equals("associatedParty")) {
5338          return addAssociatedParty();
5339        }
5340        else if (name.equals("progressStatus")) {
5341          return addProgressStatus();
5342        }
5343        else if (name.equals("whyStopped")) {
5344          this.whyStopped = new CodeableConcept();
5345          return this.whyStopped;
5346        }
5347        else if (name.equals("recruitment")) {
5348          this.recruitment = new ResearchStudyRecruitmentComponent();
5349          return this.recruitment;
5350        }
5351        else if (name.equals("comparisonGroup")) {
5352          return addComparisonGroup();
5353        }
5354        else if (name.equals("objective")) {
5355          return addObjective();
5356        }
5357        else if (name.equals("outcomeMeasure")) {
5358          return addOutcomeMeasure();
5359        }
5360        else if (name.equals("result")) {
5361          return addResult();
5362        }
5363        else if (name.equals("webLocation")) {
5364          return addWebLocation();
5365        }
5366        else
5367          return super.addChild(name);
5368      }
5369
5370  public String fhirType() {
5371    return "ResearchStudy";
5372
5373  }
5374
5375      public ResearchStudy copy() {
5376        ResearchStudy dst = new ResearchStudy();
5377        copyValues(dst);
5378        return dst;
5379      }
5380
5381      public void copyValues(ResearchStudy dst) {
5382        super.copyValues(dst);
5383        dst.url = url == null ? null : url.copy();
5384        if (identifier != null) {
5385          dst.identifier = new ArrayList<Identifier>();
5386          for (Identifier i : identifier)
5387            dst.identifier.add(i.copy());
5388        };
5389        dst.version = version == null ? null : version.copy();
5390        dst.name = name == null ? null : name.copy();
5391        dst.title = title == null ? null : title.copy();
5392        if (label != null) {
5393          dst.label = new ArrayList<ResearchStudyLabelComponent>();
5394          for (ResearchStudyLabelComponent i : label)
5395            dst.label.add(i.copy());
5396        };
5397        if (protocol != null) {
5398          dst.protocol = new ArrayList<Reference>();
5399          for (Reference i : protocol)
5400            dst.protocol.add(i.copy());
5401        };
5402        if (partOf != null) {
5403          dst.partOf = new ArrayList<Reference>();
5404          for (Reference i : partOf)
5405            dst.partOf.add(i.copy());
5406        };
5407        if (relatedArtifact != null) {
5408          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
5409          for (RelatedArtifact i : relatedArtifact)
5410            dst.relatedArtifact.add(i.copy());
5411        };
5412        dst.date = date == null ? null : date.copy();
5413        dst.status = status == null ? null : status.copy();
5414        dst.primaryPurposeType = primaryPurposeType == null ? null : primaryPurposeType.copy();
5415        dst.phase = phase == null ? null : phase.copy();
5416        if (studyDesign != null) {
5417          dst.studyDesign = new ArrayList<CodeableConcept>();
5418          for (CodeableConcept i : studyDesign)
5419            dst.studyDesign.add(i.copy());
5420        };
5421        if (focus != null) {
5422          dst.focus = new ArrayList<ResearchStudyFocusComponent>();
5423          for (ResearchStudyFocusComponent i : focus)
5424            dst.focus.add(i.copy());
5425        };
5426        if (condition != null) {
5427          dst.condition = new ArrayList<CodeableConcept>();
5428          for (CodeableConcept i : condition)
5429            dst.condition.add(i.copy());
5430        };
5431        if (keyword != null) {
5432          dst.keyword = new ArrayList<CodeableConcept>();
5433          for (CodeableConcept i : keyword)
5434            dst.keyword.add(i.copy());
5435        };
5436        if (region != null) {
5437          dst.region = new ArrayList<CodeableConcept>();
5438          for (CodeableConcept i : region)
5439            dst.region.add(i.copy());
5440        };
5441        dst.descriptionSummary = descriptionSummary == null ? null : descriptionSummary.copy();
5442        dst.description = description == null ? null : description.copy();
5443        dst.period = period == null ? null : period.copy();
5444        if (site != null) {
5445          dst.site = new ArrayList<Reference>();
5446          for (Reference i : site)
5447            dst.site.add(i.copy());
5448        };
5449        if (note != null) {
5450          dst.note = new ArrayList<Annotation>();
5451          for (Annotation i : note)
5452            dst.note.add(i.copy());
5453        };
5454        if (classifier != null) {
5455          dst.classifier = new ArrayList<CodeableConcept>();
5456          for (CodeableConcept i : classifier)
5457            dst.classifier.add(i.copy());
5458        };
5459        if (associatedParty != null) {
5460          dst.associatedParty = new ArrayList<ResearchStudyAssociatedPartyComponent>();
5461          for (ResearchStudyAssociatedPartyComponent i : associatedParty)
5462            dst.associatedParty.add(i.copy());
5463        };
5464        if (progressStatus != null) {
5465          dst.progressStatus = new ArrayList<ResearchStudyProgressStatusComponent>();
5466          for (ResearchStudyProgressStatusComponent i : progressStatus)
5467            dst.progressStatus.add(i.copy());
5468        };
5469        dst.whyStopped = whyStopped == null ? null : whyStopped.copy();
5470        dst.recruitment = recruitment == null ? null : recruitment.copy();
5471        if (comparisonGroup != null) {
5472          dst.comparisonGroup = new ArrayList<ResearchStudyComparisonGroupComponent>();
5473          for (ResearchStudyComparisonGroupComponent i : comparisonGroup)
5474            dst.comparisonGroup.add(i.copy());
5475        };
5476        if (objective != null) {
5477          dst.objective = new ArrayList<ResearchStudyObjectiveComponent>();
5478          for (ResearchStudyObjectiveComponent i : objective)
5479            dst.objective.add(i.copy());
5480        };
5481        if (outcomeMeasure != null) {
5482          dst.outcomeMeasure = new ArrayList<ResearchStudyOutcomeMeasureComponent>();
5483          for (ResearchStudyOutcomeMeasureComponent i : outcomeMeasure)
5484            dst.outcomeMeasure.add(i.copy());
5485        };
5486        if (result != null) {
5487          dst.result = new ArrayList<Reference>();
5488          for (Reference i : result)
5489            dst.result.add(i.copy());
5490        };
5491        if (webLocation != null) {
5492          dst.webLocation = new ArrayList<ResearchStudyWebLocationComponent>();
5493          for (ResearchStudyWebLocationComponent i : webLocation)
5494            dst.webLocation.add(i.copy());
5495        };
5496      }
5497
5498      protected ResearchStudy typedCopy() {
5499        return copy();
5500      }
5501
5502      @Override
5503      public boolean equalsDeep(Base other_) {
5504        if (!super.equalsDeep(other_))
5505          return false;
5506        if (!(other_ instanceof ResearchStudy))
5507          return false;
5508        ResearchStudy o = (ResearchStudy) other_;
5509        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
5510           && compareDeep(name, o.name, true) && compareDeep(title, o.title, true) && compareDeep(label, o.label, true)
5511           && compareDeep(protocol, o.protocol, true) && compareDeep(partOf, o.partOf, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
5512           && compareDeep(date, o.date, true) && compareDeep(status, o.status, true) && compareDeep(primaryPurposeType, o.primaryPurposeType, true)
5513           && compareDeep(phase, o.phase, true) && compareDeep(studyDesign, o.studyDesign, true) && compareDeep(focus, o.focus, true)
5514           && compareDeep(condition, o.condition, true) && compareDeep(keyword, o.keyword, true) && compareDeep(region, o.region, true)
5515           && compareDeep(descriptionSummary, o.descriptionSummary, true) && compareDeep(description, o.description, true)
5516           && compareDeep(period, o.period, true) && compareDeep(site, o.site, true) && compareDeep(note, o.note, true)
5517           && compareDeep(classifier, o.classifier, true) && compareDeep(associatedParty, o.associatedParty, true)
5518           && compareDeep(progressStatus, o.progressStatus, true) && compareDeep(whyStopped, o.whyStopped, true)
5519           && compareDeep(recruitment, o.recruitment, true) && compareDeep(comparisonGroup, o.comparisonGroup, true)
5520           && compareDeep(objective, o.objective, true) && compareDeep(outcomeMeasure, o.outcomeMeasure, true)
5521           && compareDeep(result, o.result, true) && compareDeep(webLocation, o.webLocation, true);
5522      }
5523
5524      @Override
5525      public boolean equalsShallow(Base other_) {
5526        if (!super.equalsShallow(other_))
5527          return false;
5528        if (!(other_ instanceof ResearchStudy))
5529          return false;
5530        ResearchStudy o = (ResearchStudy) other_;
5531        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
5532           && compareValues(title, o.title, true) && compareValues(date, o.date, true) && compareValues(status, o.status, true)
5533           && compareValues(descriptionSummary, o.descriptionSummary, true) && compareValues(description, o.description, true)
5534          ;
5535      }
5536
5537      public boolean isEmpty() {
5538        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
5539          , name, title, label, protocol, partOf, relatedArtifact, date, status, primaryPurposeType
5540          , phase, studyDesign, focus, condition, keyword, region, descriptionSummary, description
5541          , period, site, note, classifier, associatedParty, progressStatus, whyStopped
5542          , recruitment, comparisonGroup, objective, outcomeMeasure, result, webLocation);
5543      }
5544
5545  @Override
5546  public ResourceType getResourceType() {
5547    return ResourceType.ResearchStudy;
5548   }
5549
5550 /**
5551   * Search parameter: <b>condition</b>
5552   * <p>
5553   * Description: <b>Condition being studied</b><br>
5554   * Type: <b>token</b><br>
5555   * Path: <b>ResearchStudy.condition</b><br>
5556   * </p>
5557   */
5558  @SearchParamDefinition(name="condition", path="ResearchStudy.condition", description="Condition being studied", type="token" )
5559  public static final String SP_CONDITION = "condition";
5560 /**
5561   * <b>Fluent Client</b> search parameter constant for <b>condition</b>
5562   * <p>
5563   * Description: <b>Condition being studied</b><br>
5564   * Type: <b>token</b><br>
5565   * Path: <b>ResearchStudy.condition</b><br>
5566   * </p>
5567   */
5568  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONDITION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONDITION);
5569
5570 /**
5571   * Search parameter: <b>date</b>
5572   * <p>
5573   * Description: <b>When the study began and ended</b><br>
5574   * Type: <b>date</b><br>
5575   * Path: <b>ResearchStudy.period</b><br>
5576   * </p>
5577   */
5578  @SearchParamDefinition(name="date", path="ResearchStudy.period", description="When the study began and ended", type="date" )
5579  public static final String SP_DATE = "date";
5580 /**
5581   * <b>Fluent Client</b> search parameter constant for <b>date</b>
5582   * <p>
5583   * Description: <b>When the study began and ended</b><br>
5584   * Type: <b>date</b><br>
5585   * Path: <b>ResearchStudy.period</b><br>
5586   * </p>
5587   */
5588  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
5589
5590 /**
5591   * Search parameter: <b>focus</b>
5592   * <p>
5593   * Description: <b>Drugs, devices, etc. under study</b><br>
5594   * Type: <b>token</b><br>
5595   * Path: <b>ResearchStudy.focus</b><br>
5596   * </p>
5597   */
5598  @SearchParamDefinition(name="focus", path="ResearchStudy.focus", description="Drugs, devices, etc. under study", type="token" )
5599  public static final String SP_FOCUS = "focus";
5600 /**
5601   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
5602   * <p>
5603   * Description: <b>Drugs, devices, etc. under study</b><br>
5604   * Type: <b>token</b><br>
5605   * Path: <b>ResearchStudy.focus</b><br>
5606   * </p>
5607   */
5608  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_FOCUS);
5609
5610 /**
5611   * Search parameter: <b>identifier</b>
5612   * <p>
5613   * Description: <b>Business Identifier for study</b><br>
5614   * Type: <b>token</b><br>
5615   * Path: <b>ResearchStudy.identifier</b><br>
5616   * </p>
5617   */
5618  @SearchParamDefinition(name="identifier", path="ResearchStudy.identifier", description="Business Identifier for study", type="token" )
5619  public static final String SP_IDENTIFIER = "identifier";
5620 /**
5621   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
5622   * <p>
5623   * Description: <b>Business Identifier for study</b><br>
5624   * Type: <b>token</b><br>
5625   * Path: <b>ResearchStudy.identifier</b><br>
5626   * </p>
5627   */
5628  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
5629
5630 /**
5631   * Search parameter: <b>keyword</b>
5632   * <p>
5633   * Description: <b>Used to search for the study</b><br>
5634   * Type: <b>token</b><br>
5635   * Path: <b>ResearchStudy.keyword</b><br>
5636   * </p>
5637   */
5638  @SearchParamDefinition(name="keyword", path="ResearchStudy.keyword", description="Used to search for the study", type="token" )
5639  public static final String SP_KEYWORD = "keyword";
5640 /**
5641   * <b>Fluent Client</b> search parameter constant for <b>keyword</b>
5642   * <p>
5643   * Description: <b>Used to search for the study</b><br>
5644   * Type: <b>token</b><br>
5645   * Path: <b>ResearchStudy.keyword</b><br>
5646   * </p>
5647   */
5648  public static final ca.uhn.fhir.rest.gclient.TokenClientParam KEYWORD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_KEYWORD);
5649
5650 /**
5651   * Search parameter: <b>partof</b>
5652   * <p>
5653   * Description: <b>Part of larger study</b><br>
5654   * Type: <b>reference</b><br>
5655   * Path: <b>ResearchStudy.partOf</b><br>
5656   * </p>
5657   */
5658  @SearchParamDefinition(name="partof", path="ResearchStudy.partOf", description="Part of larger study", type="reference", target={ResearchStudy.class } )
5659  public static final String SP_PARTOF = "partof";
5660 /**
5661   * <b>Fluent Client</b> search parameter constant for <b>partof</b>
5662   * <p>
5663   * Description: <b>Part of larger study</b><br>
5664   * Type: <b>reference</b><br>
5665   * Path: <b>ResearchStudy.partOf</b><br>
5666   * </p>
5667   */
5668  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARTOF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PARTOF);
5669
5670/**
5671   * Constant for fluent queries to be used to add include statements. Specifies
5672   * the path value of "<b>ResearchStudy:partof</b>".
5673   */
5674  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARTOF = new ca.uhn.fhir.model.api.Include("ResearchStudy:partof").toLocked();
5675
5676 /**
5677   * Search parameter: <b>protocol</b>
5678   * <p>
5679   * Description: <b>Steps followed in executing study</b><br>
5680   * Type: <b>reference</b><br>
5681   * Path: <b>ResearchStudy.protocol</b><br>
5682   * </p>
5683   */
5684  @SearchParamDefinition(name="protocol", path="ResearchStudy.protocol", description="Steps followed in executing study", type="reference", target={PlanDefinition.class } )
5685  public static final String SP_PROTOCOL = "protocol";
5686 /**
5687   * <b>Fluent Client</b> search parameter constant for <b>protocol</b>
5688   * <p>
5689   * Description: <b>Steps followed in executing study</b><br>
5690   * Type: <b>reference</b><br>
5691   * Path: <b>ResearchStudy.protocol</b><br>
5692   * </p>
5693   */
5694  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROTOCOL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROTOCOL);
5695
5696/**
5697   * Constant for fluent queries to be used to add include statements. Specifies
5698   * the path value of "<b>ResearchStudy:protocol</b>".
5699   */
5700  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROTOCOL = new ca.uhn.fhir.model.api.Include("ResearchStudy:protocol").toLocked();
5701
5702 /**
5703   * Search parameter: <b>recruitment_actual</b>
5704   * <p>
5705   * Description: <b>Actual number of participants enrolled in study across all groups</b><br>
5706   * Type: <b>number</b><br>
5707   * Path: <b>ResearchStudy.recruitment.actualNumber</b><br>
5708   * </p>
5709   */
5710  @SearchParamDefinition(name="recruitment_actual", path="ResearchStudy.recruitment.actualNumber", description="Actual number of participants enrolled in study across all groups", type="number" )
5711  public static final String SP_RECRUITMENTACTUAL = "recruitment_actual";
5712 /**
5713   * <b>Fluent Client</b> search parameter constant for <b>recruitment_actual</b>
5714   * <p>
5715   * Description: <b>Actual number of participants enrolled in study across all groups</b><br>
5716   * Type: <b>number</b><br>
5717   * Path: <b>ResearchStudy.recruitment.actualNumber</b><br>
5718   * </p>
5719   */
5720  public static final ca.uhn.fhir.rest.gclient.NumberClientParam RECRUITMENTACTUAL = new ca.uhn.fhir.rest.gclient.NumberClientParam(SP_RECRUITMENTACTUAL);
5721
5722 /**
5723   * Search parameter: <b>recruitment_target</b>
5724   * <p>
5725   * Description: <b>Target number of participants enrolled in study across all groups</b><br>
5726   * Type: <b>number</b><br>
5727   * Path: <b>ResearchStudy.recruitment.targetNumber</b><br>
5728   * </p>
5729   */
5730  @SearchParamDefinition(name="recruitment_target", path="ResearchStudy.recruitment.targetNumber", description="Target number of participants enrolled in study across all groups", type="number" )
5731  public static final String SP_RECRUITMENTTARGET = "recruitment_target";
5732 /**
5733   * <b>Fluent Client</b> search parameter constant for <b>recruitment_target</b>
5734   * <p>
5735   * Description: <b>Target number of participants enrolled in study across all groups</b><br>
5736   * Type: <b>number</b><br>
5737   * Path: <b>ResearchStudy.recruitment.targetNumber</b><br>
5738   * </p>
5739   */
5740  public static final ca.uhn.fhir.rest.gclient.NumberClientParam RECRUITMENTTARGET = new ca.uhn.fhir.rest.gclient.NumberClientParam(SP_RECRUITMENTTARGET);
5741
5742 /**
5743   * Search parameter: <b>region</b>
5744   * <p>
5745   * Description: <b>Geographic area for the study</b><br>
5746   * Type: <b>token</b><br>
5747   * Path: <b>ResearchStudy.region</b><br>
5748   * </p>
5749   */
5750  @SearchParamDefinition(name="region", path="ResearchStudy.region", description="Geographic area for the study", type="token" )
5751  public static final String SP_REGION = "region";
5752 /**
5753   * <b>Fluent Client</b> search parameter constant for <b>region</b>
5754   * <p>
5755   * Description: <b>Geographic area for the study</b><br>
5756   * Type: <b>token</b><br>
5757   * Path: <b>ResearchStudy.region</b><br>
5758   * </p>
5759   */
5760  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REGION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REGION);
5761
5762 /**
5763   * Search parameter: <b>site</b>
5764   * <p>
5765   * Description: <b>Facility where study activities are conducted</b><br>
5766   * Type: <b>reference</b><br>
5767   * Path: <b>ResearchStudy.site</b><br>
5768   * </p>
5769   */
5770  @SearchParamDefinition(name="site", path="ResearchStudy.site", description="Facility where study activities are conducted", type="reference", target={Location.class, Organization.class, ResearchStudy.class } )
5771  public static final String SP_SITE = "site";
5772 /**
5773   * <b>Fluent Client</b> search parameter constant for <b>site</b>
5774   * <p>
5775   * Description: <b>Facility where study activities are conducted</b><br>
5776   * Type: <b>reference</b><br>
5777   * Path: <b>ResearchStudy.site</b><br>
5778   * </p>
5779   */
5780  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SITE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SITE);
5781
5782/**
5783   * Constant for fluent queries to be used to add include statements. Specifies
5784   * the path value of "<b>ResearchStudy:site</b>".
5785   */
5786  public static final ca.uhn.fhir.model.api.Include INCLUDE_SITE = new ca.uhn.fhir.model.api.Include("ResearchStudy:site").toLocked();
5787
5788 /**
5789   * Search parameter: <b>status</b>
5790   * <p>
5791   * Description: <b>active | active-but-not-recruiting | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | enrolling-by-invitation | in-review | not-yet-recruiting | recruiting | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | terminated | withdrawn</b><br>
5792   * Type: <b>token</b><br>
5793   * Path: <b>ResearchStudy.status</b><br>
5794   * </p>
5795   */
5796  @SearchParamDefinition(name="status", path="ResearchStudy.status", description="active | active-but-not-recruiting | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | enrolling-by-invitation | in-review | not-yet-recruiting | recruiting | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | terminated | withdrawn", type="token" )
5797  public static final String SP_STATUS = "status";
5798 /**
5799   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5800   * <p>
5801   * Description: <b>active | active-but-not-recruiting | administratively-completed | approved | closed-to-accrual | closed-to-accrual-and-intervention | completed | disapproved | enrolling-by-invitation | in-review | not-yet-recruiting | recruiting | temporarily-closed-to-accrual | temporarily-closed-to-accrual-and-intervention | terminated | withdrawn</b><br>
5802   * Type: <b>token</b><br>
5803   * Path: <b>ResearchStudy.status</b><br>
5804   * </p>
5805   */
5806  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
5807
5808 /**
5809   * Search parameter: <b>title</b>
5810   * <p>
5811   * Description: <b>Name for this study</b><br>
5812   * Type: <b>string</b><br>
5813   * Path: <b>ResearchStudy.title</b><br>
5814   * </p>
5815   */
5816  @SearchParamDefinition(name="title", path="ResearchStudy.title", description="Name for this study", type="string" )
5817  public static final String SP_TITLE = "title";
5818 /**
5819   * <b>Fluent Client</b> search parameter constant for <b>title</b>
5820   * <p>
5821   * Description: <b>Name for this study</b><br>
5822   * Type: <b>string</b><br>
5823   * Path: <b>ResearchStudy.title</b><br>
5824   * </p>
5825   */
5826  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
5827
5828
5829}
5830