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