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 Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.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 definition of a condition and information relevant to managing it.
052 */
053@ResourceDef(name="ConditionDefinition", profile="http://hl7.org/fhir/StructureDefinition/ConditionDefinition")
054public class ConditionDefinition extends MetadataResource {
055
056    public enum ConditionPreconditionType {
057        /**
058         * The observation is very sensitive for the condition, but may also indicate other conditions.
059         */
060        SENSITIVE, 
061        /**
062         * The observation is very specific for this condition, but not particularly sensitive.
063         */
064        SPECIFIC, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static ConditionPreconditionType fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("sensitive".equals(codeString))
073          return SENSITIVE;
074        if ("specific".equals(codeString))
075          return SPECIFIC;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown ConditionPreconditionType code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case SENSITIVE: return "sensitive";
084            case SPECIFIC: return "specific";
085            default: return "?";
086          }
087        }
088        public String getSystem() {
089          switch (this) {
090            case SENSITIVE: return "http://hl7.org/fhir/condition-precondition-type";
091            case SPECIFIC: return "http://hl7.org/fhir/condition-precondition-type";
092            default: return "?";
093          }
094        }
095        public String getDefinition() {
096          switch (this) {
097            case SENSITIVE: return "The observation is very sensitive for the condition, but may also indicate other conditions.";
098            case SPECIFIC: return "The observation is very specific for this condition, but not particularly sensitive.";
099            default: return "?";
100          }
101        }
102        public String getDisplay() {
103          switch (this) {
104            case SENSITIVE: return "Sensitive";
105            case SPECIFIC: return "Specific";
106            default: return "?";
107          }
108        }
109    }
110
111  public static class ConditionPreconditionTypeEnumFactory implements EnumFactory<ConditionPreconditionType> {
112    public ConditionPreconditionType fromCode(String codeString) throws IllegalArgumentException {
113      if (codeString == null || "".equals(codeString))
114            if (codeString == null || "".equals(codeString))
115                return null;
116        if ("sensitive".equals(codeString))
117          return ConditionPreconditionType.SENSITIVE;
118        if ("specific".equals(codeString))
119          return ConditionPreconditionType.SPECIFIC;
120        throw new IllegalArgumentException("Unknown ConditionPreconditionType code '"+codeString+"'");
121        }
122        public Enumeration<ConditionPreconditionType> fromType(Base code) throws FHIRException {
123          if (code == null)
124            return null;
125          if (code.isEmpty())
126            return new Enumeration<ConditionPreconditionType>(this);
127          String codeString = ((PrimitiveType) code).asStringValue();
128          if (codeString == null || "".equals(codeString))
129            return null;
130        if ("sensitive".equals(codeString))
131          return new Enumeration<ConditionPreconditionType>(this, ConditionPreconditionType.SENSITIVE);
132        if ("specific".equals(codeString))
133          return new Enumeration<ConditionPreconditionType>(this, ConditionPreconditionType.SPECIFIC);
134        throw new FHIRException("Unknown ConditionPreconditionType code '"+codeString+"'");
135        }
136    public String toCode(ConditionPreconditionType code) {
137      if (code == ConditionPreconditionType.SENSITIVE)
138        return "sensitive";
139      if (code == ConditionPreconditionType.SPECIFIC)
140        return "specific";
141      return "?";
142      }
143    public String toSystem(ConditionPreconditionType code) {
144      return code.getSystem();
145      }
146    }
147
148    public enum ConditionQuestionnairePurpose {
149        /**
150         * A pre-admit questionnaire.
151         */
152        PREADMIT, 
153        /**
154         * A questionnaire that helps with diferential diagnosis.
155         */
156        DIFFDIAGNOSIS, 
157        /**
158         * A questionnaire to check on outcomes for the patient.
159         */
160        OUTCOME, 
161        /**
162         * added to help the parsers with the generic types
163         */
164        NULL;
165        public static ConditionQuestionnairePurpose fromCode(String codeString) throws FHIRException {
166            if (codeString == null || "".equals(codeString))
167                return null;
168        if ("preadmit".equals(codeString))
169          return PREADMIT;
170        if ("diff-diagnosis".equals(codeString))
171          return DIFFDIAGNOSIS;
172        if ("outcome".equals(codeString))
173          return OUTCOME;
174        if (Configuration.isAcceptInvalidEnums())
175          return null;
176        else
177          throw new FHIRException("Unknown ConditionQuestionnairePurpose code '"+codeString+"'");
178        }
179        public String toCode() {
180          switch (this) {
181            case PREADMIT: return "preadmit";
182            case DIFFDIAGNOSIS: return "diff-diagnosis";
183            case OUTCOME: return "outcome";
184            default: return "?";
185          }
186        }
187        public String getSystem() {
188          switch (this) {
189            case PREADMIT: return "http://hl7.org/fhir/condition-questionnaire-purpose";
190            case DIFFDIAGNOSIS: return "http://hl7.org/fhir/condition-questionnaire-purpose";
191            case OUTCOME: return "http://hl7.org/fhir/condition-questionnaire-purpose";
192            default: return "?";
193          }
194        }
195        public String getDefinition() {
196          switch (this) {
197            case PREADMIT: return "A pre-admit questionnaire.";
198            case DIFFDIAGNOSIS: return "A questionnaire that helps with diferential diagnosis.";
199            case OUTCOME: return "A questionnaire to check on outcomes for the patient.";
200            default: return "?";
201          }
202        }
203        public String getDisplay() {
204          switch (this) {
205            case PREADMIT: return "Pre-admit";
206            case DIFFDIAGNOSIS: return "Diff Diagnosis";
207            case OUTCOME: return "Outcome";
208            default: return "?";
209          }
210        }
211    }
212
213  public static class ConditionQuestionnairePurposeEnumFactory implements EnumFactory<ConditionQuestionnairePurpose> {
214    public ConditionQuestionnairePurpose fromCode(String codeString) throws IllegalArgumentException {
215      if (codeString == null || "".equals(codeString))
216            if (codeString == null || "".equals(codeString))
217                return null;
218        if ("preadmit".equals(codeString))
219          return ConditionQuestionnairePurpose.PREADMIT;
220        if ("diff-diagnosis".equals(codeString))
221          return ConditionQuestionnairePurpose.DIFFDIAGNOSIS;
222        if ("outcome".equals(codeString))
223          return ConditionQuestionnairePurpose.OUTCOME;
224        throw new IllegalArgumentException("Unknown ConditionQuestionnairePurpose code '"+codeString+"'");
225        }
226        public Enumeration<ConditionQuestionnairePurpose> fromType(Base code) throws FHIRException {
227          if (code == null)
228            return null;
229          if (code.isEmpty())
230            return new Enumeration<ConditionQuestionnairePurpose>(this);
231          String codeString = ((PrimitiveType) code).asStringValue();
232          if (codeString == null || "".equals(codeString))
233            return null;
234        if ("preadmit".equals(codeString))
235          return new Enumeration<ConditionQuestionnairePurpose>(this, ConditionQuestionnairePurpose.PREADMIT);
236        if ("diff-diagnosis".equals(codeString))
237          return new Enumeration<ConditionQuestionnairePurpose>(this, ConditionQuestionnairePurpose.DIFFDIAGNOSIS);
238        if ("outcome".equals(codeString))
239          return new Enumeration<ConditionQuestionnairePurpose>(this, ConditionQuestionnairePurpose.OUTCOME);
240        throw new FHIRException("Unknown ConditionQuestionnairePurpose code '"+codeString+"'");
241        }
242    public String toCode(ConditionQuestionnairePurpose code) {
243      if (code == ConditionQuestionnairePurpose.PREADMIT)
244        return "preadmit";
245      if (code == ConditionQuestionnairePurpose.DIFFDIAGNOSIS)
246        return "diff-diagnosis";
247      if (code == ConditionQuestionnairePurpose.OUTCOME)
248        return "outcome";
249      return "?";
250      }
251    public String toSystem(ConditionQuestionnairePurpose code) {
252      return code.getSystem();
253      }
254    }
255
256    @Block()
257    public static class ConditionDefinitionObservationComponent extends BackboneElement implements IBaseBackboneElement {
258        /**
259         * Category that is relevant.
260         */
261        @Child(name = "category", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
262        @Description(shortDefinition="Category that is relevant", formalDefinition="Category that is relevant." )
263        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-category")
264        protected CodeableConcept category;
265
266        /**
267         * Code for relevant Observation.
268         */
269        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
270        @Description(shortDefinition="Code for relevant Observation", formalDefinition="Code for relevant Observation." )
271        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
272        protected CodeableConcept code;
273
274        private static final long serialVersionUID = -1433986479L;
275
276    /**
277     * Constructor
278     */
279      public ConditionDefinitionObservationComponent() {
280        super();
281      }
282
283        /**
284         * @return {@link #category} (Category that is relevant.)
285         */
286        public CodeableConcept getCategory() { 
287          if (this.category == null)
288            if (Configuration.errorOnAutoCreate())
289              throw new Error("Attempt to auto-create ConditionDefinitionObservationComponent.category");
290            else if (Configuration.doAutoCreate())
291              this.category = new CodeableConcept(); // cc
292          return this.category;
293        }
294
295        public boolean hasCategory() { 
296          return this.category != null && !this.category.isEmpty();
297        }
298
299        /**
300         * @param value {@link #category} (Category that is relevant.)
301         */
302        public ConditionDefinitionObservationComponent setCategory(CodeableConcept value) { 
303          this.category = value;
304          return this;
305        }
306
307        /**
308         * @return {@link #code} (Code for relevant Observation.)
309         */
310        public CodeableConcept getCode() { 
311          if (this.code == null)
312            if (Configuration.errorOnAutoCreate())
313              throw new Error("Attempt to auto-create ConditionDefinitionObservationComponent.code");
314            else if (Configuration.doAutoCreate())
315              this.code = new CodeableConcept(); // cc
316          return this.code;
317        }
318
319        public boolean hasCode() { 
320          return this.code != null && !this.code.isEmpty();
321        }
322
323        /**
324         * @param value {@link #code} (Code for relevant Observation.)
325         */
326        public ConditionDefinitionObservationComponent setCode(CodeableConcept value) { 
327          this.code = value;
328          return this;
329        }
330
331        protected void listChildren(List<Property> children) {
332          super.listChildren(children);
333          children.add(new Property("category", "CodeableConcept", "Category that is relevant.", 0, 1, category));
334          children.add(new Property("code", "CodeableConcept", "Code for relevant Observation.", 0, 1, code));
335        }
336
337        @Override
338        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
339          switch (_hash) {
340          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Category that is relevant.", 0, 1, category);
341          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Code for relevant Observation.", 0, 1, code);
342          default: return super.getNamedProperty(_hash, _name, _checkValid);
343          }
344
345        }
346
347      @Override
348      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
349        switch (hash) {
350        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
351        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
352        default: return super.getProperty(hash, name, checkValid);
353        }
354
355      }
356
357      @Override
358      public Base setProperty(int hash, String name, Base value) throws FHIRException {
359        switch (hash) {
360        case 50511102: // category
361          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
362          return value;
363        case 3059181: // code
364          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
365          return value;
366        default: return super.setProperty(hash, name, value);
367        }
368
369      }
370
371      @Override
372      public Base setProperty(String name, Base value) throws FHIRException {
373        if (name.equals("category")) {
374          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
375        } else if (name.equals("code")) {
376          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
377        } else
378          return super.setProperty(name, value);
379        return value;
380      }
381
382      @Override
383      public Base makeProperty(int hash, String name) throws FHIRException {
384        switch (hash) {
385        case 50511102:  return getCategory();
386        case 3059181:  return getCode();
387        default: return super.makeProperty(hash, name);
388        }
389
390      }
391
392      @Override
393      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
394        switch (hash) {
395        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
396        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
397        default: return super.getTypesForProperty(hash, name);
398        }
399
400      }
401
402      @Override
403      public Base addChild(String name) throws FHIRException {
404        if (name.equals("category")) {
405          this.category = new CodeableConcept();
406          return this.category;
407        }
408        else if (name.equals("code")) {
409          this.code = new CodeableConcept();
410          return this.code;
411        }
412        else
413          return super.addChild(name);
414      }
415
416      public ConditionDefinitionObservationComponent copy() {
417        ConditionDefinitionObservationComponent dst = new ConditionDefinitionObservationComponent();
418        copyValues(dst);
419        return dst;
420      }
421
422      public void copyValues(ConditionDefinitionObservationComponent dst) {
423        super.copyValues(dst);
424        dst.category = category == null ? null : category.copy();
425        dst.code = code == null ? null : code.copy();
426      }
427
428      @Override
429      public boolean equalsDeep(Base other_) {
430        if (!super.equalsDeep(other_))
431          return false;
432        if (!(other_ instanceof ConditionDefinitionObservationComponent))
433          return false;
434        ConditionDefinitionObservationComponent o = (ConditionDefinitionObservationComponent) other_;
435        return compareDeep(category, o.category, true) && compareDeep(code, o.code, true);
436      }
437
438      @Override
439      public boolean equalsShallow(Base other_) {
440        if (!super.equalsShallow(other_))
441          return false;
442        if (!(other_ instanceof ConditionDefinitionObservationComponent))
443          return false;
444        ConditionDefinitionObservationComponent o = (ConditionDefinitionObservationComponent) other_;
445        return true;
446      }
447
448      public boolean isEmpty() {
449        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(category, code);
450      }
451
452  public String fhirType() {
453    return "ConditionDefinition.observation";
454
455  }
456
457  }
458
459    @Block()
460    public static class ConditionDefinitionMedicationComponent extends BackboneElement implements IBaseBackboneElement {
461        /**
462         * Category that is relevant.
463         */
464        @Child(name = "category", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
465        @Description(shortDefinition="Category that is relevant", formalDefinition="Category that is relevant." )
466        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medicationrequest-category")
467        protected CodeableConcept category;
468
469        /**
470         * Code for relevant Medication.
471         */
472        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
473        @Description(shortDefinition="Code for relevant Medication", formalDefinition="Code for relevant Medication." )
474        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/medication-codes")
475        protected CodeableConcept code;
476
477        private static final long serialVersionUID = -1433986479L;
478
479    /**
480     * Constructor
481     */
482      public ConditionDefinitionMedicationComponent() {
483        super();
484      }
485
486        /**
487         * @return {@link #category} (Category that is relevant.)
488         */
489        public CodeableConcept getCategory() { 
490          if (this.category == null)
491            if (Configuration.errorOnAutoCreate())
492              throw new Error("Attempt to auto-create ConditionDefinitionMedicationComponent.category");
493            else if (Configuration.doAutoCreate())
494              this.category = new CodeableConcept(); // cc
495          return this.category;
496        }
497
498        public boolean hasCategory() { 
499          return this.category != null && !this.category.isEmpty();
500        }
501
502        /**
503         * @param value {@link #category} (Category that is relevant.)
504         */
505        public ConditionDefinitionMedicationComponent setCategory(CodeableConcept value) { 
506          this.category = value;
507          return this;
508        }
509
510        /**
511         * @return {@link #code} (Code for relevant Medication.)
512         */
513        public CodeableConcept getCode() { 
514          if (this.code == null)
515            if (Configuration.errorOnAutoCreate())
516              throw new Error("Attempt to auto-create ConditionDefinitionMedicationComponent.code");
517            else if (Configuration.doAutoCreate())
518              this.code = new CodeableConcept(); // cc
519          return this.code;
520        }
521
522        public boolean hasCode() { 
523          return this.code != null && !this.code.isEmpty();
524        }
525
526        /**
527         * @param value {@link #code} (Code for relevant Medication.)
528         */
529        public ConditionDefinitionMedicationComponent setCode(CodeableConcept value) { 
530          this.code = value;
531          return this;
532        }
533
534        protected void listChildren(List<Property> children) {
535          super.listChildren(children);
536          children.add(new Property("category", "CodeableConcept", "Category that is relevant.", 0, 1, category));
537          children.add(new Property("code", "CodeableConcept", "Code for relevant Medication.", 0, 1, code));
538        }
539
540        @Override
541        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
542          switch (_hash) {
543          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Category that is relevant.", 0, 1, category);
544          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Code for relevant Medication.", 0, 1, code);
545          default: return super.getNamedProperty(_hash, _name, _checkValid);
546          }
547
548        }
549
550      @Override
551      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
552        switch (hash) {
553        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
554        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
555        default: return super.getProperty(hash, name, checkValid);
556        }
557
558      }
559
560      @Override
561      public Base setProperty(int hash, String name, Base value) throws FHIRException {
562        switch (hash) {
563        case 50511102: // category
564          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
565          return value;
566        case 3059181: // code
567          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
568          return value;
569        default: return super.setProperty(hash, name, value);
570        }
571
572      }
573
574      @Override
575      public Base setProperty(String name, Base value) throws FHIRException {
576        if (name.equals("category")) {
577          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
578        } else if (name.equals("code")) {
579          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
580        } else
581          return super.setProperty(name, value);
582        return value;
583      }
584
585      @Override
586      public Base makeProperty(int hash, String name) throws FHIRException {
587        switch (hash) {
588        case 50511102:  return getCategory();
589        case 3059181:  return getCode();
590        default: return super.makeProperty(hash, name);
591        }
592
593      }
594
595      @Override
596      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
597        switch (hash) {
598        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
599        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
600        default: return super.getTypesForProperty(hash, name);
601        }
602
603      }
604
605      @Override
606      public Base addChild(String name) throws FHIRException {
607        if (name.equals("category")) {
608          this.category = new CodeableConcept();
609          return this.category;
610        }
611        else if (name.equals("code")) {
612          this.code = new CodeableConcept();
613          return this.code;
614        }
615        else
616          return super.addChild(name);
617      }
618
619      public ConditionDefinitionMedicationComponent copy() {
620        ConditionDefinitionMedicationComponent dst = new ConditionDefinitionMedicationComponent();
621        copyValues(dst);
622        return dst;
623      }
624
625      public void copyValues(ConditionDefinitionMedicationComponent dst) {
626        super.copyValues(dst);
627        dst.category = category == null ? null : category.copy();
628        dst.code = code == null ? null : code.copy();
629      }
630
631      @Override
632      public boolean equalsDeep(Base other_) {
633        if (!super.equalsDeep(other_))
634          return false;
635        if (!(other_ instanceof ConditionDefinitionMedicationComponent))
636          return false;
637        ConditionDefinitionMedicationComponent o = (ConditionDefinitionMedicationComponent) other_;
638        return compareDeep(category, o.category, true) && compareDeep(code, o.code, true);
639      }
640
641      @Override
642      public boolean equalsShallow(Base other_) {
643        if (!super.equalsShallow(other_))
644          return false;
645        if (!(other_ instanceof ConditionDefinitionMedicationComponent))
646          return false;
647        ConditionDefinitionMedicationComponent o = (ConditionDefinitionMedicationComponent) other_;
648        return true;
649      }
650
651      public boolean isEmpty() {
652        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(category, code);
653      }
654
655  public String fhirType() {
656    return "ConditionDefinition.medication";
657
658  }
659
660  }
661
662    @Block()
663    public static class ConditionDefinitionPreconditionComponent extends BackboneElement implements IBaseBackboneElement {
664        /**
665         * Kind of pre-condition.
666         */
667        @Child(name = "type", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
668        @Description(shortDefinition="sensitive | specific", formalDefinition="Kind of pre-condition." )
669        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-precondition-type")
670        protected Enumeration<ConditionPreconditionType> type;
671
672        /**
673         * Code for relevant Observation.
674         */
675        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
676        @Description(shortDefinition="Code for relevant Observation", formalDefinition="Code for relevant Observation." )
677        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/observation-codes")
678        protected CodeableConcept code;
679
680        /**
681         * Value of Observation.
682         */
683        @Child(name = "value", type = {CodeableConcept.class, Quantity.class}, order=3, min=0, max=1, modifier=false, summary=false)
684        @Description(shortDefinition="Value of Observation", formalDefinition="Value of Observation." )
685        protected DataType value;
686
687        private static final long serialVersionUID = -1210333235L;
688
689    /**
690     * Constructor
691     */
692      public ConditionDefinitionPreconditionComponent() {
693        super();
694      }
695
696    /**
697     * Constructor
698     */
699      public ConditionDefinitionPreconditionComponent(ConditionPreconditionType type, CodeableConcept code) {
700        super();
701        this.setType(type);
702        this.setCode(code);
703      }
704
705        /**
706         * @return {@link #type} (Kind of pre-condition.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
707         */
708        public Enumeration<ConditionPreconditionType> getTypeElement() { 
709          if (this.type == null)
710            if (Configuration.errorOnAutoCreate())
711              throw new Error("Attempt to auto-create ConditionDefinitionPreconditionComponent.type");
712            else if (Configuration.doAutoCreate())
713              this.type = new Enumeration<ConditionPreconditionType>(new ConditionPreconditionTypeEnumFactory()); // bb
714          return this.type;
715        }
716
717        public boolean hasTypeElement() { 
718          return this.type != null && !this.type.isEmpty();
719        }
720
721        public boolean hasType() { 
722          return this.type != null && !this.type.isEmpty();
723        }
724
725        /**
726         * @param value {@link #type} (Kind of pre-condition.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
727         */
728        public ConditionDefinitionPreconditionComponent setTypeElement(Enumeration<ConditionPreconditionType> value) { 
729          this.type = value;
730          return this;
731        }
732
733        /**
734         * @return Kind of pre-condition.
735         */
736        public ConditionPreconditionType getType() { 
737          return this.type == null ? null : this.type.getValue();
738        }
739
740        /**
741         * @param value Kind of pre-condition.
742         */
743        public ConditionDefinitionPreconditionComponent setType(ConditionPreconditionType value) { 
744            if (this.type == null)
745              this.type = new Enumeration<ConditionPreconditionType>(new ConditionPreconditionTypeEnumFactory());
746            this.type.setValue(value);
747          return this;
748        }
749
750        /**
751         * @return {@link #code} (Code for relevant Observation.)
752         */
753        public CodeableConcept getCode() { 
754          if (this.code == null)
755            if (Configuration.errorOnAutoCreate())
756              throw new Error("Attempt to auto-create ConditionDefinitionPreconditionComponent.code");
757            else if (Configuration.doAutoCreate())
758              this.code = new CodeableConcept(); // cc
759          return this.code;
760        }
761
762        public boolean hasCode() { 
763          return this.code != null && !this.code.isEmpty();
764        }
765
766        /**
767         * @param value {@link #code} (Code for relevant Observation.)
768         */
769        public ConditionDefinitionPreconditionComponent setCode(CodeableConcept value) { 
770          this.code = value;
771          return this;
772        }
773
774        /**
775         * @return {@link #value} (Value of Observation.)
776         */
777        public DataType getValue() { 
778          return this.value;
779        }
780
781        /**
782         * @return {@link #value} (Value of Observation.)
783         */
784        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
785          if (this.value == null)
786            this.value = new CodeableConcept();
787          if (!(this.value instanceof CodeableConcept))
788            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
789          return (CodeableConcept) this.value;
790        }
791
792        public boolean hasValueCodeableConcept() { 
793          return this != null && this.value instanceof CodeableConcept;
794        }
795
796        /**
797         * @return {@link #value} (Value of Observation.)
798         */
799        public Quantity getValueQuantity() throws FHIRException { 
800          if (this.value == null)
801            this.value = new Quantity();
802          if (!(this.value instanceof Quantity))
803            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
804          return (Quantity) this.value;
805        }
806
807        public boolean hasValueQuantity() { 
808          return this != null && this.value instanceof Quantity;
809        }
810
811        public boolean hasValue() { 
812          return this.value != null && !this.value.isEmpty();
813        }
814
815        /**
816         * @param value {@link #value} (Value of Observation.)
817         */
818        public ConditionDefinitionPreconditionComponent setValue(DataType value) { 
819          if (value != null && !(value instanceof CodeableConcept || value instanceof Quantity))
820            throw new Error("Not the right type for ConditionDefinition.precondition.value[x]: "+value.fhirType());
821          this.value = value;
822          return this;
823        }
824
825        protected void listChildren(List<Property> children) {
826          super.listChildren(children);
827          children.add(new Property("type", "code", "Kind of pre-condition.", 0, 1, type));
828          children.add(new Property("code", "CodeableConcept", "Code for relevant Observation.", 0, 1, code));
829          children.add(new Property("value[x]", "CodeableConcept|Quantity", "Value of Observation.", 0, 1, value));
830        }
831
832        @Override
833        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
834          switch (_hash) {
835          case 3575610: /*type*/  return new Property("type", "code", "Kind of pre-condition.", 0, 1, type);
836          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Code for relevant Observation.", 0, 1, code);
837          case -1410166417: /*value[x]*/  return new Property("value[x]", "CodeableConcept|Quantity", "Value of Observation.", 0, 1, value);
838          case 111972721: /*value*/  return new Property("value[x]", "CodeableConcept|Quantity", "Value of Observation.", 0, 1, value);
839          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "Value of Observation.", 0, 1, value);
840          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "Value of Observation.", 0, 1, value);
841          default: return super.getNamedProperty(_hash, _name, _checkValid);
842          }
843
844        }
845
846      @Override
847      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
848        switch (hash) {
849        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<ConditionPreconditionType>
850        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
851        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
852        default: return super.getProperty(hash, name, checkValid);
853        }
854
855      }
856
857      @Override
858      public Base setProperty(int hash, String name, Base value) throws FHIRException {
859        switch (hash) {
860        case 3575610: // type
861          value = new ConditionPreconditionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
862          this.type = (Enumeration) value; // Enumeration<ConditionPreconditionType>
863          return value;
864        case 3059181: // code
865          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
866          return value;
867        case 111972721: // value
868          this.value = TypeConvertor.castToType(value); // DataType
869          return value;
870        default: return super.setProperty(hash, name, value);
871        }
872
873      }
874
875      @Override
876      public Base setProperty(String name, Base value) throws FHIRException {
877        if (name.equals("type")) {
878          value = new ConditionPreconditionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
879          this.type = (Enumeration) value; // Enumeration<ConditionPreconditionType>
880        } else if (name.equals("code")) {
881          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
882        } else if (name.equals("value[x]")) {
883          this.value = TypeConvertor.castToType(value); // DataType
884        } else
885          return super.setProperty(name, value);
886        return value;
887      }
888
889      @Override
890      public Base makeProperty(int hash, String name) throws FHIRException {
891        switch (hash) {
892        case 3575610:  return getTypeElement();
893        case 3059181:  return getCode();
894        case -1410166417:  return getValue();
895        case 111972721:  return getValue();
896        default: return super.makeProperty(hash, name);
897        }
898
899      }
900
901      @Override
902      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
903        switch (hash) {
904        case 3575610: /*type*/ return new String[] {"code"};
905        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
906        case 111972721: /*value*/ return new String[] {"CodeableConcept", "Quantity"};
907        default: return super.getTypesForProperty(hash, name);
908        }
909
910      }
911
912      @Override
913      public Base addChild(String name) throws FHIRException {
914        if (name.equals("type")) {
915          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.precondition.type");
916        }
917        else if (name.equals("code")) {
918          this.code = new CodeableConcept();
919          return this.code;
920        }
921        else if (name.equals("valueCodeableConcept")) {
922          this.value = new CodeableConcept();
923          return this.value;
924        }
925        else if (name.equals("valueQuantity")) {
926          this.value = new Quantity();
927          return this.value;
928        }
929        else
930          return super.addChild(name);
931      }
932
933      public ConditionDefinitionPreconditionComponent copy() {
934        ConditionDefinitionPreconditionComponent dst = new ConditionDefinitionPreconditionComponent();
935        copyValues(dst);
936        return dst;
937      }
938
939      public void copyValues(ConditionDefinitionPreconditionComponent dst) {
940        super.copyValues(dst);
941        dst.type = type == null ? null : type.copy();
942        dst.code = code == null ? null : code.copy();
943        dst.value = value == null ? null : value.copy();
944      }
945
946      @Override
947      public boolean equalsDeep(Base other_) {
948        if (!super.equalsDeep(other_))
949          return false;
950        if (!(other_ instanceof ConditionDefinitionPreconditionComponent))
951          return false;
952        ConditionDefinitionPreconditionComponent o = (ConditionDefinitionPreconditionComponent) other_;
953        return compareDeep(type, o.type, true) && compareDeep(code, o.code, true) && compareDeep(value, o.value, true)
954          ;
955      }
956
957      @Override
958      public boolean equalsShallow(Base other_) {
959        if (!super.equalsShallow(other_))
960          return false;
961        if (!(other_ instanceof ConditionDefinitionPreconditionComponent))
962          return false;
963        ConditionDefinitionPreconditionComponent o = (ConditionDefinitionPreconditionComponent) other_;
964        return compareValues(type, o.type, true);
965      }
966
967      public boolean isEmpty() {
968        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, code, value);
969      }
970
971  public String fhirType() {
972    return "ConditionDefinition.precondition";
973
974  }
975
976  }
977
978    @Block()
979    public static class ConditionDefinitionQuestionnaireComponent extends BackboneElement implements IBaseBackboneElement {
980        /**
981         * Use of the questionnaire.
982         */
983        @Child(name = "purpose", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
984        @Description(shortDefinition="preadmit | diff-diagnosis | outcome", formalDefinition="Use of the questionnaire." )
985        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-questionnaire-purpose")
986        protected Enumeration<ConditionQuestionnairePurpose> purpose;
987
988        /**
989         * Specific Questionnaire.
990         */
991        @Child(name = "reference", type = {Questionnaire.class}, order=2, min=1, max=1, modifier=false, summary=false)
992        @Description(shortDefinition="Specific Questionnaire", formalDefinition="Specific Questionnaire." )
993        protected Reference reference;
994
995        private static final long serialVersionUID = -1791379681L;
996
997    /**
998     * Constructor
999     */
1000      public ConditionDefinitionQuestionnaireComponent() {
1001        super();
1002      }
1003
1004    /**
1005     * Constructor
1006     */
1007      public ConditionDefinitionQuestionnaireComponent(ConditionQuestionnairePurpose purpose, Reference reference) {
1008        super();
1009        this.setPurpose(purpose);
1010        this.setReference(reference);
1011      }
1012
1013        /**
1014         * @return {@link #purpose} (Use of the questionnaire.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1015         */
1016        public Enumeration<ConditionQuestionnairePurpose> getPurposeElement() { 
1017          if (this.purpose == null)
1018            if (Configuration.errorOnAutoCreate())
1019              throw new Error("Attempt to auto-create ConditionDefinitionQuestionnaireComponent.purpose");
1020            else if (Configuration.doAutoCreate())
1021              this.purpose = new Enumeration<ConditionQuestionnairePurpose>(new ConditionQuestionnairePurposeEnumFactory()); // bb
1022          return this.purpose;
1023        }
1024
1025        public boolean hasPurposeElement() { 
1026          return this.purpose != null && !this.purpose.isEmpty();
1027        }
1028
1029        public boolean hasPurpose() { 
1030          return this.purpose != null && !this.purpose.isEmpty();
1031        }
1032
1033        /**
1034         * @param value {@link #purpose} (Use of the questionnaire.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
1035         */
1036        public ConditionDefinitionQuestionnaireComponent setPurposeElement(Enumeration<ConditionQuestionnairePurpose> value) { 
1037          this.purpose = value;
1038          return this;
1039        }
1040
1041        /**
1042         * @return Use of the questionnaire.
1043         */
1044        public ConditionQuestionnairePurpose getPurpose() { 
1045          return this.purpose == null ? null : this.purpose.getValue();
1046        }
1047
1048        /**
1049         * @param value Use of the questionnaire.
1050         */
1051        public ConditionDefinitionQuestionnaireComponent setPurpose(ConditionQuestionnairePurpose value) { 
1052            if (this.purpose == null)
1053              this.purpose = new Enumeration<ConditionQuestionnairePurpose>(new ConditionQuestionnairePurposeEnumFactory());
1054            this.purpose.setValue(value);
1055          return this;
1056        }
1057
1058        /**
1059         * @return {@link #reference} (Specific Questionnaire.)
1060         */
1061        public Reference getReference() { 
1062          if (this.reference == null)
1063            if (Configuration.errorOnAutoCreate())
1064              throw new Error("Attempt to auto-create ConditionDefinitionQuestionnaireComponent.reference");
1065            else if (Configuration.doAutoCreate())
1066              this.reference = new Reference(); // cc
1067          return this.reference;
1068        }
1069
1070        public boolean hasReference() { 
1071          return this.reference != null && !this.reference.isEmpty();
1072        }
1073
1074        /**
1075         * @param value {@link #reference} (Specific Questionnaire.)
1076         */
1077        public ConditionDefinitionQuestionnaireComponent setReference(Reference value) { 
1078          this.reference = value;
1079          return this;
1080        }
1081
1082        protected void listChildren(List<Property> children) {
1083          super.listChildren(children);
1084          children.add(new Property("purpose", "code", "Use of the questionnaire.", 0, 1, purpose));
1085          children.add(new Property("reference", "Reference(Questionnaire)", "Specific Questionnaire.", 0, 1, reference));
1086        }
1087
1088        @Override
1089        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1090          switch (_hash) {
1091          case -220463842: /*purpose*/  return new Property("purpose", "code", "Use of the questionnaire.", 0, 1, purpose);
1092          case -925155509: /*reference*/  return new Property("reference", "Reference(Questionnaire)", "Specific Questionnaire.", 0, 1, reference);
1093          default: return super.getNamedProperty(_hash, _name, _checkValid);
1094          }
1095
1096        }
1097
1098      @Override
1099      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1100        switch (hash) {
1101        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // Enumeration<ConditionQuestionnairePurpose>
1102        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
1103        default: return super.getProperty(hash, name, checkValid);
1104        }
1105
1106      }
1107
1108      @Override
1109      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1110        switch (hash) {
1111        case -220463842: // purpose
1112          value = new ConditionQuestionnairePurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
1113          this.purpose = (Enumeration) value; // Enumeration<ConditionQuestionnairePurpose>
1114          return value;
1115        case -925155509: // reference
1116          this.reference = TypeConvertor.castToReference(value); // Reference
1117          return value;
1118        default: return super.setProperty(hash, name, value);
1119        }
1120
1121      }
1122
1123      @Override
1124      public Base setProperty(String name, Base value) throws FHIRException {
1125        if (name.equals("purpose")) {
1126          value = new ConditionQuestionnairePurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
1127          this.purpose = (Enumeration) value; // Enumeration<ConditionQuestionnairePurpose>
1128        } else if (name.equals("reference")) {
1129          this.reference = TypeConvertor.castToReference(value); // Reference
1130        } else
1131          return super.setProperty(name, value);
1132        return value;
1133      }
1134
1135      @Override
1136      public Base makeProperty(int hash, String name) throws FHIRException {
1137        switch (hash) {
1138        case -220463842:  return getPurposeElement();
1139        case -925155509:  return getReference();
1140        default: return super.makeProperty(hash, name);
1141        }
1142
1143      }
1144
1145      @Override
1146      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1147        switch (hash) {
1148        case -220463842: /*purpose*/ return new String[] {"code"};
1149        case -925155509: /*reference*/ return new String[] {"Reference"};
1150        default: return super.getTypesForProperty(hash, name);
1151        }
1152
1153      }
1154
1155      @Override
1156      public Base addChild(String name) throws FHIRException {
1157        if (name.equals("purpose")) {
1158          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.questionnaire.purpose");
1159        }
1160        else if (name.equals("reference")) {
1161          this.reference = new Reference();
1162          return this.reference;
1163        }
1164        else
1165          return super.addChild(name);
1166      }
1167
1168      public ConditionDefinitionQuestionnaireComponent copy() {
1169        ConditionDefinitionQuestionnaireComponent dst = new ConditionDefinitionQuestionnaireComponent();
1170        copyValues(dst);
1171        return dst;
1172      }
1173
1174      public void copyValues(ConditionDefinitionQuestionnaireComponent dst) {
1175        super.copyValues(dst);
1176        dst.purpose = purpose == null ? null : purpose.copy();
1177        dst.reference = reference == null ? null : reference.copy();
1178      }
1179
1180      @Override
1181      public boolean equalsDeep(Base other_) {
1182        if (!super.equalsDeep(other_))
1183          return false;
1184        if (!(other_ instanceof ConditionDefinitionQuestionnaireComponent))
1185          return false;
1186        ConditionDefinitionQuestionnaireComponent o = (ConditionDefinitionQuestionnaireComponent) other_;
1187        return compareDeep(purpose, o.purpose, true) && compareDeep(reference, o.reference, true);
1188      }
1189
1190      @Override
1191      public boolean equalsShallow(Base other_) {
1192        if (!super.equalsShallow(other_))
1193          return false;
1194        if (!(other_ instanceof ConditionDefinitionQuestionnaireComponent))
1195          return false;
1196        ConditionDefinitionQuestionnaireComponent o = (ConditionDefinitionQuestionnaireComponent) other_;
1197        return compareValues(purpose, o.purpose, true);
1198      }
1199
1200      public boolean isEmpty() {
1201        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, reference);
1202      }
1203
1204  public String fhirType() {
1205    return "ConditionDefinition.questionnaire";
1206
1207  }
1208
1209  }
1210
1211    @Block()
1212    public static class ConditionDefinitionPlanComponent extends BackboneElement implements IBaseBackboneElement {
1213        /**
1214         * Use for the plan.
1215         */
1216        @Child(name = "role", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
1217        @Description(shortDefinition="Use for the plan", formalDefinition="Use for the plan." )
1218        protected CodeableConcept role;
1219
1220        /**
1221         * The actual plan.
1222         */
1223        @Child(name = "reference", type = {PlanDefinition.class}, order=2, min=1, max=1, modifier=false, summary=false)
1224        @Description(shortDefinition="The actual plan", formalDefinition="The actual plan." )
1225        protected Reference reference;
1226
1227        private static final long serialVersionUID = -1992921787L;
1228
1229    /**
1230     * Constructor
1231     */
1232      public ConditionDefinitionPlanComponent() {
1233        super();
1234      }
1235
1236    /**
1237     * Constructor
1238     */
1239      public ConditionDefinitionPlanComponent(Reference reference) {
1240        super();
1241        this.setReference(reference);
1242      }
1243
1244        /**
1245         * @return {@link #role} (Use for the plan.)
1246         */
1247        public CodeableConcept getRole() { 
1248          if (this.role == null)
1249            if (Configuration.errorOnAutoCreate())
1250              throw new Error("Attempt to auto-create ConditionDefinitionPlanComponent.role");
1251            else if (Configuration.doAutoCreate())
1252              this.role = new CodeableConcept(); // cc
1253          return this.role;
1254        }
1255
1256        public boolean hasRole() { 
1257          return this.role != null && !this.role.isEmpty();
1258        }
1259
1260        /**
1261         * @param value {@link #role} (Use for the plan.)
1262         */
1263        public ConditionDefinitionPlanComponent setRole(CodeableConcept value) { 
1264          this.role = value;
1265          return this;
1266        }
1267
1268        /**
1269         * @return {@link #reference} (The actual plan.)
1270         */
1271        public Reference getReference() { 
1272          if (this.reference == null)
1273            if (Configuration.errorOnAutoCreate())
1274              throw new Error("Attempt to auto-create ConditionDefinitionPlanComponent.reference");
1275            else if (Configuration.doAutoCreate())
1276              this.reference = new Reference(); // cc
1277          return this.reference;
1278        }
1279
1280        public boolean hasReference() { 
1281          return this.reference != null && !this.reference.isEmpty();
1282        }
1283
1284        /**
1285         * @param value {@link #reference} (The actual plan.)
1286         */
1287        public ConditionDefinitionPlanComponent setReference(Reference value) { 
1288          this.reference = value;
1289          return this;
1290        }
1291
1292        protected void listChildren(List<Property> children) {
1293          super.listChildren(children);
1294          children.add(new Property("role", "CodeableConcept", "Use for the plan.", 0, 1, role));
1295          children.add(new Property("reference", "Reference(PlanDefinition)", "The actual plan.", 0, 1, reference));
1296        }
1297
1298        @Override
1299        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1300          switch (_hash) {
1301          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "Use for the plan.", 0, 1, role);
1302          case -925155509: /*reference*/  return new Property("reference", "Reference(PlanDefinition)", "The actual plan.", 0, 1, reference);
1303          default: return super.getNamedProperty(_hash, _name, _checkValid);
1304          }
1305
1306        }
1307
1308      @Override
1309      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1310        switch (hash) {
1311        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
1312        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
1313        default: return super.getProperty(hash, name, checkValid);
1314        }
1315
1316      }
1317
1318      @Override
1319      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1320        switch (hash) {
1321        case 3506294: // role
1322          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1323          return value;
1324        case -925155509: // reference
1325          this.reference = TypeConvertor.castToReference(value); // Reference
1326          return value;
1327        default: return super.setProperty(hash, name, value);
1328        }
1329
1330      }
1331
1332      @Override
1333      public Base setProperty(String name, Base value) throws FHIRException {
1334        if (name.equals("role")) {
1335          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1336        } else if (name.equals("reference")) {
1337          this.reference = TypeConvertor.castToReference(value); // Reference
1338        } else
1339          return super.setProperty(name, value);
1340        return value;
1341      }
1342
1343      @Override
1344      public Base makeProperty(int hash, String name) throws FHIRException {
1345        switch (hash) {
1346        case 3506294:  return getRole();
1347        case -925155509:  return getReference();
1348        default: return super.makeProperty(hash, name);
1349        }
1350
1351      }
1352
1353      @Override
1354      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1355        switch (hash) {
1356        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
1357        case -925155509: /*reference*/ return new String[] {"Reference"};
1358        default: return super.getTypesForProperty(hash, name);
1359        }
1360
1361      }
1362
1363      @Override
1364      public Base addChild(String name) throws FHIRException {
1365        if (name.equals("role")) {
1366          this.role = new CodeableConcept();
1367          return this.role;
1368        }
1369        else if (name.equals("reference")) {
1370          this.reference = new Reference();
1371          return this.reference;
1372        }
1373        else
1374          return super.addChild(name);
1375      }
1376
1377      public ConditionDefinitionPlanComponent copy() {
1378        ConditionDefinitionPlanComponent dst = new ConditionDefinitionPlanComponent();
1379        copyValues(dst);
1380        return dst;
1381      }
1382
1383      public void copyValues(ConditionDefinitionPlanComponent dst) {
1384        super.copyValues(dst);
1385        dst.role = role == null ? null : role.copy();
1386        dst.reference = reference == null ? null : reference.copy();
1387      }
1388
1389      @Override
1390      public boolean equalsDeep(Base other_) {
1391        if (!super.equalsDeep(other_))
1392          return false;
1393        if (!(other_ instanceof ConditionDefinitionPlanComponent))
1394          return false;
1395        ConditionDefinitionPlanComponent o = (ConditionDefinitionPlanComponent) other_;
1396        return compareDeep(role, o.role, true) && compareDeep(reference, o.reference, true);
1397      }
1398
1399      @Override
1400      public boolean equalsShallow(Base other_) {
1401        if (!super.equalsShallow(other_))
1402          return false;
1403        if (!(other_ instanceof ConditionDefinitionPlanComponent))
1404          return false;
1405        ConditionDefinitionPlanComponent o = (ConditionDefinitionPlanComponent) other_;
1406        return true;
1407      }
1408
1409      public boolean isEmpty() {
1410        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(role, reference);
1411      }
1412
1413  public String fhirType() {
1414    return "ConditionDefinition.plan";
1415
1416  }
1417
1418  }
1419
1420    /**
1421     * An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.
1422     */
1423    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
1424    @Description(shortDefinition="Canonical identifier for this condition definition, represented as a URI (globally unique)", formalDefinition="An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers." )
1425    protected UriType url;
1426
1427    /**
1428     * A formal identifier that is used to identify this condition definition when it is represented in other formats, or referenced in a specification, model, design or an instance.
1429     */
1430    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1431    @Description(shortDefinition="Additional identifier for the condition definition", formalDefinition="A formal identifier that is used to identify this condition definition when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1432    protected List<Identifier> identifier;
1433
1434    /**
1435     * The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
1436     */
1437    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1438    @Description(shortDefinition="Business version of the condition definition", formalDefinition="The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence." )
1439    protected StringType version;
1440
1441    /**
1442     * A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1443     */
1444    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1445    @Description(shortDefinition="Name for this condition definition (computer friendly)", formalDefinition="A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
1446    protected StringType name;
1447
1448    /**
1449     * A short, descriptive, user-friendly title for the condition definition.
1450     */
1451    @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1452    @Description(shortDefinition="Name for this condition definition (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the condition definition." )
1453    protected StringType title;
1454
1455    /**
1456     * An explanatory or alternate title for the event definition giving additional information about its content.
1457     */
1458    @Child(name = "subtitle", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
1459    @Description(shortDefinition="Subordinate title of the event definition", formalDefinition="An explanatory or alternate title for the event definition giving additional information about its content." )
1460    protected StringType subtitle;
1461
1462    /**
1463     * The status of this condition definition. Enables tracking the life-cycle of the content.
1464     */
1465    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
1466    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this condition definition. Enables tracking the life-cycle of the content." )
1467    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
1468    protected Enumeration<PublicationStatus> status;
1469
1470    /**
1471     * A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
1472     */
1473    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1474    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
1475    protected BooleanType experimental;
1476
1477    /**
1478     * The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.
1479     */
1480    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1481    @Description(shortDefinition="Date last changed", formalDefinition="The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes." )
1482    protected DateTimeType date;
1483
1484    /**
1485     * The name of the organization or individual that published the condition definition.
1486     */
1487    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1488    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the condition definition." )
1489    protected StringType publisher;
1490
1491    /**
1492     * Contact details to assist a user in finding and communicating with the publisher.
1493     */
1494    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1495    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
1496    protected List<ContactDetail> contact;
1497
1498    /**
1499     * A free text natural language description of the condition definition from a consumer's perspective.
1500     */
1501    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
1502    @Description(shortDefinition="Natural language description of the condition definition", formalDefinition="A free text natural language description of the condition definition from a consumer's perspective." )
1503    protected MarkdownType description;
1504
1505    /**
1506     * The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate condition definition instances.
1507     */
1508    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1509    @Description(shortDefinition="The context that the content is intended to support", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate condition definition instances." )
1510    protected List<UsageContext> useContext;
1511
1512    /**
1513     * A legal or geographic region in which the condition definition is intended to be used.
1514     */
1515    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1516    @Description(shortDefinition="Intended jurisdiction for condition definition (if applicable)", formalDefinition="A legal or geographic region in which the condition definition is intended to be used." )
1517    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
1518    protected List<CodeableConcept> jurisdiction;
1519
1520    /**
1521     * Identification of the condition, problem or diagnosis.
1522     */
1523    @Child(name = "code", type = {CodeableConcept.class}, order=14, min=1, max=1, modifier=false, summary=true)
1524    @Description(shortDefinition="Identification of the condition, problem or diagnosis", formalDefinition="Identification of the condition, problem or diagnosis." )
1525    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
1526    protected CodeableConcept code;
1527
1528    /**
1529     * A subjective assessment of the severity of the condition as evaluated by the clinician.
1530     */
1531    @Child(name = "severity", type = {CodeableConcept.class}, order=15, min=0, max=1, modifier=false, summary=true)
1532    @Description(shortDefinition="Subjective severity of condition", formalDefinition="A subjective assessment of the severity of the condition as evaluated by the clinician." )
1533    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-severity")
1534    protected CodeableConcept severity;
1535
1536    /**
1537     * The anatomical location where this condition manifests itself.
1538     */
1539    @Child(name = "bodySite", type = {CodeableConcept.class}, order=16, min=0, max=1, modifier=false, summary=true)
1540    @Description(shortDefinition="Anatomical location, if relevant", formalDefinition="The anatomical location where this condition manifests itself." )
1541    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
1542    protected CodeableConcept bodySite;
1543
1544    /**
1545     * Clinical stage or grade of a condition. May include formal severity assessments.
1546     */
1547    @Child(name = "stage", type = {CodeableConcept.class}, order=17, min=0, max=1, modifier=false, summary=true)
1548    @Description(shortDefinition="Stage/grade, usually assessed formally", formalDefinition="Clinical stage or grade of a condition. May include formal severity assessments." )
1549    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-stage")
1550    protected CodeableConcept stage;
1551
1552    /**
1553     * Whether Severity is appropriate to collect for this condition.
1554     */
1555    @Child(name = "hasSeverity", type = {BooleanType.class}, order=18, min=0, max=1, modifier=false, summary=false)
1556    @Description(shortDefinition="Whether Severity is appropriate", formalDefinition="Whether Severity is appropriate to collect for this condition." )
1557    protected BooleanType hasSeverity;
1558
1559    /**
1560     * Whether bodySite is appropriate to collect for this condition.
1561     */
1562    @Child(name = "hasBodySite", type = {BooleanType.class}, order=19, min=0, max=1, modifier=false, summary=false)
1563    @Description(shortDefinition="Whether bodySite is appropriate", formalDefinition="Whether bodySite is appropriate to collect for this condition." )
1564    protected BooleanType hasBodySite;
1565
1566    /**
1567     * Whether stage is appropriate to collect for this condition.
1568     */
1569    @Child(name = "hasStage", type = {BooleanType.class}, order=20, min=0, max=1, modifier=false, summary=false)
1570    @Description(shortDefinition="Whether stage is appropriate", formalDefinition="Whether stage is appropriate to collect for this condition." )
1571    protected BooleanType hasStage;
1572
1573    /**
1574     * Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.
1575     */
1576    @Child(name = "definition", type = {UriType.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1577    @Description(shortDefinition="Formal Definition for the condition", formalDefinition="Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers." )
1578    protected List<UriType> definition;
1579
1580    /**
1581     * Observations particularly relevant to this condition.
1582     */
1583    @Child(name = "observation", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1584    @Description(shortDefinition="Observations particularly relevant to this condition", formalDefinition="Observations particularly relevant to this condition." )
1585    protected List<ConditionDefinitionObservationComponent> observation;
1586
1587    /**
1588     * Medications particularly relevant for this condition.
1589     */
1590    @Child(name = "medication", type = {}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1591    @Description(shortDefinition="Medications particularly relevant for this condition", formalDefinition="Medications particularly relevant for this condition." )
1592    protected List<ConditionDefinitionMedicationComponent> medication;
1593
1594    /**
1595     * An observation that suggests that this condition applies.
1596     */
1597    @Child(name = "precondition", type = {}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1598    @Description(shortDefinition="Observation that suggets this condition", formalDefinition="An observation that suggests that this condition applies." )
1599    protected List<ConditionDefinitionPreconditionComponent> precondition;
1600
1601    /**
1602     * Appropriate team for this condition.
1603     */
1604    @Child(name = "team", type = {CareTeam.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1605    @Description(shortDefinition="Appropriate team for this condition", formalDefinition="Appropriate team for this condition." )
1606    protected List<Reference> team;
1607
1608    /**
1609     * Questionnaire for this condition.
1610     */
1611    @Child(name = "questionnaire", type = {}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1612    @Description(shortDefinition="Questionnaire for this condition", formalDefinition="Questionnaire for this condition." )
1613    protected List<ConditionDefinitionQuestionnaireComponent> questionnaire;
1614
1615    /**
1616     * Plan that is appropriate.
1617     */
1618    @Child(name = "plan", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1619    @Description(shortDefinition="Plan that is appropriate", formalDefinition="Plan that is appropriate." )
1620    protected List<ConditionDefinitionPlanComponent> plan;
1621
1622    private static final long serialVersionUID = 1798806914L;
1623
1624  /**
1625   * Constructor
1626   */
1627    public ConditionDefinition() {
1628      super();
1629    }
1630
1631  /**
1632   * Constructor
1633   */
1634    public ConditionDefinition(PublicationStatus status, CodeableConcept code) {
1635      super();
1636      this.setStatus(status);
1637      this.setCode(code);
1638    }
1639
1640    /**
1641     * @return {@link #url} (An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1642     */
1643    public UriType getUrlElement() { 
1644      if (this.url == null)
1645        if (Configuration.errorOnAutoCreate())
1646          throw new Error("Attempt to auto-create ConditionDefinition.url");
1647        else if (Configuration.doAutoCreate())
1648          this.url = new UriType(); // bb
1649      return this.url;
1650    }
1651
1652    public boolean hasUrlElement() { 
1653      return this.url != null && !this.url.isEmpty();
1654    }
1655
1656    public boolean hasUrl() { 
1657      return this.url != null && !this.url.isEmpty();
1658    }
1659
1660    /**
1661     * @param value {@link #url} (An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1662     */
1663    public ConditionDefinition setUrlElement(UriType value) { 
1664      this.url = value;
1665      return this;
1666    }
1667
1668    /**
1669     * @return An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.
1670     */
1671    public String getUrl() { 
1672      return this.url == null ? null : this.url.getValue();
1673    }
1674
1675    /**
1676     * @param value An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.
1677     */
1678    public ConditionDefinition setUrl(String value) { 
1679      if (Utilities.noString(value))
1680        this.url = null;
1681      else {
1682        if (this.url == null)
1683          this.url = new UriType();
1684        this.url.setValue(value);
1685      }
1686      return this;
1687    }
1688
1689    /**
1690     * @return {@link #identifier} (A formal identifier that is used to identify this condition definition when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1691     */
1692    public List<Identifier> getIdentifier() { 
1693      if (this.identifier == null)
1694        this.identifier = new ArrayList<Identifier>();
1695      return this.identifier;
1696    }
1697
1698    /**
1699     * @return Returns a reference to <code>this</code> for easy method chaining
1700     */
1701    public ConditionDefinition setIdentifier(List<Identifier> theIdentifier) { 
1702      this.identifier = theIdentifier;
1703      return this;
1704    }
1705
1706    public boolean hasIdentifier() { 
1707      if (this.identifier == null)
1708        return false;
1709      for (Identifier item : this.identifier)
1710        if (!item.isEmpty())
1711          return true;
1712      return false;
1713    }
1714
1715    public Identifier addIdentifier() { //3
1716      Identifier t = new Identifier();
1717      if (this.identifier == null)
1718        this.identifier = new ArrayList<Identifier>();
1719      this.identifier.add(t);
1720      return t;
1721    }
1722
1723    public ConditionDefinition addIdentifier(Identifier t) { //3
1724      if (t == null)
1725        return this;
1726      if (this.identifier == null)
1727        this.identifier = new ArrayList<Identifier>();
1728      this.identifier.add(t);
1729      return this;
1730    }
1731
1732    /**
1733     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1734     */
1735    public Identifier getIdentifierFirstRep() { 
1736      if (getIdentifier().isEmpty()) {
1737        addIdentifier();
1738      }
1739      return getIdentifier().get(0);
1740    }
1741
1742    /**
1743     * @return {@link #version} (The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1744     */
1745    public StringType getVersionElement() { 
1746      if (this.version == null)
1747        if (Configuration.errorOnAutoCreate())
1748          throw new Error("Attempt to auto-create ConditionDefinition.version");
1749        else if (Configuration.doAutoCreate())
1750          this.version = new StringType(); // bb
1751      return this.version;
1752    }
1753
1754    public boolean hasVersionElement() { 
1755      return this.version != null && !this.version.isEmpty();
1756    }
1757
1758    public boolean hasVersion() { 
1759      return this.version != null && !this.version.isEmpty();
1760    }
1761
1762    /**
1763     * @param value {@link #version} (The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1764     */
1765    public ConditionDefinition setVersionElement(StringType value) { 
1766      this.version = value;
1767      return this;
1768    }
1769
1770    /**
1771     * @return The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
1772     */
1773    public String getVersion() { 
1774      return this.version == null ? null : this.version.getValue();
1775    }
1776
1777    /**
1778     * @param value The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.
1779     */
1780    public ConditionDefinition setVersion(String value) { 
1781      if (Utilities.noString(value))
1782        this.version = null;
1783      else {
1784        if (this.version == null)
1785          this.version = new StringType();
1786        this.version.setValue(value);
1787      }
1788      return this;
1789    }
1790
1791    /**
1792     * @return {@link #name} (A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1793     */
1794    public StringType getNameElement() { 
1795      if (this.name == null)
1796        if (Configuration.errorOnAutoCreate())
1797          throw new Error("Attempt to auto-create ConditionDefinition.name");
1798        else if (Configuration.doAutoCreate())
1799          this.name = new StringType(); // bb
1800      return this.name;
1801    }
1802
1803    public boolean hasNameElement() { 
1804      return this.name != null && !this.name.isEmpty();
1805    }
1806
1807    public boolean hasName() { 
1808      return this.name != null && !this.name.isEmpty();
1809    }
1810
1811    /**
1812     * @param value {@link #name} (A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1813     */
1814    public ConditionDefinition setNameElement(StringType value) { 
1815      this.name = value;
1816      return this;
1817    }
1818
1819    /**
1820     * @return A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1821     */
1822    public String getName() { 
1823      return this.name == null ? null : this.name.getValue();
1824    }
1825
1826    /**
1827     * @param value A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.
1828     */
1829    public ConditionDefinition setName(String value) { 
1830      if (Utilities.noString(value))
1831        this.name = null;
1832      else {
1833        if (this.name == null)
1834          this.name = new StringType();
1835        this.name.setValue(value);
1836      }
1837      return this;
1838    }
1839
1840    /**
1841     * @return {@link #title} (A short, descriptive, user-friendly title for the condition definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1842     */
1843    public StringType getTitleElement() { 
1844      if (this.title == null)
1845        if (Configuration.errorOnAutoCreate())
1846          throw new Error("Attempt to auto-create ConditionDefinition.title");
1847        else if (Configuration.doAutoCreate())
1848          this.title = new StringType(); // bb
1849      return this.title;
1850    }
1851
1852    public boolean hasTitleElement() { 
1853      return this.title != null && !this.title.isEmpty();
1854    }
1855
1856    public boolean hasTitle() { 
1857      return this.title != null && !this.title.isEmpty();
1858    }
1859
1860    /**
1861     * @param value {@link #title} (A short, descriptive, user-friendly title for the condition definition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1862     */
1863    public ConditionDefinition setTitleElement(StringType value) { 
1864      this.title = value;
1865      return this;
1866    }
1867
1868    /**
1869     * @return A short, descriptive, user-friendly title for the condition definition.
1870     */
1871    public String getTitle() { 
1872      return this.title == null ? null : this.title.getValue();
1873    }
1874
1875    /**
1876     * @param value A short, descriptive, user-friendly title for the condition definition.
1877     */
1878    public ConditionDefinition setTitle(String value) { 
1879      if (Utilities.noString(value))
1880        this.title = null;
1881      else {
1882        if (this.title == null)
1883          this.title = new StringType();
1884        this.title.setValue(value);
1885      }
1886      return this;
1887    }
1888
1889    /**
1890     * @return {@link #subtitle} (An explanatory or alternate title for the event definition giving additional information about its content.). This is the underlying object with id, value and extensions. The accessor "getSubtitle" gives direct access to the value
1891     */
1892    public StringType getSubtitleElement() { 
1893      if (this.subtitle == null)
1894        if (Configuration.errorOnAutoCreate())
1895          throw new Error("Attempt to auto-create ConditionDefinition.subtitle");
1896        else if (Configuration.doAutoCreate())
1897          this.subtitle = new StringType(); // bb
1898      return this.subtitle;
1899    }
1900
1901    public boolean hasSubtitleElement() { 
1902      return this.subtitle != null && !this.subtitle.isEmpty();
1903    }
1904
1905    public boolean hasSubtitle() { 
1906      return this.subtitle != null && !this.subtitle.isEmpty();
1907    }
1908
1909    /**
1910     * @param value {@link #subtitle} (An explanatory or alternate title for the event definition giving additional information about its content.). This is the underlying object with id, value and extensions. The accessor "getSubtitle" gives direct access to the value
1911     */
1912    public ConditionDefinition setSubtitleElement(StringType value) { 
1913      this.subtitle = value;
1914      return this;
1915    }
1916
1917    /**
1918     * @return An explanatory or alternate title for the event definition giving additional information about its content.
1919     */
1920    public String getSubtitle() { 
1921      return this.subtitle == null ? null : this.subtitle.getValue();
1922    }
1923
1924    /**
1925     * @param value An explanatory or alternate title for the event definition giving additional information about its content.
1926     */
1927    public ConditionDefinition setSubtitle(String value) { 
1928      if (Utilities.noString(value))
1929        this.subtitle = null;
1930      else {
1931        if (this.subtitle == null)
1932          this.subtitle = new StringType();
1933        this.subtitle.setValue(value);
1934      }
1935      return this;
1936    }
1937
1938    /**
1939     * @return {@link #status} (The status of this condition definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1940     */
1941    public Enumeration<PublicationStatus> getStatusElement() { 
1942      if (this.status == null)
1943        if (Configuration.errorOnAutoCreate())
1944          throw new Error("Attempt to auto-create ConditionDefinition.status");
1945        else if (Configuration.doAutoCreate())
1946          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1947      return this.status;
1948    }
1949
1950    public boolean hasStatusElement() { 
1951      return this.status != null && !this.status.isEmpty();
1952    }
1953
1954    public boolean hasStatus() { 
1955      return this.status != null && !this.status.isEmpty();
1956    }
1957
1958    /**
1959     * @param value {@link #status} (The status of this condition definition. Enables tracking the life-cycle of the content.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1960     */
1961    public ConditionDefinition setStatusElement(Enumeration<PublicationStatus> value) { 
1962      this.status = value;
1963      return this;
1964    }
1965
1966    /**
1967     * @return The status of this condition definition. Enables tracking the life-cycle of the content.
1968     */
1969    public PublicationStatus getStatus() { 
1970      return this.status == null ? null : this.status.getValue();
1971    }
1972
1973    /**
1974     * @param value The status of this condition definition. Enables tracking the life-cycle of the content.
1975     */
1976    public ConditionDefinition setStatus(PublicationStatus value) { 
1977        if (this.status == null)
1978          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1979        this.status.setValue(value);
1980      return this;
1981    }
1982
1983    /**
1984     * @return {@link #experimental} (A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
1985     */
1986    public BooleanType getExperimentalElement() { 
1987      if (this.experimental == null)
1988        if (Configuration.errorOnAutoCreate())
1989          throw new Error("Attempt to auto-create ConditionDefinition.experimental");
1990        else if (Configuration.doAutoCreate())
1991          this.experimental = new BooleanType(); // bb
1992      return this.experimental;
1993    }
1994
1995    public boolean hasExperimentalElement() { 
1996      return this.experimental != null && !this.experimental.isEmpty();
1997    }
1998
1999    public boolean hasExperimental() { 
2000      return this.experimental != null && !this.experimental.isEmpty();
2001    }
2002
2003    /**
2004     * @param value {@link #experimental} (A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.). This is the underlying object with id, value and extensions. The accessor "getExperimental" gives direct access to the value
2005     */
2006    public ConditionDefinition setExperimentalElement(BooleanType value) { 
2007      this.experimental = value;
2008      return this;
2009    }
2010
2011    /**
2012     * @return A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2013     */
2014    public boolean getExperimental() { 
2015      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2016    }
2017
2018    /**
2019     * @param value A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
2020     */
2021    public ConditionDefinition setExperimental(boolean value) { 
2022        if (this.experimental == null)
2023          this.experimental = new BooleanType();
2024        this.experimental.setValue(value);
2025      return this;
2026    }
2027
2028    /**
2029     * @return {@link #date} (The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2030     */
2031    public DateTimeType getDateElement() { 
2032      if (this.date == null)
2033        if (Configuration.errorOnAutoCreate())
2034          throw new Error("Attempt to auto-create ConditionDefinition.date");
2035        else if (Configuration.doAutoCreate())
2036          this.date = new DateTimeType(); // bb
2037      return this.date;
2038    }
2039
2040    public boolean hasDateElement() { 
2041      return this.date != null && !this.date.isEmpty();
2042    }
2043
2044    public boolean hasDate() { 
2045      return this.date != null && !this.date.isEmpty();
2046    }
2047
2048    /**
2049     * @param value {@link #date} (The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2050     */
2051    public ConditionDefinition setDateElement(DateTimeType value) { 
2052      this.date = value;
2053      return this;
2054    }
2055
2056    /**
2057     * @return The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.
2058     */
2059    public Date getDate() { 
2060      return this.date == null ? null : this.date.getValue();
2061    }
2062
2063    /**
2064     * @param value The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.
2065     */
2066    public ConditionDefinition setDate(Date value) { 
2067      if (value == null)
2068        this.date = null;
2069      else {
2070        if (this.date == null)
2071          this.date = new DateTimeType();
2072        this.date.setValue(value);
2073      }
2074      return this;
2075    }
2076
2077    /**
2078     * @return {@link #publisher} (The name of the organization or individual that published the condition definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2079     */
2080    public StringType getPublisherElement() { 
2081      if (this.publisher == null)
2082        if (Configuration.errorOnAutoCreate())
2083          throw new Error("Attempt to auto-create ConditionDefinition.publisher");
2084        else if (Configuration.doAutoCreate())
2085          this.publisher = new StringType(); // bb
2086      return this.publisher;
2087    }
2088
2089    public boolean hasPublisherElement() { 
2090      return this.publisher != null && !this.publisher.isEmpty();
2091    }
2092
2093    public boolean hasPublisher() { 
2094      return this.publisher != null && !this.publisher.isEmpty();
2095    }
2096
2097    /**
2098     * @param value {@link #publisher} (The name of the organization or individual that published the condition definition.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2099     */
2100    public ConditionDefinition setPublisherElement(StringType value) { 
2101      this.publisher = value;
2102      return this;
2103    }
2104
2105    /**
2106     * @return The name of the organization or individual that published the condition definition.
2107     */
2108    public String getPublisher() { 
2109      return this.publisher == null ? null : this.publisher.getValue();
2110    }
2111
2112    /**
2113     * @param value The name of the organization or individual that published the condition definition.
2114     */
2115    public ConditionDefinition setPublisher(String value) { 
2116      if (Utilities.noString(value))
2117        this.publisher = null;
2118      else {
2119        if (this.publisher == null)
2120          this.publisher = new StringType();
2121        this.publisher.setValue(value);
2122      }
2123      return this;
2124    }
2125
2126    /**
2127     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2128     */
2129    public List<ContactDetail> getContact() { 
2130      if (this.contact == null)
2131        this.contact = new ArrayList<ContactDetail>();
2132      return this.contact;
2133    }
2134
2135    /**
2136     * @return Returns a reference to <code>this</code> for easy method chaining
2137     */
2138    public ConditionDefinition setContact(List<ContactDetail> theContact) { 
2139      this.contact = theContact;
2140      return this;
2141    }
2142
2143    public boolean hasContact() { 
2144      if (this.contact == null)
2145        return false;
2146      for (ContactDetail item : this.contact)
2147        if (!item.isEmpty())
2148          return true;
2149      return false;
2150    }
2151
2152    public ContactDetail addContact() { //3
2153      ContactDetail t = new ContactDetail();
2154      if (this.contact == null)
2155        this.contact = new ArrayList<ContactDetail>();
2156      this.contact.add(t);
2157      return t;
2158    }
2159
2160    public ConditionDefinition addContact(ContactDetail t) { //3
2161      if (t == null)
2162        return this;
2163      if (this.contact == null)
2164        this.contact = new ArrayList<ContactDetail>();
2165      this.contact.add(t);
2166      return this;
2167    }
2168
2169    /**
2170     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
2171     */
2172    public ContactDetail getContactFirstRep() { 
2173      if (getContact().isEmpty()) {
2174        addContact();
2175      }
2176      return getContact().get(0);
2177    }
2178
2179    /**
2180     * @return {@link #description} (A free text natural language description of the condition definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2181     */
2182    public MarkdownType getDescriptionElement() { 
2183      if (this.description == null)
2184        if (Configuration.errorOnAutoCreate())
2185          throw new Error("Attempt to auto-create ConditionDefinition.description");
2186        else if (Configuration.doAutoCreate())
2187          this.description = new MarkdownType(); // bb
2188      return this.description;
2189    }
2190
2191    public boolean hasDescriptionElement() { 
2192      return this.description != null && !this.description.isEmpty();
2193    }
2194
2195    public boolean hasDescription() { 
2196      return this.description != null && !this.description.isEmpty();
2197    }
2198
2199    /**
2200     * @param value {@link #description} (A free text natural language description of the condition definition from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2201     */
2202    public ConditionDefinition setDescriptionElement(MarkdownType value) { 
2203      this.description = value;
2204      return this;
2205    }
2206
2207    /**
2208     * @return A free text natural language description of the condition definition from a consumer's perspective.
2209     */
2210    public String getDescription() { 
2211      return this.description == null ? null : this.description.getValue();
2212    }
2213
2214    /**
2215     * @param value A free text natural language description of the condition definition from a consumer's perspective.
2216     */
2217    public ConditionDefinition setDescription(String value) { 
2218      if (value == null)
2219        this.description = null;
2220      else {
2221        if (this.description == null)
2222          this.description = new MarkdownType();
2223        this.description.setValue(value);
2224      }
2225      return this;
2226    }
2227
2228    /**
2229     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate condition definition instances.)
2230     */
2231    public List<UsageContext> getUseContext() { 
2232      if (this.useContext == null)
2233        this.useContext = new ArrayList<UsageContext>();
2234      return this.useContext;
2235    }
2236
2237    /**
2238     * @return Returns a reference to <code>this</code> for easy method chaining
2239     */
2240    public ConditionDefinition setUseContext(List<UsageContext> theUseContext) { 
2241      this.useContext = theUseContext;
2242      return this;
2243    }
2244
2245    public boolean hasUseContext() { 
2246      if (this.useContext == null)
2247        return false;
2248      for (UsageContext item : this.useContext)
2249        if (!item.isEmpty())
2250          return true;
2251      return false;
2252    }
2253
2254    public UsageContext addUseContext() { //3
2255      UsageContext t = new UsageContext();
2256      if (this.useContext == null)
2257        this.useContext = new ArrayList<UsageContext>();
2258      this.useContext.add(t);
2259      return t;
2260    }
2261
2262    public ConditionDefinition addUseContext(UsageContext t) { //3
2263      if (t == null)
2264        return this;
2265      if (this.useContext == null)
2266        this.useContext = new ArrayList<UsageContext>();
2267      this.useContext.add(t);
2268      return this;
2269    }
2270
2271    /**
2272     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
2273     */
2274    public UsageContext getUseContextFirstRep() { 
2275      if (getUseContext().isEmpty()) {
2276        addUseContext();
2277      }
2278      return getUseContext().get(0);
2279    }
2280
2281    /**
2282     * @return {@link #jurisdiction} (A legal or geographic region in which the condition definition is intended to be used.)
2283     */
2284    public List<CodeableConcept> getJurisdiction() { 
2285      if (this.jurisdiction == null)
2286        this.jurisdiction = new ArrayList<CodeableConcept>();
2287      return this.jurisdiction;
2288    }
2289
2290    /**
2291     * @return Returns a reference to <code>this</code> for easy method chaining
2292     */
2293    public ConditionDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2294      this.jurisdiction = theJurisdiction;
2295      return this;
2296    }
2297
2298    public boolean hasJurisdiction() { 
2299      if (this.jurisdiction == null)
2300        return false;
2301      for (CodeableConcept item : this.jurisdiction)
2302        if (!item.isEmpty())
2303          return true;
2304      return false;
2305    }
2306
2307    public CodeableConcept addJurisdiction() { //3
2308      CodeableConcept t = new CodeableConcept();
2309      if (this.jurisdiction == null)
2310        this.jurisdiction = new ArrayList<CodeableConcept>();
2311      this.jurisdiction.add(t);
2312      return t;
2313    }
2314
2315    public ConditionDefinition addJurisdiction(CodeableConcept t) { //3
2316      if (t == null)
2317        return this;
2318      if (this.jurisdiction == null)
2319        this.jurisdiction = new ArrayList<CodeableConcept>();
2320      this.jurisdiction.add(t);
2321      return this;
2322    }
2323
2324    /**
2325     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
2326     */
2327    public CodeableConcept getJurisdictionFirstRep() { 
2328      if (getJurisdiction().isEmpty()) {
2329        addJurisdiction();
2330      }
2331      return getJurisdiction().get(0);
2332    }
2333
2334    /**
2335     * @return {@link #code} (Identification of the condition, problem or diagnosis.)
2336     */
2337    public CodeableConcept getCode() { 
2338      if (this.code == null)
2339        if (Configuration.errorOnAutoCreate())
2340          throw new Error("Attempt to auto-create ConditionDefinition.code");
2341        else if (Configuration.doAutoCreate())
2342          this.code = new CodeableConcept(); // cc
2343      return this.code;
2344    }
2345
2346    public boolean hasCode() { 
2347      return this.code != null && !this.code.isEmpty();
2348    }
2349
2350    /**
2351     * @param value {@link #code} (Identification of the condition, problem or diagnosis.)
2352     */
2353    public ConditionDefinition setCode(CodeableConcept value) { 
2354      this.code = value;
2355      return this;
2356    }
2357
2358    /**
2359     * @return {@link #severity} (A subjective assessment of the severity of the condition as evaluated by the clinician.)
2360     */
2361    public CodeableConcept getSeverity() { 
2362      if (this.severity == null)
2363        if (Configuration.errorOnAutoCreate())
2364          throw new Error("Attempt to auto-create ConditionDefinition.severity");
2365        else if (Configuration.doAutoCreate())
2366          this.severity = new CodeableConcept(); // cc
2367      return this.severity;
2368    }
2369
2370    public boolean hasSeverity() { 
2371      return this.severity != null && !this.severity.isEmpty();
2372    }
2373
2374    /**
2375     * @param value {@link #severity} (A subjective assessment of the severity of the condition as evaluated by the clinician.)
2376     */
2377    public ConditionDefinition setSeverity(CodeableConcept value) { 
2378      this.severity = value;
2379      return this;
2380    }
2381
2382    /**
2383     * @return {@link #bodySite} (The anatomical location where this condition manifests itself.)
2384     */
2385    public CodeableConcept getBodySite() { 
2386      if (this.bodySite == null)
2387        if (Configuration.errorOnAutoCreate())
2388          throw new Error("Attempt to auto-create ConditionDefinition.bodySite");
2389        else if (Configuration.doAutoCreate())
2390          this.bodySite = new CodeableConcept(); // cc
2391      return this.bodySite;
2392    }
2393
2394    public boolean hasBodySite() { 
2395      return this.bodySite != null && !this.bodySite.isEmpty();
2396    }
2397
2398    /**
2399     * @param value {@link #bodySite} (The anatomical location where this condition manifests itself.)
2400     */
2401    public ConditionDefinition setBodySite(CodeableConcept value) { 
2402      this.bodySite = value;
2403      return this;
2404    }
2405
2406    /**
2407     * @return {@link #stage} (Clinical stage or grade of a condition. May include formal severity assessments.)
2408     */
2409    public CodeableConcept getStage() { 
2410      if (this.stage == null)
2411        if (Configuration.errorOnAutoCreate())
2412          throw new Error("Attempt to auto-create ConditionDefinition.stage");
2413        else if (Configuration.doAutoCreate())
2414          this.stage = new CodeableConcept(); // cc
2415      return this.stage;
2416    }
2417
2418    public boolean hasStage() { 
2419      return this.stage != null && !this.stage.isEmpty();
2420    }
2421
2422    /**
2423     * @param value {@link #stage} (Clinical stage or grade of a condition. May include formal severity assessments.)
2424     */
2425    public ConditionDefinition setStage(CodeableConcept value) { 
2426      this.stage = value;
2427      return this;
2428    }
2429
2430    /**
2431     * @return {@link #hasSeverity} (Whether Severity is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasSeverity" gives direct access to the value
2432     */
2433    public BooleanType getHasSeverityElement() { 
2434      if (this.hasSeverity == null)
2435        if (Configuration.errorOnAutoCreate())
2436          throw new Error("Attempt to auto-create ConditionDefinition.hasSeverity");
2437        else if (Configuration.doAutoCreate())
2438          this.hasSeverity = new BooleanType(); // bb
2439      return this.hasSeverity;
2440    }
2441
2442    public boolean hasHasSeverityElement() { 
2443      return this.hasSeverity != null && !this.hasSeverity.isEmpty();
2444    }
2445
2446    public boolean hasHasSeverity() { 
2447      return this.hasSeverity != null && !this.hasSeverity.isEmpty();
2448    }
2449
2450    /**
2451     * @param value {@link #hasSeverity} (Whether Severity is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasSeverity" gives direct access to the value
2452     */
2453    public ConditionDefinition setHasSeverityElement(BooleanType value) { 
2454      this.hasSeverity = value;
2455      return this;
2456    }
2457
2458    /**
2459     * @return Whether Severity is appropriate to collect for this condition.
2460     */
2461    public boolean getHasSeverity() { 
2462      return this.hasSeverity == null || this.hasSeverity.isEmpty() ? false : this.hasSeverity.getValue();
2463    }
2464
2465    /**
2466     * @param value Whether Severity is appropriate to collect for this condition.
2467     */
2468    public ConditionDefinition setHasSeverity(boolean value) { 
2469        if (this.hasSeverity == null)
2470          this.hasSeverity = new BooleanType();
2471        this.hasSeverity.setValue(value);
2472      return this;
2473    }
2474
2475    /**
2476     * @return {@link #hasBodySite} (Whether bodySite is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasBodySite" gives direct access to the value
2477     */
2478    public BooleanType getHasBodySiteElement() { 
2479      if (this.hasBodySite == null)
2480        if (Configuration.errorOnAutoCreate())
2481          throw new Error("Attempt to auto-create ConditionDefinition.hasBodySite");
2482        else if (Configuration.doAutoCreate())
2483          this.hasBodySite = new BooleanType(); // bb
2484      return this.hasBodySite;
2485    }
2486
2487    public boolean hasHasBodySiteElement() { 
2488      return this.hasBodySite != null && !this.hasBodySite.isEmpty();
2489    }
2490
2491    public boolean hasHasBodySite() { 
2492      return this.hasBodySite != null && !this.hasBodySite.isEmpty();
2493    }
2494
2495    /**
2496     * @param value {@link #hasBodySite} (Whether bodySite is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasBodySite" gives direct access to the value
2497     */
2498    public ConditionDefinition setHasBodySiteElement(BooleanType value) { 
2499      this.hasBodySite = value;
2500      return this;
2501    }
2502
2503    /**
2504     * @return Whether bodySite is appropriate to collect for this condition.
2505     */
2506    public boolean getHasBodySite() { 
2507      return this.hasBodySite == null || this.hasBodySite.isEmpty() ? false : this.hasBodySite.getValue();
2508    }
2509
2510    /**
2511     * @param value Whether bodySite is appropriate to collect for this condition.
2512     */
2513    public ConditionDefinition setHasBodySite(boolean value) { 
2514        if (this.hasBodySite == null)
2515          this.hasBodySite = new BooleanType();
2516        this.hasBodySite.setValue(value);
2517      return this;
2518    }
2519
2520    /**
2521     * @return {@link #hasStage} (Whether stage is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasStage" gives direct access to the value
2522     */
2523    public BooleanType getHasStageElement() { 
2524      if (this.hasStage == null)
2525        if (Configuration.errorOnAutoCreate())
2526          throw new Error("Attempt to auto-create ConditionDefinition.hasStage");
2527        else if (Configuration.doAutoCreate())
2528          this.hasStage = new BooleanType(); // bb
2529      return this.hasStage;
2530    }
2531
2532    public boolean hasHasStageElement() { 
2533      return this.hasStage != null && !this.hasStage.isEmpty();
2534    }
2535
2536    public boolean hasHasStage() { 
2537      return this.hasStage != null && !this.hasStage.isEmpty();
2538    }
2539
2540    /**
2541     * @param value {@link #hasStage} (Whether stage is appropriate to collect for this condition.). This is the underlying object with id, value and extensions. The accessor "getHasStage" gives direct access to the value
2542     */
2543    public ConditionDefinition setHasStageElement(BooleanType value) { 
2544      this.hasStage = value;
2545      return this;
2546    }
2547
2548    /**
2549     * @return Whether stage is appropriate to collect for this condition.
2550     */
2551    public boolean getHasStage() { 
2552      return this.hasStage == null || this.hasStage.isEmpty() ? false : this.hasStage.getValue();
2553    }
2554
2555    /**
2556     * @param value Whether stage is appropriate to collect for this condition.
2557     */
2558    public ConditionDefinition setHasStage(boolean value) { 
2559        if (this.hasStage == null)
2560          this.hasStage = new BooleanType();
2561        this.hasStage.setValue(value);
2562      return this;
2563    }
2564
2565    /**
2566     * @return {@link #definition} (Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.)
2567     */
2568    public List<UriType> getDefinition() { 
2569      if (this.definition == null)
2570        this.definition = new ArrayList<UriType>();
2571      return this.definition;
2572    }
2573
2574    /**
2575     * @return Returns a reference to <code>this</code> for easy method chaining
2576     */
2577    public ConditionDefinition setDefinition(List<UriType> theDefinition) { 
2578      this.definition = theDefinition;
2579      return this;
2580    }
2581
2582    public boolean hasDefinition() { 
2583      if (this.definition == null)
2584        return false;
2585      for (UriType item : this.definition)
2586        if (!item.isEmpty())
2587          return true;
2588      return false;
2589    }
2590
2591    /**
2592     * @return {@link #definition} (Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.)
2593     */
2594    public UriType addDefinitionElement() {//2 
2595      UriType t = new UriType();
2596      if (this.definition == null)
2597        this.definition = new ArrayList<UriType>();
2598      this.definition.add(t);
2599      return t;
2600    }
2601
2602    /**
2603     * @param value {@link #definition} (Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.)
2604     */
2605    public ConditionDefinition addDefinition(String value) { //1
2606      UriType t = new UriType();
2607      t.setValue(value);
2608      if (this.definition == null)
2609        this.definition = new ArrayList<UriType>();
2610      this.definition.add(t);
2611      return this;
2612    }
2613
2614    /**
2615     * @param value {@link #definition} (Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.)
2616     */
2617    public boolean hasDefinition(String value) { 
2618      if (this.definition == null)
2619        return false;
2620      for (UriType v : this.definition)
2621        if (v.getValue().equals(value)) // uri
2622          return true;
2623      return false;
2624    }
2625
2626    /**
2627     * @return {@link #observation} (Observations particularly relevant to this condition.)
2628     */
2629    public List<ConditionDefinitionObservationComponent> getObservation() { 
2630      if (this.observation == null)
2631        this.observation = new ArrayList<ConditionDefinitionObservationComponent>();
2632      return this.observation;
2633    }
2634
2635    /**
2636     * @return Returns a reference to <code>this</code> for easy method chaining
2637     */
2638    public ConditionDefinition setObservation(List<ConditionDefinitionObservationComponent> theObservation) { 
2639      this.observation = theObservation;
2640      return this;
2641    }
2642
2643    public boolean hasObservation() { 
2644      if (this.observation == null)
2645        return false;
2646      for (ConditionDefinitionObservationComponent item : this.observation)
2647        if (!item.isEmpty())
2648          return true;
2649      return false;
2650    }
2651
2652    public ConditionDefinitionObservationComponent addObservation() { //3
2653      ConditionDefinitionObservationComponent t = new ConditionDefinitionObservationComponent();
2654      if (this.observation == null)
2655        this.observation = new ArrayList<ConditionDefinitionObservationComponent>();
2656      this.observation.add(t);
2657      return t;
2658    }
2659
2660    public ConditionDefinition addObservation(ConditionDefinitionObservationComponent t) { //3
2661      if (t == null)
2662        return this;
2663      if (this.observation == null)
2664        this.observation = new ArrayList<ConditionDefinitionObservationComponent>();
2665      this.observation.add(t);
2666      return this;
2667    }
2668
2669    /**
2670     * @return The first repetition of repeating field {@link #observation}, creating it if it does not already exist {3}
2671     */
2672    public ConditionDefinitionObservationComponent getObservationFirstRep() { 
2673      if (getObservation().isEmpty()) {
2674        addObservation();
2675      }
2676      return getObservation().get(0);
2677    }
2678
2679    /**
2680     * @return {@link #medication} (Medications particularly relevant for this condition.)
2681     */
2682    public List<ConditionDefinitionMedicationComponent> getMedication() { 
2683      if (this.medication == null)
2684        this.medication = new ArrayList<ConditionDefinitionMedicationComponent>();
2685      return this.medication;
2686    }
2687
2688    /**
2689     * @return Returns a reference to <code>this</code> for easy method chaining
2690     */
2691    public ConditionDefinition setMedication(List<ConditionDefinitionMedicationComponent> theMedication) { 
2692      this.medication = theMedication;
2693      return this;
2694    }
2695
2696    public boolean hasMedication() { 
2697      if (this.medication == null)
2698        return false;
2699      for (ConditionDefinitionMedicationComponent item : this.medication)
2700        if (!item.isEmpty())
2701          return true;
2702      return false;
2703    }
2704
2705    public ConditionDefinitionMedicationComponent addMedication() { //3
2706      ConditionDefinitionMedicationComponent t = new ConditionDefinitionMedicationComponent();
2707      if (this.medication == null)
2708        this.medication = new ArrayList<ConditionDefinitionMedicationComponent>();
2709      this.medication.add(t);
2710      return t;
2711    }
2712
2713    public ConditionDefinition addMedication(ConditionDefinitionMedicationComponent t) { //3
2714      if (t == null)
2715        return this;
2716      if (this.medication == null)
2717        this.medication = new ArrayList<ConditionDefinitionMedicationComponent>();
2718      this.medication.add(t);
2719      return this;
2720    }
2721
2722    /**
2723     * @return The first repetition of repeating field {@link #medication}, creating it if it does not already exist {3}
2724     */
2725    public ConditionDefinitionMedicationComponent getMedicationFirstRep() { 
2726      if (getMedication().isEmpty()) {
2727        addMedication();
2728      }
2729      return getMedication().get(0);
2730    }
2731
2732    /**
2733     * @return {@link #precondition} (An observation that suggests that this condition applies.)
2734     */
2735    public List<ConditionDefinitionPreconditionComponent> getPrecondition() { 
2736      if (this.precondition == null)
2737        this.precondition = new ArrayList<ConditionDefinitionPreconditionComponent>();
2738      return this.precondition;
2739    }
2740
2741    /**
2742     * @return Returns a reference to <code>this</code> for easy method chaining
2743     */
2744    public ConditionDefinition setPrecondition(List<ConditionDefinitionPreconditionComponent> thePrecondition) { 
2745      this.precondition = thePrecondition;
2746      return this;
2747    }
2748
2749    public boolean hasPrecondition() { 
2750      if (this.precondition == null)
2751        return false;
2752      for (ConditionDefinitionPreconditionComponent item : this.precondition)
2753        if (!item.isEmpty())
2754          return true;
2755      return false;
2756    }
2757
2758    public ConditionDefinitionPreconditionComponent addPrecondition() { //3
2759      ConditionDefinitionPreconditionComponent t = new ConditionDefinitionPreconditionComponent();
2760      if (this.precondition == null)
2761        this.precondition = new ArrayList<ConditionDefinitionPreconditionComponent>();
2762      this.precondition.add(t);
2763      return t;
2764    }
2765
2766    public ConditionDefinition addPrecondition(ConditionDefinitionPreconditionComponent t) { //3
2767      if (t == null)
2768        return this;
2769      if (this.precondition == null)
2770        this.precondition = new ArrayList<ConditionDefinitionPreconditionComponent>();
2771      this.precondition.add(t);
2772      return this;
2773    }
2774
2775    /**
2776     * @return The first repetition of repeating field {@link #precondition}, creating it if it does not already exist {3}
2777     */
2778    public ConditionDefinitionPreconditionComponent getPreconditionFirstRep() { 
2779      if (getPrecondition().isEmpty()) {
2780        addPrecondition();
2781      }
2782      return getPrecondition().get(0);
2783    }
2784
2785    /**
2786     * @return {@link #team} (Appropriate team for this condition.)
2787     */
2788    public List<Reference> getTeam() { 
2789      if (this.team == null)
2790        this.team = new ArrayList<Reference>();
2791      return this.team;
2792    }
2793
2794    /**
2795     * @return Returns a reference to <code>this</code> for easy method chaining
2796     */
2797    public ConditionDefinition setTeam(List<Reference> theTeam) { 
2798      this.team = theTeam;
2799      return this;
2800    }
2801
2802    public boolean hasTeam() { 
2803      if (this.team == null)
2804        return false;
2805      for (Reference item : this.team)
2806        if (!item.isEmpty())
2807          return true;
2808      return false;
2809    }
2810
2811    public Reference addTeam() { //3
2812      Reference t = new Reference();
2813      if (this.team == null)
2814        this.team = new ArrayList<Reference>();
2815      this.team.add(t);
2816      return t;
2817    }
2818
2819    public ConditionDefinition addTeam(Reference t) { //3
2820      if (t == null)
2821        return this;
2822      if (this.team == null)
2823        this.team = new ArrayList<Reference>();
2824      this.team.add(t);
2825      return this;
2826    }
2827
2828    /**
2829     * @return The first repetition of repeating field {@link #team}, creating it if it does not already exist {3}
2830     */
2831    public Reference getTeamFirstRep() { 
2832      if (getTeam().isEmpty()) {
2833        addTeam();
2834      }
2835      return getTeam().get(0);
2836    }
2837
2838    /**
2839     * @return {@link #questionnaire} (Questionnaire for this condition.)
2840     */
2841    public List<ConditionDefinitionQuestionnaireComponent> getQuestionnaire() { 
2842      if (this.questionnaire == null)
2843        this.questionnaire = new ArrayList<ConditionDefinitionQuestionnaireComponent>();
2844      return this.questionnaire;
2845    }
2846
2847    /**
2848     * @return Returns a reference to <code>this</code> for easy method chaining
2849     */
2850    public ConditionDefinition setQuestionnaire(List<ConditionDefinitionQuestionnaireComponent> theQuestionnaire) { 
2851      this.questionnaire = theQuestionnaire;
2852      return this;
2853    }
2854
2855    public boolean hasQuestionnaire() { 
2856      if (this.questionnaire == null)
2857        return false;
2858      for (ConditionDefinitionQuestionnaireComponent item : this.questionnaire)
2859        if (!item.isEmpty())
2860          return true;
2861      return false;
2862    }
2863
2864    public ConditionDefinitionQuestionnaireComponent addQuestionnaire() { //3
2865      ConditionDefinitionQuestionnaireComponent t = new ConditionDefinitionQuestionnaireComponent();
2866      if (this.questionnaire == null)
2867        this.questionnaire = new ArrayList<ConditionDefinitionQuestionnaireComponent>();
2868      this.questionnaire.add(t);
2869      return t;
2870    }
2871
2872    public ConditionDefinition addQuestionnaire(ConditionDefinitionQuestionnaireComponent t) { //3
2873      if (t == null)
2874        return this;
2875      if (this.questionnaire == null)
2876        this.questionnaire = new ArrayList<ConditionDefinitionQuestionnaireComponent>();
2877      this.questionnaire.add(t);
2878      return this;
2879    }
2880
2881    /**
2882     * @return The first repetition of repeating field {@link #questionnaire}, creating it if it does not already exist {3}
2883     */
2884    public ConditionDefinitionQuestionnaireComponent getQuestionnaireFirstRep() { 
2885      if (getQuestionnaire().isEmpty()) {
2886        addQuestionnaire();
2887      }
2888      return getQuestionnaire().get(0);
2889    }
2890
2891    /**
2892     * @return {@link #plan} (Plan that is appropriate.)
2893     */
2894    public List<ConditionDefinitionPlanComponent> getPlan() { 
2895      if (this.plan == null)
2896        this.plan = new ArrayList<ConditionDefinitionPlanComponent>();
2897      return this.plan;
2898    }
2899
2900    /**
2901     * @return Returns a reference to <code>this</code> for easy method chaining
2902     */
2903    public ConditionDefinition setPlan(List<ConditionDefinitionPlanComponent> thePlan) { 
2904      this.plan = thePlan;
2905      return this;
2906    }
2907
2908    public boolean hasPlan() { 
2909      if (this.plan == null)
2910        return false;
2911      for (ConditionDefinitionPlanComponent item : this.plan)
2912        if (!item.isEmpty())
2913          return true;
2914      return false;
2915    }
2916
2917    public ConditionDefinitionPlanComponent addPlan() { //3
2918      ConditionDefinitionPlanComponent t = new ConditionDefinitionPlanComponent();
2919      if (this.plan == null)
2920        this.plan = new ArrayList<ConditionDefinitionPlanComponent>();
2921      this.plan.add(t);
2922      return t;
2923    }
2924
2925    public ConditionDefinition addPlan(ConditionDefinitionPlanComponent t) { //3
2926      if (t == null)
2927        return this;
2928      if (this.plan == null)
2929        this.plan = new ArrayList<ConditionDefinitionPlanComponent>();
2930      this.plan.add(t);
2931      return this;
2932    }
2933
2934    /**
2935     * @return The first repetition of repeating field {@link #plan}, creating it if it does not already exist {3}
2936     */
2937    public ConditionDefinitionPlanComponent getPlanFirstRep() { 
2938      if (getPlan().isEmpty()) {
2939        addPlan();
2940      }
2941      return getPlan().get(0);
2942    }
2943
2944    /**
2945     * not supported on this implementation
2946     */
2947    @Override
2948    public int getPurposeMax() { 
2949      return 0;
2950    }
2951    /**
2952     * @return {@link #purpose} (Explanation of why this condition definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2953     */
2954    public MarkdownType getPurposeElement() { 
2955      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"purpose\"");
2956    }
2957
2958    public boolean hasPurposeElement() { 
2959      return false;
2960    }
2961    public boolean hasPurpose() {
2962      return false;
2963    }
2964
2965    /**
2966     * @param value {@link #purpose} (Explanation of why this condition definition is needed and why it has been designed as it has.). This is the underlying object with id, value and extensions. The accessor "getPurpose" gives direct access to the value
2967     */
2968    public ConditionDefinition setPurposeElement(MarkdownType value) { 
2969      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"purpose\"");
2970    }
2971    public String getPurpose() { 
2972      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"purpose\"");
2973    }
2974    /**
2975     * @param value Explanation of why this condition definition is needed and why it has been designed as it has.
2976     */
2977    public ConditionDefinition setPurpose(String value) { 
2978      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"purpose\"");
2979    }
2980    /**
2981     * not supported on this implementation
2982     */
2983    @Override
2984    public int getCopyrightMax() { 
2985      return 0;
2986    }
2987    /**
2988     * @return {@link #copyright} (A copyright statement relating to the condition definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the condition definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
2989     */
2990    public MarkdownType getCopyrightElement() { 
2991      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"copyright\"");
2992    }
2993
2994    public boolean hasCopyrightElement() { 
2995      return false;
2996    }
2997    public boolean hasCopyright() {
2998      return false;
2999    }
3000
3001    /**
3002     * @param value {@link #copyright} (A copyright statement relating to the condition definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the condition definition.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
3003     */
3004    public ConditionDefinition setCopyrightElement(MarkdownType value) { 
3005      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"copyright\"");
3006    }
3007    public String getCopyright() { 
3008      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"copyright\"");
3009    }
3010    /**
3011     * @param value A copyright statement relating to the condition definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the condition definition.
3012     */
3013    public ConditionDefinition setCopyright(String value) { 
3014      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"copyright\"");
3015    }
3016    /**
3017     * not supported on this implementation
3018     */
3019    @Override
3020    public int getApprovalDateMax() { 
3021      return 0;
3022    }
3023    /**
3024     * @return {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
3025     */
3026    public DateType getApprovalDateElement() { 
3027      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"approvalDate\"");
3028    }
3029
3030    public boolean hasApprovalDateElement() { 
3031      return false;
3032    }
3033    public boolean hasApprovalDate() {
3034      return false;
3035    }
3036
3037    /**
3038     * @param value {@link #approvalDate} (The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.). This is the underlying object with id, value and extensions. The accessor "getApprovalDate" gives direct access to the value
3039     */
3040    public ConditionDefinition setApprovalDateElement(DateType value) { 
3041      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"approvalDate\"");
3042    }
3043    public Date getApprovalDate() { 
3044      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"approvalDate\"");
3045    }
3046    /**
3047     * @param value The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
3048     */
3049    public ConditionDefinition setApprovalDate(Date value) { 
3050      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"approvalDate\"");
3051    }
3052    /**
3053     * not supported on this implementation
3054     */
3055    @Override
3056    public int getLastReviewDateMax() { 
3057      return 0;
3058    }
3059    /**
3060     * @return {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
3061     */
3062    public DateType getLastReviewDateElement() { 
3063      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"lastReviewDate\"");
3064    }
3065
3066    public boolean hasLastReviewDateElement() { 
3067      return false;
3068    }
3069    public boolean hasLastReviewDate() {
3070      return false;
3071    }
3072
3073    /**
3074     * @param value {@link #lastReviewDate} (The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.). This is the underlying object with id, value and extensions. The accessor "getLastReviewDate" gives direct access to the value
3075     */
3076    public ConditionDefinition setLastReviewDateElement(DateType value) { 
3077      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"lastReviewDate\"");
3078    }
3079    public Date getLastReviewDate() { 
3080      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"lastReviewDate\"");
3081    }
3082    /**
3083     * @param value The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
3084     */
3085    public ConditionDefinition setLastReviewDate(Date value) { 
3086      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"lastReviewDate\"");
3087    }
3088    /**
3089     * not supported on this implementation
3090     */
3091    @Override
3092    public int getEffectivePeriodMax() { 
3093      return 0;
3094    }
3095    /**
3096     * @return {@link #effectivePeriod} (The period during which the condition definition content was or is planned to be in active use.)
3097     */
3098    public Period getEffectivePeriod() { 
3099      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"effectivePeriod\"");
3100    }
3101    public boolean hasEffectivePeriod() { 
3102      return false;
3103    }
3104    /**
3105     * @param value {@link #effectivePeriod} (The period during which the condition definition content was or is planned to be in active use.)
3106     */
3107    public ConditionDefinition setEffectivePeriod(Period value) { 
3108      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"effectivePeriod\"");
3109    }
3110
3111    /**
3112     * not supported on this implementation
3113     */
3114    @Override
3115    public int getTopicMax() { 
3116      return 0;
3117    }
3118    /**
3119     * @return {@link #topic} (Descriptive topics related to the content of the library. Topics provide a high-level categorization of the library that can be useful for filtering and searching.)
3120     */
3121    public List<CodeableConcept> getTopic() { 
3122      return new ArrayList<>();
3123    }
3124    /**
3125     * @return Returns a reference to <code>this</code> for easy method chaining
3126     */
3127    public ConditionDefinition setTopic(List<CodeableConcept> theTopic) { 
3128      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"topic\"");
3129    }
3130    public boolean hasTopic() { 
3131      return false;
3132    }
3133
3134    public CodeableConcept addTopic() { //3
3135      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"topic\"");
3136    }
3137    public ConditionDefinition addTopic(CodeableConcept t) { //3
3138      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"topic\"");
3139    }
3140    /**
3141     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist {2}
3142     */
3143    public CodeableConcept getTopicFirstRep() { 
3144      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"topic\"");
3145    }
3146    /**
3147     * not supported on this implementation
3148     */
3149    @Override
3150    public int getAuthorMax() { 
3151      return 0;
3152    }
3153    /**
3154     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the condition definition.)
3155     */
3156    public List<ContactDetail> getAuthor() { 
3157      return new ArrayList<>();
3158    }
3159    /**
3160     * @return Returns a reference to <code>this</code> for easy method chaining
3161     */
3162    public ConditionDefinition setAuthor(List<ContactDetail> theAuthor) { 
3163      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"author\"");
3164    }
3165    public boolean hasAuthor() { 
3166      return false;
3167    }
3168
3169    public ContactDetail addAuthor() { //3
3170      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"author\"");
3171    }
3172    public ConditionDefinition addAuthor(ContactDetail t) { //3
3173      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"author\"");
3174    }
3175    /**
3176     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {2}
3177     */
3178    public ContactDetail getAuthorFirstRep() { 
3179      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"author\"");
3180    }
3181    /**
3182     * not supported on this implementation
3183     */
3184    @Override
3185    public int getEditorMax() { 
3186      return 0;
3187    }
3188    /**
3189     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the condition definition.)
3190     */
3191    public List<ContactDetail> getEditor() { 
3192      return new ArrayList<>();
3193    }
3194    /**
3195     * @return Returns a reference to <code>this</code> for easy method chaining
3196     */
3197    public ConditionDefinition setEditor(List<ContactDetail> theEditor) { 
3198      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"editor\"");
3199    }
3200    public boolean hasEditor() { 
3201      return false;
3202    }
3203
3204    public ContactDetail addEditor() { //3
3205      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"editor\"");
3206    }
3207    public ConditionDefinition addEditor(ContactDetail t) { //3
3208      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"editor\"");
3209    }
3210    /**
3211     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {2}
3212     */
3213    public ContactDetail getEditorFirstRep() { 
3214      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"editor\"");
3215    }
3216    /**
3217     * not supported on this implementation
3218     */
3219    @Override
3220    public int getReviewerMax() { 
3221      return 0;
3222    }
3223    /**
3224     * @return {@link #reviewer} (An individual or organization primarily responsible for review of some aspect of the condition definition.)
3225     */
3226    public List<ContactDetail> getReviewer() { 
3227      return new ArrayList<>();
3228    }
3229    /**
3230     * @return Returns a reference to <code>this</code> for easy method chaining
3231     */
3232    public ConditionDefinition setReviewer(List<ContactDetail> theReviewer) { 
3233      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"reviewer\"");
3234    }
3235    public boolean hasReviewer() { 
3236      return false;
3237    }
3238
3239    public ContactDetail addReviewer() { //3
3240      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"reviewer\"");
3241    }
3242    public ConditionDefinition addReviewer(ContactDetail t) { //3
3243      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"reviewer\"");
3244    }
3245    /**
3246     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {2}
3247     */
3248    public ContactDetail getReviewerFirstRep() { 
3249      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"reviewer\"");
3250    }
3251    /**
3252     * not supported on this implementation
3253     */
3254    @Override
3255    public int getEndorserMax() { 
3256      return 0;
3257    }
3258    /**
3259     * @return {@link #endorser} (An individual or organization responsible for officially endorsing the condition definition for use in some setting.)
3260     */
3261    public List<ContactDetail> getEndorser() { 
3262      return new ArrayList<>();
3263    }
3264    /**
3265     * @return Returns a reference to <code>this</code> for easy method chaining
3266     */
3267    public ConditionDefinition setEndorser(List<ContactDetail> theEndorser) { 
3268      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"endorser\"");
3269    }
3270    public boolean hasEndorser() { 
3271      return false;
3272    }
3273
3274    public ContactDetail addEndorser() { //3
3275      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"endorser\"");
3276    }
3277    public ConditionDefinition addEndorser(ContactDetail t) { //3
3278      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"endorser\"");
3279    }
3280    /**
3281     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {2}
3282     */
3283    public ContactDetail getEndorserFirstRep() { 
3284      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"endorser\"");
3285    }
3286    /**
3287     * not supported on this implementation
3288     */
3289    @Override
3290    public int getRelatedArtifactMax() { 
3291      return 0;
3292    }
3293    /**
3294     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.)
3295     */
3296    public List<RelatedArtifact> getRelatedArtifact() { 
3297      return new ArrayList<>();
3298    }
3299    /**
3300     * @return Returns a reference to <code>this</code> for easy method chaining
3301     */
3302    public ConditionDefinition setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
3303      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"relatedArtifact\"");
3304    }
3305    public boolean hasRelatedArtifact() { 
3306      return false;
3307    }
3308
3309    public RelatedArtifact addRelatedArtifact() { //3
3310      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"relatedArtifact\"");
3311    }
3312    public ConditionDefinition addRelatedArtifact(RelatedArtifact t) { //3
3313      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"relatedArtifact\"");
3314    }
3315    /**
3316     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {2}
3317     */
3318    public RelatedArtifact getRelatedArtifactFirstRep() { 
3319      throw new Error("The resource type \"ConditionDefinition\" does not implement the property \"relatedArtifact\"");
3320    }
3321      protected void listChildren(List<Property> children) {
3322        super.listChildren(children);
3323        children.add(new Property("url", "uri", "An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.", 0, 1, url));
3324        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this condition definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
3325        children.add(new Property("version", "string", "The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version));
3326        children.add(new Property("name", "string", "A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
3327        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the condition definition.", 0, 1, title));
3328        children.add(new Property("subtitle", "string", "An explanatory or alternate title for the event definition giving additional information about its content.", 0, 1, subtitle));
3329        children.add(new Property("status", "code", "The status of this condition definition. Enables tracking the life-cycle of the content.", 0, 1, status));
3330        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
3331        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.", 0, 1, date));
3332        children.add(new Property("publisher", "string", "The name of the organization or individual that published the condition definition.", 0, 1, publisher));
3333        children.add(new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
3334        children.add(new Property("description", "markdown", "A free text natural language description of the condition definition from a consumer's perspective.", 0, 1, description));
3335        children.add(new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate condition definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
3336        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the condition definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
3337        children.add(new Property("code", "CodeableConcept", "Identification of the condition, problem or diagnosis.", 0, 1, code));
3338        children.add(new Property("severity", "CodeableConcept", "A subjective assessment of the severity of the condition as evaluated by the clinician.", 0, 1, severity));
3339        children.add(new Property("bodySite", "CodeableConcept", "The anatomical location where this condition manifests itself.", 0, 1, bodySite));
3340        children.add(new Property("stage", "CodeableConcept", "Clinical stage or grade of a condition. May include formal severity assessments.", 0, 1, stage));
3341        children.add(new Property("hasSeverity", "boolean", "Whether Severity is appropriate to collect for this condition.", 0, 1, hasSeverity));
3342        children.add(new Property("hasBodySite", "boolean", "Whether bodySite is appropriate to collect for this condition.", 0, 1, hasBodySite));
3343        children.add(new Property("hasStage", "boolean", "Whether stage is appropriate to collect for this condition.", 0, 1, hasStage));
3344        children.add(new Property("definition", "uri", "Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.", 0, java.lang.Integer.MAX_VALUE, definition));
3345        children.add(new Property("observation", "", "Observations particularly relevant to this condition.", 0, java.lang.Integer.MAX_VALUE, observation));
3346        children.add(new Property("medication", "", "Medications particularly relevant for this condition.", 0, java.lang.Integer.MAX_VALUE, medication));
3347        children.add(new Property("precondition", "", "An observation that suggests that this condition applies.", 0, java.lang.Integer.MAX_VALUE, precondition));
3348        children.add(new Property("team", "Reference(CareTeam)", "Appropriate team for this condition.", 0, java.lang.Integer.MAX_VALUE, team));
3349        children.add(new Property("questionnaire", "", "Questionnaire for this condition.", 0, java.lang.Integer.MAX_VALUE, questionnaire));
3350        children.add(new Property("plan", "", "Plan that is appropriate.", 0, java.lang.Integer.MAX_VALUE, plan));
3351      }
3352
3353      @Override
3354      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3355        switch (_hash) {
3356        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this condition definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this condition definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the condition definition is stored on different servers.", 0, 1, url);
3357        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this condition definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
3358        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the condition definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the condition definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version);
3359        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the condition definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
3360        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the condition definition.", 0, 1, title);
3361        case -2060497896: /*subtitle*/  return new Property("subtitle", "string", "An explanatory or alternate title for the event definition giving additional information about its content.", 0, 1, subtitle);
3362        case -892481550: /*status*/  return new Property("status", "code", "The status of this condition definition. Enables tracking the life-cycle of the content.", 0, 1, status);
3363        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this condition definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
3364        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the condition definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the condition definition changes.", 0, 1, date);
3365        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the condition definition.", 0, 1, publisher);
3366        case 951526432: /*contact*/  return new Property("contact", "ContactDetail", "Contact details to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact);
3367        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the condition definition from a consumer's perspective.", 0, 1, description);
3368        case -669707736: /*useContext*/  return new Property("useContext", "UsageContext", "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate condition definition instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
3369        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the condition definition is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
3370        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Identification of the condition, problem or diagnosis.", 0, 1, code);
3371        case 1478300413: /*severity*/  return new Property("severity", "CodeableConcept", "A subjective assessment of the severity of the condition as evaluated by the clinician.", 0, 1, severity);
3372        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "The anatomical location where this condition manifests itself.", 0, 1, bodySite);
3373        case 109757182: /*stage*/  return new Property("stage", "CodeableConcept", "Clinical stage or grade of a condition. May include formal severity assessments.", 0, 1, stage);
3374        case 57790391: /*hasSeverity*/  return new Property("hasSeverity", "boolean", "Whether Severity is appropriate to collect for this condition.", 0, 1, hasSeverity);
3375        case 282110147: /*hasBodySite*/  return new Property("hasBodySite", "boolean", "Whether bodySite is appropriate to collect for this condition.", 0, 1, hasBodySite);
3376        case 129749124: /*hasStage*/  return new Property("hasStage", "boolean", "Whether stage is appropriate to collect for this condition.", 0, 1, hasStage);
3377        case -1014418093: /*definition*/  return new Property("definition", "uri", "Formal definitions of the condition. These may be references to ontologies, published clinical protocols or research papers.", 0, java.lang.Integer.MAX_VALUE, definition);
3378        case 122345516: /*observation*/  return new Property("observation", "", "Observations particularly relevant to this condition.", 0, java.lang.Integer.MAX_VALUE, observation);
3379        case 1998965455: /*medication*/  return new Property("medication", "", "Medications particularly relevant for this condition.", 0, java.lang.Integer.MAX_VALUE, medication);
3380        case -650968616: /*precondition*/  return new Property("precondition", "", "An observation that suggests that this condition applies.", 0, java.lang.Integer.MAX_VALUE, precondition);
3381        case 3555933: /*team*/  return new Property("team", "Reference(CareTeam)", "Appropriate team for this condition.", 0, java.lang.Integer.MAX_VALUE, team);
3382        case -1017049693: /*questionnaire*/  return new Property("questionnaire", "", "Questionnaire for this condition.", 0, java.lang.Integer.MAX_VALUE, questionnaire);
3383        case 3443497: /*plan*/  return new Property("plan", "", "Plan that is appropriate.", 0, java.lang.Integer.MAX_VALUE, plan);
3384        default: return super.getNamedProperty(_hash, _name, _checkValid);
3385        }
3386
3387      }
3388
3389      @Override
3390      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3391        switch (hash) {
3392        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3393        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3394        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3395        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3396        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
3397        case -2060497896: /*subtitle*/ return this.subtitle == null ? new Base[0] : new Base[] {this.subtitle}; // StringType
3398        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3399        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
3400        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
3401        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3402        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3403        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
3404        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3405        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
3406        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3407        case 1478300413: /*severity*/ return this.severity == null ? new Base[0] : new Base[] {this.severity}; // CodeableConcept
3408        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : new Base[] {this.bodySite}; // CodeableConcept
3409        case 109757182: /*stage*/ return this.stage == null ? new Base[0] : new Base[] {this.stage}; // CodeableConcept
3410        case 57790391: /*hasSeverity*/ return this.hasSeverity == null ? new Base[0] : new Base[] {this.hasSeverity}; // BooleanType
3411        case 282110147: /*hasBodySite*/ return this.hasBodySite == null ? new Base[0] : new Base[] {this.hasBodySite}; // BooleanType
3412        case 129749124: /*hasStage*/ return this.hasStage == null ? new Base[0] : new Base[] {this.hasStage}; // BooleanType
3413        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : this.definition.toArray(new Base[this.definition.size()]); // UriType
3414        case 122345516: /*observation*/ return this.observation == null ? new Base[0] : this.observation.toArray(new Base[this.observation.size()]); // ConditionDefinitionObservationComponent
3415        case 1998965455: /*medication*/ return this.medication == null ? new Base[0] : this.medication.toArray(new Base[this.medication.size()]); // ConditionDefinitionMedicationComponent
3416        case -650968616: /*precondition*/ return this.precondition == null ? new Base[0] : this.precondition.toArray(new Base[this.precondition.size()]); // ConditionDefinitionPreconditionComponent
3417        case 3555933: /*team*/ return this.team == null ? new Base[0] : this.team.toArray(new Base[this.team.size()]); // Reference
3418        case -1017049693: /*questionnaire*/ return this.questionnaire == null ? new Base[0] : this.questionnaire.toArray(new Base[this.questionnaire.size()]); // ConditionDefinitionQuestionnaireComponent
3419        case 3443497: /*plan*/ return this.plan == null ? new Base[0] : this.plan.toArray(new Base[this.plan.size()]); // ConditionDefinitionPlanComponent
3420        default: return super.getProperty(hash, name, checkValid);
3421        }
3422
3423      }
3424
3425      @Override
3426      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3427        switch (hash) {
3428        case 116079: // url
3429          this.url = TypeConvertor.castToUri(value); // UriType
3430          return value;
3431        case -1618432855: // identifier
3432          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3433          return value;
3434        case 351608024: // version
3435          this.version = TypeConvertor.castToString(value); // StringType
3436          return value;
3437        case 3373707: // name
3438          this.name = TypeConvertor.castToString(value); // StringType
3439          return value;
3440        case 110371416: // title
3441          this.title = TypeConvertor.castToString(value); // StringType
3442          return value;
3443        case -2060497896: // subtitle
3444          this.subtitle = TypeConvertor.castToString(value); // StringType
3445          return value;
3446        case -892481550: // status
3447          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3448          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3449          return value;
3450        case -404562712: // experimental
3451          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
3452          return value;
3453        case 3076014: // date
3454          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3455          return value;
3456        case 1447404028: // publisher
3457          this.publisher = TypeConvertor.castToString(value); // StringType
3458          return value;
3459        case 951526432: // contact
3460          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3461          return value;
3462        case -1724546052: // description
3463          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3464          return value;
3465        case -669707736: // useContext
3466          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
3467          return value;
3468        case -507075711: // jurisdiction
3469          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3470          return value;
3471        case 3059181: // code
3472          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3473          return value;
3474        case 1478300413: // severity
3475          this.severity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3476          return value;
3477        case 1702620169: // bodySite
3478          this.bodySite = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3479          return value;
3480        case 109757182: // stage
3481          this.stage = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3482          return value;
3483        case 57790391: // hasSeverity
3484          this.hasSeverity = TypeConvertor.castToBoolean(value); // BooleanType
3485          return value;
3486        case 282110147: // hasBodySite
3487          this.hasBodySite = TypeConvertor.castToBoolean(value); // BooleanType
3488          return value;
3489        case 129749124: // hasStage
3490          this.hasStage = TypeConvertor.castToBoolean(value); // BooleanType
3491          return value;
3492        case -1014418093: // definition
3493          this.getDefinition().add(TypeConvertor.castToUri(value)); // UriType
3494          return value;
3495        case 122345516: // observation
3496          this.getObservation().add((ConditionDefinitionObservationComponent) value); // ConditionDefinitionObservationComponent
3497          return value;
3498        case 1998965455: // medication
3499          this.getMedication().add((ConditionDefinitionMedicationComponent) value); // ConditionDefinitionMedicationComponent
3500          return value;
3501        case -650968616: // precondition
3502          this.getPrecondition().add((ConditionDefinitionPreconditionComponent) value); // ConditionDefinitionPreconditionComponent
3503          return value;
3504        case 3555933: // team
3505          this.getTeam().add(TypeConvertor.castToReference(value)); // Reference
3506          return value;
3507        case -1017049693: // questionnaire
3508          this.getQuestionnaire().add((ConditionDefinitionQuestionnaireComponent) value); // ConditionDefinitionQuestionnaireComponent
3509          return value;
3510        case 3443497: // plan
3511          this.getPlan().add((ConditionDefinitionPlanComponent) value); // ConditionDefinitionPlanComponent
3512          return value;
3513        default: return super.setProperty(hash, name, value);
3514        }
3515
3516      }
3517
3518      @Override
3519      public Base setProperty(String name, Base value) throws FHIRException {
3520        if (name.equals("url")) {
3521          this.url = TypeConvertor.castToUri(value); // UriType
3522        } else if (name.equals("identifier")) {
3523          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3524        } else if (name.equals("version")) {
3525          this.version = TypeConvertor.castToString(value); // StringType
3526        } else if (name.equals("name")) {
3527          this.name = TypeConvertor.castToString(value); // StringType
3528        } else if (name.equals("title")) {
3529          this.title = TypeConvertor.castToString(value); // StringType
3530        } else if (name.equals("subtitle")) {
3531          this.subtitle = TypeConvertor.castToString(value); // StringType
3532        } else if (name.equals("status")) {
3533          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3534          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3535        } else if (name.equals("experimental")) {
3536          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
3537        } else if (name.equals("date")) {
3538          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
3539        } else if (name.equals("publisher")) {
3540          this.publisher = TypeConvertor.castToString(value); // StringType
3541        } else if (name.equals("contact")) {
3542          this.getContact().add(TypeConvertor.castToContactDetail(value));
3543        } else if (name.equals("description")) {
3544          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
3545        } else if (name.equals("useContext")) {
3546          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
3547        } else if (name.equals("jurisdiction")) {
3548          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
3549        } else if (name.equals("code")) {
3550          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3551        } else if (name.equals("severity")) {
3552          this.severity = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3553        } else if (name.equals("bodySite")) {
3554          this.bodySite = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3555        } else if (name.equals("stage")) {
3556          this.stage = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3557        } else if (name.equals("hasSeverity")) {
3558          this.hasSeverity = TypeConvertor.castToBoolean(value); // BooleanType
3559        } else if (name.equals("hasBodySite")) {
3560          this.hasBodySite = TypeConvertor.castToBoolean(value); // BooleanType
3561        } else if (name.equals("hasStage")) {
3562          this.hasStage = TypeConvertor.castToBoolean(value); // BooleanType
3563        } else if (name.equals("definition")) {
3564          this.getDefinition().add(TypeConvertor.castToUri(value));
3565        } else if (name.equals("observation")) {
3566          this.getObservation().add((ConditionDefinitionObservationComponent) value);
3567        } else if (name.equals("medication")) {
3568          this.getMedication().add((ConditionDefinitionMedicationComponent) value);
3569        } else if (name.equals("precondition")) {
3570          this.getPrecondition().add((ConditionDefinitionPreconditionComponent) value);
3571        } else if (name.equals("team")) {
3572          this.getTeam().add(TypeConvertor.castToReference(value));
3573        } else if (name.equals("questionnaire")) {
3574          this.getQuestionnaire().add((ConditionDefinitionQuestionnaireComponent) value);
3575        } else if (name.equals("plan")) {
3576          this.getPlan().add((ConditionDefinitionPlanComponent) value);
3577        } else
3578          return super.setProperty(name, value);
3579        return value;
3580      }
3581
3582      @Override
3583      public Base makeProperty(int hash, String name) throws FHIRException {
3584        switch (hash) {
3585        case 116079:  return getUrlElement();
3586        case -1618432855:  return addIdentifier(); 
3587        case 351608024:  return getVersionElement();
3588        case 3373707:  return getNameElement();
3589        case 110371416:  return getTitleElement();
3590        case -2060497896:  return getSubtitleElement();
3591        case -892481550:  return getStatusElement();
3592        case -404562712:  return getExperimentalElement();
3593        case 3076014:  return getDateElement();
3594        case 1447404028:  return getPublisherElement();
3595        case 951526432:  return addContact(); 
3596        case -1724546052:  return getDescriptionElement();
3597        case -669707736:  return addUseContext(); 
3598        case -507075711:  return addJurisdiction(); 
3599        case 3059181:  return getCode();
3600        case 1478300413:  return getSeverity();
3601        case 1702620169:  return getBodySite();
3602        case 109757182:  return getStage();
3603        case 57790391:  return getHasSeverityElement();
3604        case 282110147:  return getHasBodySiteElement();
3605        case 129749124:  return getHasStageElement();
3606        case -1014418093:  return addDefinitionElement();
3607        case 122345516:  return addObservation(); 
3608        case 1998965455:  return addMedication(); 
3609        case -650968616:  return addPrecondition(); 
3610        case 3555933:  return addTeam(); 
3611        case -1017049693:  return addQuestionnaire(); 
3612        case 3443497:  return addPlan(); 
3613        default: return super.makeProperty(hash, name);
3614        }
3615
3616      }
3617
3618      @Override
3619      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3620        switch (hash) {
3621        case 116079: /*url*/ return new String[] {"uri"};
3622        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3623        case 351608024: /*version*/ return new String[] {"string"};
3624        case 3373707: /*name*/ return new String[] {"string"};
3625        case 110371416: /*title*/ return new String[] {"string"};
3626        case -2060497896: /*subtitle*/ return new String[] {"string"};
3627        case -892481550: /*status*/ return new String[] {"code"};
3628        case -404562712: /*experimental*/ return new String[] {"boolean"};
3629        case 3076014: /*date*/ return new String[] {"dateTime"};
3630        case 1447404028: /*publisher*/ return new String[] {"string"};
3631        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3632        case -1724546052: /*description*/ return new String[] {"markdown"};
3633        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3634        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
3635        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
3636        case 1478300413: /*severity*/ return new String[] {"CodeableConcept"};
3637        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
3638        case 109757182: /*stage*/ return new String[] {"CodeableConcept"};
3639        case 57790391: /*hasSeverity*/ return new String[] {"boolean"};
3640        case 282110147: /*hasBodySite*/ return new String[] {"boolean"};
3641        case 129749124: /*hasStage*/ return new String[] {"boolean"};
3642        case -1014418093: /*definition*/ return new String[] {"uri"};
3643        case 122345516: /*observation*/ return new String[] {};
3644        case 1998965455: /*medication*/ return new String[] {};
3645        case -650968616: /*precondition*/ return new String[] {};
3646        case 3555933: /*team*/ return new String[] {"Reference"};
3647        case -1017049693: /*questionnaire*/ return new String[] {};
3648        case 3443497: /*plan*/ return new String[] {};
3649        default: return super.getTypesForProperty(hash, name);
3650        }
3651
3652      }
3653
3654      @Override
3655      public Base addChild(String name) throws FHIRException {
3656        if (name.equals("url")) {
3657          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.url");
3658        }
3659        else if (name.equals("identifier")) {
3660          return addIdentifier();
3661        }
3662        else if (name.equals("version")) {
3663          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.version");
3664        }
3665        else if (name.equals("name")) {
3666          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.name");
3667        }
3668        else if (name.equals("title")) {
3669          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.title");
3670        }
3671        else if (name.equals("subtitle")) {
3672          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.subtitle");
3673        }
3674        else if (name.equals("status")) {
3675          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.status");
3676        }
3677        else if (name.equals("experimental")) {
3678          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.experimental");
3679        }
3680        else if (name.equals("date")) {
3681          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.date");
3682        }
3683        else if (name.equals("publisher")) {
3684          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.publisher");
3685        }
3686        else if (name.equals("contact")) {
3687          return addContact();
3688        }
3689        else if (name.equals("description")) {
3690          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.description");
3691        }
3692        else if (name.equals("useContext")) {
3693          return addUseContext();
3694        }
3695        else if (name.equals("jurisdiction")) {
3696          return addJurisdiction();
3697        }
3698        else if (name.equals("code")) {
3699          this.code = new CodeableConcept();
3700          return this.code;
3701        }
3702        else if (name.equals("severity")) {
3703          this.severity = new CodeableConcept();
3704          return this.severity;
3705        }
3706        else if (name.equals("bodySite")) {
3707          this.bodySite = new CodeableConcept();
3708          return this.bodySite;
3709        }
3710        else if (name.equals("stage")) {
3711          this.stage = new CodeableConcept();
3712          return this.stage;
3713        }
3714        else if (name.equals("hasSeverity")) {
3715          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.hasSeverity");
3716        }
3717        else if (name.equals("hasBodySite")) {
3718          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.hasBodySite");
3719        }
3720        else if (name.equals("hasStage")) {
3721          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.hasStage");
3722        }
3723        else if (name.equals("definition")) {
3724          throw new FHIRException("Cannot call addChild on a primitive type ConditionDefinition.definition");
3725        }
3726        else if (name.equals("observation")) {
3727          return addObservation();
3728        }
3729        else if (name.equals("medication")) {
3730          return addMedication();
3731        }
3732        else if (name.equals("precondition")) {
3733          return addPrecondition();
3734        }
3735        else if (name.equals("team")) {
3736          return addTeam();
3737        }
3738        else if (name.equals("questionnaire")) {
3739          return addQuestionnaire();
3740        }
3741        else if (name.equals("plan")) {
3742          return addPlan();
3743        }
3744        else
3745          return super.addChild(name);
3746      }
3747
3748  public String fhirType() {
3749    return "ConditionDefinition";
3750
3751  }
3752
3753      public ConditionDefinition copy() {
3754        ConditionDefinition dst = new ConditionDefinition();
3755        copyValues(dst);
3756        return dst;
3757      }
3758
3759      public void copyValues(ConditionDefinition dst) {
3760        super.copyValues(dst);
3761        dst.url = url == null ? null : url.copy();
3762        if (identifier != null) {
3763          dst.identifier = new ArrayList<Identifier>();
3764          for (Identifier i : identifier)
3765            dst.identifier.add(i.copy());
3766        };
3767        dst.version = version == null ? null : version.copy();
3768        dst.name = name == null ? null : name.copy();
3769        dst.title = title == null ? null : title.copy();
3770        dst.subtitle = subtitle == null ? null : subtitle.copy();
3771        dst.status = status == null ? null : status.copy();
3772        dst.experimental = experimental == null ? null : experimental.copy();
3773        dst.date = date == null ? null : date.copy();
3774        dst.publisher = publisher == null ? null : publisher.copy();
3775        if (contact != null) {
3776          dst.contact = new ArrayList<ContactDetail>();
3777          for (ContactDetail i : contact)
3778            dst.contact.add(i.copy());
3779        };
3780        dst.description = description == null ? null : description.copy();
3781        if (useContext != null) {
3782          dst.useContext = new ArrayList<UsageContext>();
3783          for (UsageContext i : useContext)
3784            dst.useContext.add(i.copy());
3785        };
3786        if (jurisdiction != null) {
3787          dst.jurisdiction = new ArrayList<CodeableConcept>();
3788          for (CodeableConcept i : jurisdiction)
3789            dst.jurisdiction.add(i.copy());
3790        };
3791        dst.code = code == null ? null : code.copy();
3792        dst.severity = severity == null ? null : severity.copy();
3793        dst.bodySite = bodySite == null ? null : bodySite.copy();
3794        dst.stage = stage == null ? null : stage.copy();
3795        dst.hasSeverity = hasSeverity == null ? null : hasSeverity.copy();
3796        dst.hasBodySite = hasBodySite == null ? null : hasBodySite.copy();
3797        dst.hasStage = hasStage == null ? null : hasStage.copy();
3798        if (definition != null) {
3799          dst.definition = new ArrayList<UriType>();
3800          for (UriType i : definition)
3801            dst.definition.add(i.copy());
3802        };
3803        if (observation != null) {
3804          dst.observation = new ArrayList<ConditionDefinitionObservationComponent>();
3805          for (ConditionDefinitionObservationComponent i : observation)
3806            dst.observation.add(i.copy());
3807        };
3808        if (medication != null) {
3809          dst.medication = new ArrayList<ConditionDefinitionMedicationComponent>();
3810          for (ConditionDefinitionMedicationComponent i : medication)
3811            dst.medication.add(i.copy());
3812        };
3813        if (precondition != null) {
3814          dst.precondition = new ArrayList<ConditionDefinitionPreconditionComponent>();
3815          for (ConditionDefinitionPreconditionComponent i : precondition)
3816            dst.precondition.add(i.copy());
3817        };
3818        if (team != null) {
3819          dst.team = new ArrayList<Reference>();
3820          for (Reference i : team)
3821            dst.team.add(i.copy());
3822        };
3823        if (questionnaire != null) {
3824          dst.questionnaire = new ArrayList<ConditionDefinitionQuestionnaireComponent>();
3825          for (ConditionDefinitionQuestionnaireComponent i : questionnaire)
3826            dst.questionnaire.add(i.copy());
3827        };
3828        if (plan != null) {
3829          dst.plan = new ArrayList<ConditionDefinitionPlanComponent>();
3830          for (ConditionDefinitionPlanComponent i : plan)
3831            dst.plan.add(i.copy());
3832        };
3833      }
3834
3835      protected ConditionDefinition typedCopy() {
3836        return copy();
3837      }
3838
3839      @Override
3840      public boolean equalsDeep(Base other_) {
3841        if (!super.equalsDeep(other_))
3842          return false;
3843        if (!(other_ instanceof ConditionDefinition))
3844          return false;
3845        ConditionDefinition o = (ConditionDefinition) other_;
3846        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
3847           && compareDeep(name, o.name, true) && compareDeep(title, o.title, true) && compareDeep(subtitle, o.subtitle, true)
3848           && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true)
3849           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true)
3850           && compareDeep(useContext, o.useContext, true) && compareDeep(jurisdiction, o.jurisdiction, true)
3851           && compareDeep(code, o.code, true) && compareDeep(severity, o.severity, true) && compareDeep(bodySite, o.bodySite, true)
3852           && compareDeep(stage, o.stage, true) && compareDeep(hasSeverity, o.hasSeverity, true) && compareDeep(hasBodySite, o.hasBodySite, true)
3853           && compareDeep(hasStage, o.hasStage, true) && compareDeep(definition, o.definition, true) && compareDeep(observation, o.observation, true)
3854           && compareDeep(medication, o.medication, true) && compareDeep(precondition, o.precondition, true)
3855           && compareDeep(team, o.team, true) && compareDeep(questionnaire, o.questionnaire, true) && compareDeep(plan, o.plan, true)
3856          ;
3857      }
3858
3859      @Override
3860      public boolean equalsShallow(Base other_) {
3861        if (!super.equalsShallow(other_))
3862          return false;
3863        if (!(other_ instanceof ConditionDefinition))
3864          return false;
3865        ConditionDefinition o = (ConditionDefinition) other_;
3866        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
3867           && compareValues(title, o.title, true) && compareValues(subtitle, o.subtitle, true) && compareValues(status, o.status, true)
3868           && compareValues(experimental, o.experimental, true) && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true)
3869           && compareValues(description, o.description, true) && compareValues(hasSeverity, o.hasSeverity, true)
3870           && compareValues(hasBodySite, o.hasBodySite, true) && compareValues(hasStage, o.hasStage, true) && compareValues(definition, o.definition, true)
3871          ;
3872      }
3873
3874      public boolean isEmpty() {
3875        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
3876          , name, title, subtitle, status, experimental, date, publisher, contact, description
3877          , useContext, jurisdiction, code, severity, bodySite, stage, hasSeverity, hasBodySite
3878          , hasStage, definition, observation, medication, precondition, team, questionnaire
3879          , plan);
3880      }
3881
3882  @Override
3883  public ResourceType getResourceType() {
3884    return ResourceType.ConditionDefinition;
3885   }
3886
3887 /**
3888   * Search parameter: <b>context-quantity</b>
3889   * <p>
3890   * Description: <b>A quantity- or range-valued use context assigned to the condition definition</b><br>
3891   * Type: <b>quantity</b><br>
3892   * Path: <b>(ConditionDefinition.useContext.value as Quantity) | (ConditionDefinition.useContext.value as Range)</b><br>
3893   * </p>
3894   */
3895  @SearchParamDefinition(name="context-quantity", path="(ConditionDefinition.useContext.value as Quantity) | (ConditionDefinition.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the condition definition", type="quantity" )
3896  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3897 /**
3898   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3899   * <p>
3900   * Description: <b>A quantity- or range-valued use context assigned to the condition definition</b><br>
3901   * Type: <b>quantity</b><br>
3902   * Path: <b>(ConditionDefinition.useContext.value as Quantity) | (ConditionDefinition.useContext.value as Range)</b><br>
3903   * </p>
3904   */
3905  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
3906
3907 /**
3908   * Search parameter: <b>context-type-quantity</b>
3909   * <p>
3910   * Description: <b>A use context type and quantity- or range-based value assigned to the condition definition</b><br>
3911   * Type: <b>composite</b><br>
3912   * Path: <b>ConditionDefinition.useContext</b><br>
3913   * </p>
3914   */
3915  @SearchParamDefinition(name="context-type-quantity", path="ConditionDefinition.useContext", description="A use context type and quantity- or range-based value assigned to the condition definition", type="composite", compositeOf={"context-type", "context-quantity"} )
3916  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3917 /**
3918   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
3919   * <p>
3920   * Description: <b>A use context type and quantity- or range-based value assigned to the condition definition</b><br>
3921   * Type: <b>composite</b><br>
3922   * Path: <b>ConditionDefinition.useContext</b><br>
3923   * </p>
3924   */
3925  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(SP_CONTEXT_TYPE_QUANTITY);
3926
3927 /**
3928   * Search parameter: <b>context-type-value</b>
3929   * <p>
3930   * Description: <b>A use context type and value assigned to the condition definition</b><br>
3931   * Type: <b>composite</b><br>
3932   * Path: <b>ConditionDefinition.useContext</b><br>
3933   * </p>
3934   */
3935  @SearchParamDefinition(name="context-type-value", path="ConditionDefinition.useContext", description="A use context type and value assigned to the condition definition", type="composite", compositeOf={"context-type", "context"} )
3936  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3937 /**
3938   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3939   * <p>
3940   * Description: <b>A use context type and value assigned to the condition definition</b><br>
3941   * Type: <b>composite</b><br>
3942   * Path: <b>ConditionDefinition.useContext</b><br>
3943   * </p>
3944   */
3945  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(SP_CONTEXT_TYPE_VALUE);
3946
3947 /**
3948   * Search parameter: <b>context-type</b>
3949   * <p>
3950   * Description: <b>A type of use context assigned to the condition definition</b><br>
3951   * Type: <b>token</b><br>
3952   * Path: <b>ConditionDefinition.useContext.code</b><br>
3953   * </p>
3954   */
3955  @SearchParamDefinition(name="context-type", path="ConditionDefinition.useContext.code", description="A type of use context assigned to the condition definition", type="token" )
3956  public static final String SP_CONTEXT_TYPE = "context-type";
3957 /**
3958   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3959   * <p>
3960   * Description: <b>A type of use context assigned to the condition definition</b><br>
3961   * Type: <b>token</b><br>
3962   * Path: <b>ConditionDefinition.useContext.code</b><br>
3963   * </p>
3964   */
3965  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
3966
3967 /**
3968   * Search parameter: <b>context</b>
3969   * <p>
3970   * Description: <b>A use context assigned to the condition definition</b><br>
3971   * Type: <b>token</b><br>
3972   * Path: <b>(ConditionDefinition.useContext.value as CodeableConcept)</b><br>
3973   * </p>
3974   */
3975  @SearchParamDefinition(name="context", path="(ConditionDefinition.useContext.value as CodeableConcept)", description="A use context assigned to the condition definition", type="token" )
3976  public static final String SP_CONTEXT = "context";
3977 /**
3978   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3979   * <p>
3980   * Description: <b>A use context assigned to the condition definition</b><br>
3981   * Type: <b>token</b><br>
3982   * Path: <b>(ConditionDefinition.useContext.value as CodeableConcept)</b><br>
3983   * </p>
3984   */
3985  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
3986
3987 /**
3988   * Search parameter: <b>date</b>
3989   * <p>
3990   * Description: <b>The condition definition publication date</b><br>
3991   * Type: <b>date</b><br>
3992   * Path: <b>ConditionDefinition.date</b><br>
3993   * </p>
3994   */
3995  @SearchParamDefinition(name="date", path="ConditionDefinition.date", description="The condition definition publication date", type="date" )
3996  public static final String SP_DATE = "date";
3997 /**
3998   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3999   * <p>
4000   * Description: <b>The condition definition publication date</b><br>
4001   * Type: <b>date</b><br>
4002   * Path: <b>ConditionDefinition.date</b><br>
4003   * </p>
4004   */
4005  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
4006
4007 /**
4008   * Search parameter: <b>description</b>
4009   * <p>
4010   * Description: <b>The description of the condition definition</b><br>
4011   * Type: <b>string</b><br>
4012   * Path: <b>ConditionDefinition.description</b><br>
4013   * </p>
4014   */
4015  @SearchParamDefinition(name="description", path="ConditionDefinition.description", description="The description of the condition definition", type="string" )
4016  public static final String SP_DESCRIPTION = "description";
4017 /**
4018   * <b>Fluent Client</b> search parameter constant for <b>description</b>
4019   * <p>
4020   * Description: <b>The description of the condition definition</b><br>
4021   * Type: <b>string</b><br>
4022   * Path: <b>ConditionDefinition.description</b><br>
4023   * </p>
4024   */
4025  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
4026
4027 /**
4028   * Search parameter: <b>identifier</b>
4029   * <p>
4030   * Description: <b>External identifier for the condition definition</b><br>
4031   * Type: <b>token</b><br>
4032   * Path: <b>ConditionDefinition.identifier</b><br>
4033   * </p>
4034   */
4035  @SearchParamDefinition(name="identifier", path="ConditionDefinition.identifier", description="External identifier for the condition definition", type="token" )
4036  public static final String SP_IDENTIFIER = "identifier";
4037 /**
4038   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4039   * <p>
4040   * Description: <b>External identifier for the condition definition</b><br>
4041   * Type: <b>token</b><br>
4042   * Path: <b>ConditionDefinition.identifier</b><br>
4043   * </p>
4044   */
4045  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4046
4047 /**
4048   * Search parameter: <b>jurisdiction</b>
4049   * <p>
4050   * Description: <b>Intended jurisdiction for the condition definition</b><br>
4051   * Type: <b>token</b><br>
4052   * Path: <b>ConditionDefinition.jurisdiction</b><br>
4053   * </p>
4054   */
4055  @SearchParamDefinition(name="jurisdiction", path="ConditionDefinition.jurisdiction", description="Intended jurisdiction for the condition definition", type="token" )
4056  public static final String SP_JURISDICTION = "jurisdiction";
4057 /**
4058   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
4059   * <p>
4060   * Description: <b>Intended jurisdiction for the condition definition</b><br>
4061   * Type: <b>token</b><br>
4062   * Path: <b>ConditionDefinition.jurisdiction</b><br>
4063   * </p>
4064   */
4065  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
4066
4067 /**
4068   * Search parameter: <b>name</b>
4069   * <p>
4070   * Description: <b>Computationally friendly name of the condition definition</b><br>
4071   * Type: <b>string</b><br>
4072   * Path: <b>ConditionDefinition.name</b><br>
4073   * </p>
4074   */
4075  @SearchParamDefinition(name="name", path="ConditionDefinition.name", description="Computationally friendly name of the condition definition", type="string" )
4076  public static final String SP_NAME = "name";
4077 /**
4078   * <b>Fluent Client</b> search parameter constant for <b>name</b>
4079   * <p>
4080   * Description: <b>Computationally friendly name of the condition definition</b><br>
4081   * Type: <b>string</b><br>
4082   * Path: <b>ConditionDefinition.name</b><br>
4083   * </p>
4084   */
4085  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
4086
4087 /**
4088   * Search parameter: <b>publisher</b>
4089   * <p>
4090   * Description: <b>Name of the publisher of the condition definition</b><br>
4091   * Type: <b>string</b><br>
4092   * Path: <b>ConditionDefinition.publisher</b><br>
4093   * </p>
4094   */
4095  @SearchParamDefinition(name="publisher", path="ConditionDefinition.publisher", description="Name of the publisher of the condition definition", type="string" )
4096  public static final String SP_PUBLISHER = "publisher";
4097 /**
4098   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
4099   * <p>
4100   * Description: <b>Name of the publisher of the condition definition</b><br>
4101   * Type: <b>string</b><br>
4102   * Path: <b>ConditionDefinition.publisher</b><br>
4103   * </p>
4104   */
4105  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
4106
4107 /**
4108   * Search parameter: <b>status</b>
4109   * <p>
4110   * Description: <b>The current status of the condition definition</b><br>
4111   * Type: <b>token</b><br>
4112   * Path: <b>ConditionDefinition.status</b><br>
4113   * </p>
4114   */
4115  @SearchParamDefinition(name="status", path="ConditionDefinition.status", description="The current status of the condition definition", type="token" )
4116  public static final String SP_STATUS = "status";
4117 /**
4118   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4119   * <p>
4120   * Description: <b>The current status of the condition definition</b><br>
4121   * Type: <b>token</b><br>
4122   * Path: <b>ConditionDefinition.status</b><br>
4123   * </p>
4124   */
4125  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4126
4127 /**
4128   * Search parameter: <b>title</b>
4129   * <p>
4130   * Description: <b>The human-friendly name of the condition definition</b><br>
4131   * Type: <b>string</b><br>
4132   * Path: <b>ConditionDefinition.title</b><br>
4133   * </p>
4134   */
4135  @SearchParamDefinition(name="title", path="ConditionDefinition.title", description="The human-friendly name of the condition definition", type="string" )
4136  public static final String SP_TITLE = "title";
4137 /**
4138   * <b>Fluent Client</b> search parameter constant for <b>title</b>
4139   * <p>
4140   * Description: <b>The human-friendly name of the condition definition</b><br>
4141   * Type: <b>string</b><br>
4142   * Path: <b>ConditionDefinition.title</b><br>
4143   * </p>
4144   */
4145  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
4146
4147 /**
4148   * Search parameter: <b>url</b>
4149   * <p>
4150   * Description: <b>The uri that identifies the condition definition</b><br>
4151   * Type: <b>uri</b><br>
4152   * Path: <b>ConditionDefinition.url</b><br>
4153   * </p>
4154   */
4155  @SearchParamDefinition(name="url", path="ConditionDefinition.url", description="The uri that identifies the condition definition", type="uri" )
4156  public static final String SP_URL = "url";
4157 /**
4158   * <b>Fluent Client</b> search parameter constant for <b>url</b>
4159   * <p>
4160   * Description: <b>The uri that identifies the condition definition</b><br>
4161   * Type: <b>uri</b><br>
4162   * Path: <b>ConditionDefinition.url</b><br>
4163   * </p>
4164   */
4165  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
4166
4167 /**
4168   * Search parameter: <b>version</b>
4169   * <p>
4170   * Description: <b>The business version of the condition definition</b><br>
4171   * Type: <b>token</b><br>
4172   * Path: <b>ConditionDefinition.version</b><br>
4173   * </p>
4174   */
4175  @SearchParamDefinition(name="version", path="ConditionDefinition.version", description="The business version of the condition definition", type="token" )
4176  public static final String SP_VERSION = "version";
4177 /**
4178   * <b>Fluent Client</b> search parameter constant for <b>version</b>
4179   * <p>
4180   * Description: <b>The business version of the condition definition</b><br>
4181   * Type: <b>token</b><br>
4182   * Path: <b>ConditionDefinition.version</b><br>
4183   * </p>
4184   */
4185  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
4186
4187
4188}
4189