001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * The EvidenceReport Resource is a specialized container for a collection of resources and codable concepts, adapted to support compositions of Evidence, EvidenceVariable, and Citation resources and related concepts.
052 */
053@ResourceDef(name="EvidenceReport", profile="http://hl7.org/fhir/StructureDefinition/EvidenceReport")
054public class EvidenceReport extends DomainResource {
055
056    public enum ReportRelationshipType {
057        /**
058         * This document replaces or supersedes the target document.
059         */
060        REPLACES, 
061        /**
062         * This document notes corrections or changes to replace or supersede parts of the target document.
063         */
064        AMENDS, 
065        /**
066         * This document adds additional information to the target document.
067         */
068        APPENDS, 
069        /**
070         * This document was generated by transforming the target document (eg format or language conversion).
071         */
072        TRANSFORMS, 
073        /**
074         * This document was.
075         */
076        REPLACEDWITH, 
077        /**
078         * This document was.
079         */
080        AMENDEDWITH, 
081        /**
082         * This document was.
083         */
084        APPENDEDWITH, 
085        /**
086         * This document was.
087         */
088        TRANSFORMEDWITH, 
089        /**
090         * added to help the parsers with the generic types
091         */
092        NULL;
093        public static ReportRelationshipType fromCode(String codeString) throws FHIRException {
094            if (codeString == null || "".equals(codeString))
095                return null;
096        if ("replaces".equals(codeString))
097          return REPLACES;
098        if ("amends".equals(codeString))
099          return AMENDS;
100        if ("appends".equals(codeString))
101          return APPENDS;
102        if ("transforms".equals(codeString))
103          return TRANSFORMS;
104        if ("replacedWith".equals(codeString))
105          return REPLACEDWITH;
106        if ("amendedWith".equals(codeString))
107          return AMENDEDWITH;
108        if ("appendedWith".equals(codeString))
109          return APPENDEDWITH;
110        if ("transformedWith".equals(codeString))
111          return TRANSFORMEDWITH;
112        if (Configuration.isAcceptInvalidEnums())
113          return null;
114        else
115          throw new FHIRException("Unknown ReportRelationshipType code '"+codeString+"'");
116        }
117        public String toCode() {
118          switch (this) {
119            case REPLACES: return "replaces";
120            case AMENDS: return "amends";
121            case APPENDS: return "appends";
122            case TRANSFORMS: return "transforms";
123            case REPLACEDWITH: return "replacedWith";
124            case AMENDEDWITH: return "amendedWith";
125            case APPENDEDWITH: return "appendedWith";
126            case TRANSFORMEDWITH: return "transformedWith";
127            case NULL: return null;
128            default: return "?";
129          }
130        }
131        public String getSystem() {
132          switch (this) {
133            case REPLACES: return "http://hl7.org/fhir/report-relation-type";
134            case AMENDS: return "http://hl7.org/fhir/report-relation-type";
135            case APPENDS: return "http://hl7.org/fhir/report-relation-type";
136            case TRANSFORMS: return "http://hl7.org/fhir/report-relation-type";
137            case REPLACEDWITH: return "http://hl7.org/fhir/report-relation-type";
138            case AMENDEDWITH: return "http://hl7.org/fhir/report-relation-type";
139            case APPENDEDWITH: return "http://hl7.org/fhir/report-relation-type";
140            case TRANSFORMEDWITH: return "http://hl7.org/fhir/report-relation-type";
141            case NULL: return null;
142            default: return "?";
143          }
144        }
145        public String getDefinition() {
146          switch (this) {
147            case REPLACES: return "This document replaces or supersedes the target document.";
148            case AMENDS: return "This document notes corrections or changes to replace or supersede parts of the target document.";
149            case APPENDS: return "This document adds additional information to the target document.";
150            case TRANSFORMS: return "This document was generated by transforming the target document (eg format or language conversion).";
151            case REPLACEDWITH: return "This document was.";
152            case AMENDEDWITH: return "This document was.";
153            case APPENDEDWITH: return "This document was.";
154            case TRANSFORMEDWITH: return "This document was.";
155            case NULL: return null;
156            default: return "?";
157          }
158        }
159        public String getDisplay() {
160          switch (this) {
161            case REPLACES: return "Replaces";
162            case AMENDS: return "Amends";
163            case APPENDS: return "Appends";
164            case TRANSFORMS: return "Transforms";
165            case REPLACEDWITH: return "Replaced With";
166            case AMENDEDWITH: return "Amended With";
167            case APPENDEDWITH: return "Appended With";
168            case TRANSFORMEDWITH: return "Transformed With";
169            case NULL: return null;
170            default: return "?";
171          }
172        }
173    }
174
175  public static class ReportRelationshipTypeEnumFactory implements EnumFactory<ReportRelationshipType> {
176    public ReportRelationshipType fromCode(String codeString) throws IllegalArgumentException {
177      if (codeString == null || "".equals(codeString))
178            if (codeString == null || "".equals(codeString))
179                return null;
180        if ("replaces".equals(codeString))
181          return ReportRelationshipType.REPLACES;
182        if ("amends".equals(codeString))
183          return ReportRelationshipType.AMENDS;
184        if ("appends".equals(codeString))
185          return ReportRelationshipType.APPENDS;
186        if ("transforms".equals(codeString))
187          return ReportRelationshipType.TRANSFORMS;
188        if ("replacedWith".equals(codeString))
189          return ReportRelationshipType.REPLACEDWITH;
190        if ("amendedWith".equals(codeString))
191          return ReportRelationshipType.AMENDEDWITH;
192        if ("appendedWith".equals(codeString))
193          return ReportRelationshipType.APPENDEDWITH;
194        if ("transformedWith".equals(codeString))
195          return ReportRelationshipType.TRANSFORMEDWITH;
196        throw new IllegalArgumentException("Unknown ReportRelationshipType code '"+codeString+"'");
197        }
198        public Enumeration<ReportRelationshipType> fromType(Base code) throws FHIRException {
199          if (code == null)
200            return null;
201          if (code.isEmpty())
202            return new Enumeration<ReportRelationshipType>(this);
203          String codeString = ((PrimitiveType) code).asStringValue();
204          if (codeString == null || "".equals(codeString))
205            return null;
206        if ("replaces".equals(codeString))
207          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.REPLACES);
208        if ("amends".equals(codeString))
209          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.AMENDS);
210        if ("appends".equals(codeString))
211          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.APPENDS);
212        if ("transforms".equals(codeString))
213          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.TRANSFORMS);
214        if ("replacedWith".equals(codeString))
215          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.REPLACEDWITH);
216        if ("amendedWith".equals(codeString))
217          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.AMENDEDWITH);
218        if ("appendedWith".equals(codeString))
219          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.APPENDEDWITH);
220        if ("transformedWith".equals(codeString))
221          return new Enumeration<ReportRelationshipType>(this, ReportRelationshipType.TRANSFORMEDWITH);
222        throw new FHIRException("Unknown ReportRelationshipType code '"+codeString+"'");
223        }
224    public String toCode(ReportRelationshipType code) {
225      if (code == ReportRelationshipType.REPLACES)
226        return "replaces";
227      if (code == ReportRelationshipType.AMENDS)
228        return "amends";
229      if (code == ReportRelationshipType.APPENDS)
230        return "appends";
231      if (code == ReportRelationshipType.TRANSFORMS)
232        return "transforms";
233      if (code == ReportRelationshipType.REPLACEDWITH)
234        return "replacedWith";
235      if (code == ReportRelationshipType.AMENDEDWITH)
236        return "amendedWith";
237      if (code == ReportRelationshipType.APPENDEDWITH)
238        return "appendedWith";
239      if (code == ReportRelationshipType.TRANSFORMEDWITH)
240        return "transformedWith";
241      return "?";
242      }
243    public String toSystem(ReportRelationshipType code) {
244      return code.getSystem();
245      }
246    }
247
248    @Block()
249    public static class EvidenceReportSubjectComponent extends BackboneElement implements IBaseBackboneElement {
250        /**
251         * Characteristic.
252         */
253        @Child(name = "characteristic", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
254        @Description(shortDefinition="Characteristic", formalDefinition="Characteristic." )
255        protected List<EvidenceReportSubjectCharacteristicComponent> characteristic;
256
257        /**
258         * Used for general notes and annotations not coded elsewhere.
259         */
260        @Child(name = "note", type = {Annotation.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
261        @Description(shortDefinition="Footnotes and/or explanatory notes", formalDefinition="Used for general notes and annotations not coded elsewhere." )
262        protected List<Annotation> note;
263
264        private static final long serialVersionUID = -734040873L;
265
266    /**
267     * Constructor
268     */
269      public EvidenceReportSubjectComponent() {
270        super();
271      }
272
273        /**
274         * @return {@link #characteristic} (Characteristic.)
275         */
276        public List<EvidenceReportSubjectCharacteristicComponent> getCharacteristic() { 
277          if (this.characteristic == null)
278            this.characteristic = new ArrayList<EvidenceReportSubjectCharacteristicComponent>();
279          return this.characteristic;
280        }
281
282        /**
283         * @return Returns a reference to <code>this</code> for easy method chaining
284         */
285        public EvidenceReportSubjectComponent setCharacteristic(List<EvidenceReportSubjectCharacteristicComponent> theCharacteristic) { 
286          this.characteristic = theCharacteristic;
287          return this;
288        }
289
290        public boolean hasCharacteristic() { 
291          if (this.characteristic == null)
292            return false;
293          for (EvidenceReportSubjectCharacteristicComponent item : this.characteristic)
294            if (!item.isEmpty())
295              return true;
296          return false;
297        }
298
299        public EvidenceReportSubjectCharacteristicComponent addCharacteristic() { //3
300          EvidenceReportSubjectCharacteristicComponent t = new EvidenceReportSubjectCharacteristicComponent();
301          if (this.characteristic == null)
302            this.characteristic = new ArrayList<EvidenceReportSubjectCharacteristicComponent>();
303          this.characteristic.add(t);
304          return t;
305        }
306
307        public EvidenceReportSubjectComponent addCharacteristic(EvidenceReportSubjectCharacteristicComponent t) { //3
308          if (t == null)
309            return this;
310          if (this.characteristic == null)
311            this.characteristic = new ArrayList<EvidenceReportSubjectCharacteristicComponent>();
312          this.characteristic.add(t);
313          return this;
314        }
315
316        /**
317         * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist {3}
318         */
319        public EvidenceReportSubjectCharacteristicComponent getCharacteristicFirstRep() { 
320          if (getCharacteristic().isEmpty()) {
321            addCharacteristic();
322          }
323          return getCharacteristic().get(0);
324        }
325
326        /**
327         * @return {@link #note} (Used for general notes and annotations not coded elsewhere.)
328         */
329        public List<Annotation> getNote() { 
330          if (this.note == null)
331            this.note = new ArrayList<Annotation>();
332          return this.note;
333        }
334
335        /**
336         * @return Returns a reference to <code>this</code> for easy method chaining
337         */
338        public EvidenceReportSubjectComponent setNote(List<Annotation> theNote) { 
339          this.note = theNote;
340          return this;
341        }
342
343        public boolean hasNote() { 
344          if (this.note == null)
345            return false;
346          for (Annotation item : this.note)
347            if (!item.isEmpty())
348              return true;
349          return false;
350        }
351
352        public Annotation addNote() { //3
353          Annotation t = new Annotation();
354          if (this.note == null)
355            this.note = new ArrayList<Annotation>();
356          this.note.add(t);
357          return t;
358        }
359
360        public EvidenceReportSubjectComponent addNote(Annotation t) { //3
361          if (t == null)
362            return this;
363          if (this.note == null)
364            this.note = new ArrayList<Annotation>();
365          this.note.add(t);
366          return this;
367        }
368
369        /**
370         * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
371         */
372        public Annotation getNoteFirstRep() { 
373          if (getNote().isEmpty()) {
374            addNote();
375          }
376          return getNote().get(0);
377        }
378
379        protected void listChildren(List<Property> children) {
380          super.listChildren(children);
381          children.add(new Property("characteristic", "", "Characteristic.", 0, java.lang.Integer.MAX_VALUE, characteristic));
382          children.add(new Property("note", "Annotation", "Used for general notes and annotations not coded elsewhere.", 0, java.lang.Integer.MAX_VALUE, note));
383        }
384
385        @Override
386        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
387          switch (_hash) {
388          case 366313883: /*characteristic*/  return new Property("characteristic", "", "Characteristic.", 0, java.lang.Integer.MAX_VALUE, characteristic);
389          case 3387378: /*note*/  return new Property("note", "Annotation", "Used for general notes and annotations not coded elsewhere.", 0, java.lang.Integer.MAX_VALUE, note);
390          default: return super.getNamedProperty(_hash, _name, _checkValid);
391          }
392
393        }
394
395      @Override
396      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
397        switch (hash) {
398        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // EvidenceReportSubjectCharacteristicComponent
399        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
400        default: return super.getProperty(hash, name, checkValid);
401        }
402
403      }
404
405      @Override
406      public Base setProperty(int hash, String name, Base value) throws FHIRException {
407        switch (hash) {
408        case 366313883: // characteristic
409          this.getCharacteristic().add((EvidenceReportSubjectCharacteristicComponent) value); // EvidenceReportSubjectCharacteristicComponent
410          return value;
411        case 3387378: // note
412          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
413          return value;
414        default: return super.setProperty(hash, name, value);
415        }
416
417      }
418
419      @Override
420      public Base setProperty(String name, Base value) throws FHIRException {
421        if (name.equals("characteristic")) {
422          this.getCharacteristic().add((EvidenceReportSubjectCharacteristicComponent) value);
423        } else if (name.equals("note")) {
424          this.getNote().add(TypeConvertor.castToAnnotation(value));
425        } else
426          return super.setProperty(name, value);
427        return value;
428      }
429
430      @Override
431      public Base makeProperty(int hash, String name) throws FHIRException {
432        switch (hash) {
433        case 366313883:  return addCharacteristic(); 
434        case 3387378:  return addNote(); 
435        default: return super.makeProperty(hash, name);
436        }
437
438      }
439
440      @Override
441      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
442        switch (hash) {
443        case 366313883: /*characteristic*/ return new String[] {};
444        case 3387378: /*note*/ return new String[] {"Annotation"};
445        default: return super.getTypesForProperty(hash, name);
446        }
447
448      }
449
450      @Override
451      public Base addChild(String name) throws FHIRException {
452        if (name.equals("characteristic")) {
453          return addCharacteristic();
454        }
455        else if (name.equals("note")) {
456          return addNote();
457        }
458        else
459          return super.addChild(name);
460      }
461
462      public EvidenceReportSubjectComponent copy() {
463        EvidenceReportSubjectComponent dst = new EvidenceReportSubjectComponent();
464        copyValues(dst);
465        return dst;
466      }
467
468      public void copyValues(EvidenceReportSubjectComponent dst) {
469        super.copyValues(dst);
470        if (characteristic != null) {
471          dst.characteristic = new ArrayList<EvidenceReportSubjectCharacteristicComponent>();
472          for (EvidenceReportSubjectCharacteristicComponent i : characteristic)
473            dst.characteristic.add(i.copy());
474        };
475        if (note != null) {
476          dst.note = new ArrayList<Annotation>();
477          for (Annotation i : note)
478            dst.note.add(i.copy());
479        };
480      }
481
482      @Override
483      public boolean equalsDeep(Base other_) {
484        if (!super.equalsDeep(other_))
485          return false;
486        if (!(other_ instanceof EvidenceReportSubjectComponent))
487          return false;
488        EvidenceReportSubjectComponent o = (EvidenceReportSubjectComponent) other_;
489        return compareDeep(characteristic, o.characteristic, true) && compareDeep(note, o.note, true);
490      }
491
492      @Override
493      public boolean equalsShallow(Base other_) {
494        if (!super.equalsShallow(other_))
495          return false;
496        if (!(other_ instanceof EvidenceReportSubjectComponent))
497          return false;
498        EvidenceReportSubjectComponent o = (EvidenceReportSubjectComponent) other_;
499        return true;
500      }
501
502      public boolean isEmpty() {
503        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(characteristic, note);
504      }
505
506  public String fhirType() {
507    return "EvidenceReport.subject";
508
509  }
510
511  }
512
513    @Block()
514    public static class EvidenceReportSubjectCharacteristicComponent extends BackboneElement implements IBaseBackboneElement {
515        /**
516         * Characteristic code.
517         */
518        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
519        @Description(shortDefinition="Characteristic code", formalDefinition="Characteristic code." )
520        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/focus-characteristic-code")
521        protected CodeableConcept code;
522
523        /**
524         * Characteristic value.
525         */
526        @Child(name = "value", type = {Reference.class, CodeableConcept.class, BooleanType.class, Quantity.class, Range.class}, order=2, min=1, max=1, modifier=false, summary=false)
527        @Description(shortDefinition="Characteristic value", formalDefinition="Characteristic value." )
528        protected DataType value;
529
530        /**
531         * Is used to express not the characteristic.
532         */
533        @Child(name = "exclude", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
534        @Description(shortDefinition="Is used to express not the characteristic", formalDefinition="Is used to express not the characteristic." )
535        protected BooleanType exclude;
536
537        /**
538         * Timeframe for the characteristic.
539         */
540        @Child(name = "period", type = {Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
541        @Description(shortDefinition="Timeframe for the characteristic", formalDefinition="Timeframe for the characteristic." )
542        protected Period period;
543
544        private static final long serialVersionUID = 279867823L;
545
546    /**
547     * Constructor
548     */
549      public EvidenceReportSubjectCharacteristicComponent() {
550        super();
551      }
552
553    /**
554     * Constructor
555     */
556      public EvidenceReportSubjectCharacteristicComponent(CodeableConcept code, DataType value) {
557        super();
558        this.setCode(code);
559        this.setValue(value);
560      }
561
562        /**
563         * @return {@link #code} (Characteristic code.)
564         */
565        public CodeableConcept getCode() { 
566          if (this.code == null)
567            if (Configuration.errorOnAutoCreate())
568              throw new Error("Attempt to auto-create EvidenceReportSubjectCharacteristicComponent.code");
569            else if (Configuration.doAutoCreate())
570              this.code = new CodeableConcept(); // cc
571          return this.code;
572        }
573
574        public boolean hasCode() { 
575          return this.code != null && !this.code.isEmpty();
576        }
577
578        /**
579         * @param value {@link #code} (Characteristic code.)
580         */
581        public EvidenceReportSubjectCharacteristicComponent setCode(CodeableConcept value) { 
582          this.code = value;
583          return this;
584        }
585
586        /**
587         * @return {@link #value} (Characteristic value.)
588         */
589        public DataType getValue() { 
590          return this.value;
591        }
592
593        /**
594         * @return {@link #value} (Characteristic value.)
595         */
596        public Reference getValueReference() throws FHIRException { 
597          if (this.value == null)
598            this.value = new Reference();
599          if (!(this.value instanceof Reference))
600            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
601          return (Reference) this.value;
602        }
603
604        public boolean hasValueReference() { 
605          return this != null && this.value instanceof Reference;
606        }
607
608        /**
609         * @return {@link #value} (Characteristic value.)
610         */
611        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
612          if (this.value == null)
613            this.value = new CodeableConcept();
614          if (!(this.value instanceof CodeableConcept))
615            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
616          return (CodeableConcept) this.value;
617        }
618
619        public boolean hasValueCodeableConcept() { 
620          return this != null && this.value instanceof CodeableConcept;
621        }
622
623        /**
624         * @return {@link #value} (Characteristic value.)
625         */
626        public BooleanType getValueBooleanType() throws FHIRException { 
627          if (this.value == null)
628            this.value = new BooleanType();
629          if (!(this.value instanceof BooleanType))
630            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
631          return (BooleanType) this.value;
632        }
633
634        public boolean hasValueBooleanType() { 
635          return this != null && this.value instanceof BooleanType;
636        }
637
638        /**
639         * @return {@link #value} (Characteristic value.)
640         */
641        public Quantity getValueQuantity() throws FHIRException { 
642          if (this.value == null)
643            this.value = new Quantity();
644          if (!(this.value instanceof Quantity))
645            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
646          return (Quantity) this.value;
647        }
648
649        public boolean hasValueQuantity() { 
650          return this != null && this.value instanceof Quantity;
651        }
652
653        /**
654         * @return {@link #value} (Characteristic value.)
655         */
656        public Range getValueRange() throws FHIRException { 
657          if (this.value == null)
658            this.value = new Range();
659          if (!(this.value instanceof Range))
660            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
661          return (Range) this.value;
662        }
663
664        public boolean hasValueRange() { 
665          return this != null && this.value instanceof Range;
666        }
667
668        public boolean hasValue() { 
669          return this.value != null && !this.value.isEmpty();
670        }
671
672        /**
673         * @param value {@link #value} (Characteristic value.)
674         */
675        public EvidenceReportSubjectCharacteristicComponent setValue(DataType value) { 
676          if (value != null && !(value instanceof Reference || value instanceof CodeableConcept || value instanceof BooleanType || value instanceof Quantity || value instanceof Range))
677            throw new Error("Not the right type for EvidenceReport.subject.characteristic.value[x]: "+value.fhirType());
678          this.value = value;
679          return this;
680        }
681
682        /**
683         * @return {@link #exclude} (Is used to express not the characteristic.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
684         */
685        public BooleanType getExcludeElement() { 
686          if (this.exclude == null)
687            if (Configuration.errorOnAutoCreate())
688              throw new Error("Attempt to auto-create EvidenceReportSubjectCharacteristicComponent.exclude");
689            else if (Configuration.doAutoCreate())
690              this.exclude = new BooleanType(); // bb
691          return this.exclude;
692        }
693
694        public boolean hasExcludeElement() { 
695          return this.exclude != null && !this.exclude.isEmpty();
696        }
697
698        public boolean hasExclude() { 
699          return this.exclude != null && !this.exclude.isEmpty();
700        }
701
702        /**
703         * @param value {@link #exclude} (Is used to express not the characteristic.). This is the underlying object with id, value and extensions. The accessor "getExclude" gives direct access to the value
704         */
705        public EvidenceReportSubjectCharacteristicComponent setExcludeElement(BooleanType value) { 
706          this.exclude = value;
707          return this;
708        }
709
710        /**
711         * @return Is used to express not the characteristic.
712         */
713        public boolean getExclude() { 
714          return this.exclude == null || this.exclude.isEmpty() ? false : this.exclude.getValue();
715        }
716
717        /**
718         * @param value Is used to express not the characteristic.
719         */
720        public EvidenceReportSubjectCharacteristicComponent setExclude(boolean value) { 
721            if (this.exclude == null)
722              this.exclude = new BooleanType();
723            this.exclude.setValue(value);
724          return this;
725        }
726
727        /**
728         * @return {@link #period} (Timeframe for the characteristic.)
729         */
730        public Period getPeriod() { 
731          if (this.period == null)
732            if (Configuration.errorOnAutoCreate())
733              throw new Error("Attempt to auto-create EvidenceReportSubjectCharacteristicComponent.period");
734            else if (Configuration.doAutoCreate())
735              this.period = new Period(); // cc
736          return this.period;
737        }
738
739        public boolean hasPeriod() { 
740          return this.period != null && !this.period.isEmpty();
741        }
742
743        /**
744         * @param value {@link #period} (Timeframe for the characteristic.)
745         */
746        public EvidenceReportSubjectCharacteristicComponent setPeriod(Period value) { 
747          this.period = value;
748          return this;
749        }
750
751        protected void listChildren(List<Property> children) {
752          super.listChildren(children);
753          children.add(new Property("code", "CodeableConcept", "Characteristic code.", 0, 1, code));
754          children.add(new Property("value[x]", "Reference(Any)|CodeableConcept|boolean|Quantity|Range", "Characteristic value.", 0, 1, value));
755          children.add(new Property("exclude", "boolean", "Is used to express not the characteristic.", 0, 1, exclude));
756          children.add(new Property("period", "Period", "Timeframe for the characteristic.", 0, 1, period));
757        }
758
759        @Override
760        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
761          switch (_hash) {
762          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Characteristic code.", 0, 1, code);
763          case -1410166417: /*value[x]*/  return new Property("value[x]", "Reference(Any)|CodeableConcept|boolean|Quantity|Range", "Characteristic value.", 0, 1, value);
764          case 111972721: /*value*/  return new Property("value[x]", "Reference(Any)|CodeableConcept|boolean|Quantity|Range", "Characteristic value.", 0, 1, value);
765          case 1755241690: /*valueReference*/  return new Property("value[x]", "Reference(Any)", "Characteristic value.", 0, 1, value);
766          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "Characteristic value.", 0, 1, value);
767          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "Characteristic value.", 0, 1, value);
768          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "Characteristic value.", 0, 1, value);
769          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "Characteristic value.", 0, 1, value);
770          case -1321148966: /*exclude*/  return new Property("exclude", "boolean", "Is used to express not the characteristic.", 0, 1, exclude);
771          case -991726143: /*period*/  return new Property("period", "Period", "Timeframe for the characteristic.", 0, 1, period);
772          default: return super.getNamedProperty(_hash, _name, _checkValid);
773          }
774
775        }
776
777      @Override
778      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
779        switch (hash) {
780        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
781        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
782        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : new Base[] {this.exclude}; // BooleanType
783        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
784        default: return super.getProperty(hash, name, checkValid);
785        }
786
787      }
788
789      @Override
790      public Base setProperty(int hash, String name, Base value) throws FHIRException {
791        switch (hash) {
792        case 3059181: // code
793          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
794          return value;
795        case 111972721: // value
796          this.value = TypeConvertor.castToType(value); // DataType
797          return value;
798        case -1321148966: // exclude
799          this.exclude = TypeConvertor.castToBoolean(value); // BooleanType
800          return value;
801        case -991726143: // period
802          this.period = TypeConvertor.castToPeriod(value); // Period
803          return value;
804        default: return super.setProperty(hash, name, value);
805        }
806
807      }
808
809      @Override
810      public Base setProperty(String name, Base value) throws FHIRException {
811        if (name.equals("code")) {
812          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
813        } else if (name.equals("value[x]")) {
814          this.value = TypeConvertor.castToType(value); // DataType
815        } else if (name.equals("exclude")) {
816          this.exclude = TypeConvertor.castToBoolean(value); // BooleanType
817        } else if (name.equals("period")) {
818          this.period = TypeConvertor.castToPeriod(value); // Period
819        } else
820          return super.setProperty(name, value);
821        return value;
822      }
823
824      @Override
825      public Base makeProperty(int hash, String name) throws FHIRException {
826        switch (hash) {
827        case 3059181:  return getCode();
828        case -1410166417:  return getValue();
829        case 111972721:  return getValue();
830        case -1321148966:  return getExcludeElement();
831        case -991726143:  return getPeriod();
832        default: return super.makeProperty(hash, name);
833        }
834
835      }
836
837      @Override
838      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
839        switch (hash) {
840        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
841        case 111972721: /*value*/ return new String[] {"Reference", "CodeableConcept", "boolean", "Quantity", "Range"};
842        case -1321148966: /*exclude*/ return new String[] {"boolean"};
843        case -991726143: /*period*/ return new String[] {"Period"};
844        default: return super.getTypesForProperty(hash, name);
845        }
846
847      }
848
849      @Override
850      public Base addChild(String name) throws FHIRException {
851        if (name.equals("code")) {
852          this.code = new CodeableConcept();
853          return this.code;
854        }
855        else if (name.equals("valueReference")) {
856          this.value = new Reference();
857          return this.value;
858        }
859        else if (name.equals("valueCodeableConcept")) {
860          this.value = new CodeableConcept();
861          return this.value;
862        }
863        else if (name.equals("valueBoolean")) {
864          this.value = new BooleanType();
865          return this.value;
866        }
867        else if (name.equals("valueQuantity")) {
868          this.value = new Quantity();
869          return this.value;
870        }
871        else if (name.equals("valueRange")) {
872          this.value = new Range();
873          return this.value;
874        }
875        else if (name.equals("exclude")) {
876          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.subject.characteristic.exclude");
877        }
878        else if (name.equals("period")) {
879          this.period = new Period();
880          return this.period;
881        }
882        else
883          return super.addChild(name);
884      }
885
886      public EvidenceReportSubjectCharacteristicComponent copy() {
887        EvidenceReportSubjectCharacteristicComponent dst = new EvidenceReportSubjectCharacteristicComponent();
888        copyValues(dst);
889        return dst;
890      }
891
892      public void copyValues(EvidenceReportSubjectCharacteristicComponent dst) {
893        super.copyValues(dst);
894        dst.code = code == null ? null : code.copy();
895        dst.value = value == null ? null : value.copy();
896        dst.exclude = exclude == null ? null : exclude.copy();
897        dst.period = period == null ? null : period.copy();
898      }
899
900      @Override
901      public boolean equalsDeep(Base other_) {
902        if (!super.equalsDeep(other_))
903          return false;
904        if (!(other_ instanceof EvidenceReportSubjectCharacteristicComponent))
905          return false;
906        EvidenceReportSubjectCharacteristicComponent o = (EvidenceReportSubjectCharacteristicComponent) other_;
907        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(exclude, o.exclude, true)
908           && compareDeep(period, o.period, true);
909      }
910
911      @Override
912      public boolean equalsShallow(Base other_) {
913        if (!super.equalsShallow(other_))
914          return false;
915        if (!(other_ instanceof EvidenceReportSubjectCharacteristicComponent))
916          return false;
917        EvidenceReportSubjectCharacteristicComponent o = (EvidenceReportSubjectCharacteristicComponent) other_;
918        return compareValues(exclude, o.exclude, true);
919      }
920
921      public boolean isEmpty() {
922        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, exclude, period
923          );
924      }
925
926  public String fhirType() {
927    return "EvidenceReport.subject.characteristic";
928
929  }
930
931  }
932
933    @Block()
934    public static class EvidenceReportRelatesToComponent extends BackboneElement implements IBaseBackboneElement {
935        /**
936         * The type of relationship that this composition has with anther composition or document.
937         */
938        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
939        @Description(shortDefinition="replaces | amends | appends | transforms | replacedWith | amendedWith | appendedWith | transformedWith", formalDefinition="The type of relationship that this composition has with anther composition or document." )
940        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/report-relation-type")
941        protected Enumeration<ReportRelationshipType> code;
942
943        /**
944         * The target composition/document of this relationship.
945         */
946        @Child(name = "target", type = {Identifier.class, EvidenceReport.class}, order=2, min=1, max=1, modifier=false, summary=false)
947        @Description(shortDefinition="Target of the relationship", formalDefinition="The target composition/document of this relationship." )
948        protected DataType target;
949
950        private static final long serialVersionUID = -1091549831L;
951
952    /**
953     * Constructor
954     */
955      public EvidenceReportRelatesToComponent() {
956        super();
957      }
958
959    /**
960     * Constructor
961     */
962      public EvidenceReportRelatesToComponent(ReportRelationshipType code, DataType target) {
963        super();
964        this.setCode(code);
965        this.setTarget(target);
966      }
967
968        /**
969         * @return {@link #code} (The type of relationship that this composition has with anther composition or document.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
970         */
971        public Enumeration<ReportRelationshipType> getCodeElement() { 
972          if (this.code == null)
973            if (Configuration.errorOnAutoCreate())
974              throw new Error("Attempt to auto-create EvidenceReportRelatesToComponent.code");
975            else if (Configuration.doAutoCreate())
976              this.code = new Enumeration<ReportRelationshipType>(new ReportRelationshipTypeEnumFactory()); // bb
977          return this.code;
978        }
979
980        public boolean hasCodeElement() { 
981          return this.code != null && !this.code.isEmpty();
982        }
983
984        public boolean hasCode() { 
985          return this.code != null && !this.code.isEmpty();
986        }
987
988        /**
989         * @param value {@link #code} (The type of relationship that this composition has with anther composition or document.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
990         */
991        public EvidenceReportRelatesToComponent setCodeElement(Enumeration<ReportRelationshipType> value) { 
992          this.code = value;
993          return this;
994        }
995
996        /**
997         * @return The type of relationship that this composition has with anther composition or document.
998         */
999        public ReportRelationshipType getCode() { 
1000          return this.code == null ? null : this.code.getValue();
1001        }
1002
1003        /**
1004         * @param value The type of relationship that this composition has with anther composition or document.
1005         */
1006        public EvidenceReportRelatesToComponent setCode(ReportRelationshipType value) { 
1007            if (this.code == null)
1008              this.code = new Enumeration<ReportRelationshipType>(new ReportRelationshipTypeEnumFactory());
1009            this.code.setValue(value);
1010          return this;
1011        }
1012
1013        /**
1014         * @return {@link #target} (The target composition/document of this relationship.)
1015         */
1016        public DataType getTarget() { 
1017          return this.target;
1018        }
1019
1020        /**
1021         * @return {@link #target} (The target composition/document of this relationship.)
1022         */
1023        public Identifier getTargetIdentifier() throws FHIRException { 
1024          if (this.target == null)
1025            this.target = new Identifier();
1026          if (!(this.target instanceof Identifier))
1027            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.target.getClass().getName()+" was encountered");
1028          return (Identifier) this.target;
1029        }
1030
1031        public boolean hasTargetIdentifier() { 
1032          return this != null && this.target instanceof Identifier;
1033        }
1034
1035        /**
1036         * @return {@link #target} (The target composition/document of this relationship.)
1037         */
1038        public Reference getTargetReference() throws FHIRException { 
1039          if (this.target == null)
1040            this.target = new Reference();
1041          if (!(this.target instanceof Reference))
1042            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.target.getClass().getName()+" was encountered");
1043          return (Reference) this.target;
1044        }
1045
1046        public boolean hasTargetReference() { 
1047          return this != null && this.target instanceof Reference;
1048        }
1049
1050        public boolean hasTarget() { 
1051          return this.target != null && !this.target.isEmpty();
1052        }
1053
1054        /**
1055         * @param value {@link #target} (The target composition/document of this relationship.)
1056         */
1057        public EvidenceReportRelatesToComponent setTarget(DataType value) { 
1058          if (value != null && !(value instanceof Identifier || value instanceof Reference))
1059            throw new Error("Not the right type for EvidenceReport.relatesTo.target[x]: "+value.fhirType());
1060          this.target = value;
1061          return this;
1062        }
1063
1064        protected void listChildren(List<Property> children) {
1065          super.listChildren(children);
1066          children.add(new Property("code", "code", "The type of relationship that this composition has with anther composition or document.", 0, 1, code));
1067          children.add(new Property("target[x]", "Identifier|Reference(EvidenceReport)", "The target composition/document of this relationship.", 0, 1, target));
1068        }
1069
1070        @Override
1071        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1072          switch (_hash) {
1073          case 3059181: /*code*/  return new Property("code", "code", "The type of relationship that this composition has with anther composition or document.", 0, 1, code);
1074          case -815579825: /*target[x]*/  return new Property("target[x]", "Identifier|Reference(EvidenceReport)", "The target composition/document of this relationship.", 0, 1, target);
1075          case -880905839: /*target*/  return new Property("target[x]", "Identifier|Reference(EvidenceReport)", "The target composition/document of this relationship.", 0, 1, target);
1076          case 1690892570: /*targetIdentifier*/  return new Property("target[x]", "Identifier", "The target composition/document of this relationship.", 0, 1, target);
1077          case 1259806906: /*targetReference*/  return new Property("target[x]", "Reference(EvidenceReport)", "The target composition/document of this relationship.", 0, 1, target);
1078          default: return super.getNamedProperty(_hash, _name, _checkValid);
1079          }
1080
1081        }
1082
1083      @Override
1084      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1085        switch (hash) {
1086        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Enumeration<ReportRelationshipType>
1087        case -880905839: /*target*/ return this.target == null ? new Base[0] : new Base[] {this.target}; // DataType
1088        default: return super.getProperty(hash, name, checkValid);
1089        }
1090
1091      }
1092
1093      @Override
1094      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1095        switch (hash) {
1096        case 3059181: // code
1097          value = new ReportRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1098          this.code = (Enumeration) value; // Enumeration<ReportRelationshipType>
1099          return value;
1100        case -880905839: // target
1101          this.target = TypeConvertor.castToType(value); // DataType
1102          return value;
1103        default: return super.setProperty(hash, name, value);
1104        }
1105
1106      }
1107
1108      @Override
1109      public Base setProperty(String name, Base value) throws FHIRException {
1110        if (name.equals("code")) {
1111          value = new ReportRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1112          this.code = (Enumeration) value; // Enumeration<ReportRelationshipType>
1113        } else if (name.equals("target[x]")) {
1114          this.target = TypeConvertor.castToType(value); // DataType
1115        } else
1116          return super.setProperty(name, value);
1117        return value;
1118      }
1119
1120      @Override
1121      public Base makeProperty(int hash, String name) throws FHIRException {
1122        switch (hash) {
1123        case 3059181:  return getCodeElement();
1124        case -815579825:  return getTarget();
1125        case -880905839:  return getTarget();
1126        default: return super.makeProperty(hash, name);
1127        }
1128
1129      }
1130
1131      @Override
1132      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1133        switch (hash) {
1134        case 3059181: /*code*/ return new String[] {"code"};
1135        case -880905839: /*target*/ return new String[] {"Identifier", "Reference"};
1136        default: return super.getTypesForProperty(hash, name);
1137        }
1138
1139      }
1140
1141      @Override
1142      public Base addChild(String name) throws FHIRException {
1143        if (name.equals("code")) {
1144          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.relatesTo.code");
1145        }
1146        else if (name.equals("targetIdentifier")) {
1147          this.target = new Identifier();
1148          return this.target;
1149        }
1150        else if (name.equals("targetReference")) {
1151          this.target = new Reference();
1152          return this.target;
1153        }
1154        else
1155          return super.addChild(name);
1156      }
1157
1158      public EvidenceReportRelatesToComponent copy() {
1159        EvidenceReportRelatesToComponent dst = new EvidenceReportRelatesToComponent();
1160        copyValues(dst);
1161        return dst;
1162      }
1163
1164      public void copyValues(EvidenceReportRelatesToComponent dst) {
1165        super.copyValues(dst);
1166        dst.code = code == null ? null : code.copy();
1167        dst.target = target == null ? null : target.copy();
1168      }
1169
1170      @Override
1171      public boolean equalsDeep(Base other_) {
1172        if (!super.equalsDeep(other_))
1173          return false;
1174        if (!(other_ instanceof EvidenceReportRelatesToComponent))
1175          return false;
1176        EvidenceReportRelatesToComponent o = (EvidenceReportRelatesToComponent) other_;
1177        return compareDeep(code, o.code, true) && compareDeep(target, o.target, true);
1178      }
1179
1180      @Override
1181      public boolean equalsShallow(Base other_) {
1182        if (!super.equalsShallow(other_))
1183          return false;
1184        if (!(other_ instanceof EvidenceReportRelatesToComponent))
1185          return false;
1186        EvidenceReportRelatesToComponent o = (EvidenceReportRelatesToComponent) other_;
1187        return compareValues(code, o.code, true);
1188      }
1189
1190      public boolean isEmpty() {
1191        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, target);
1192      }
1193
1194  public String fhirType() {
1195    return "EvidenceReport.relatesTo";
1196
1197  }
1198
1199  }
1200
1201    @Block()
1202    public static class SectionComponent extends BackboneElement implements IBaseBackboneElement {
1203        /**
1204         * The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1205         */
1206        @Child(name = "title", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1207        @Description(shortDefinition="Label for section (e.g. for ToC)", formalDefinition="The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents." )
1208        protected StringType title;
1209
1210        /**
1211         * A code identifying the kind of content contained within the section. This should be consistent with the section title.
1212         */
1213        @Child(name = "focus", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1214        @Description(shortDefinition="Classification of section (recommended)", formalDefinition="A code identifying the kind of content contained within the section. This should be consistent with the section title." )
1215        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/evidence-report-section")
1216        protected CodeableConcept focus;
1217
1218        /**
1219         * A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title.
1220         */
1221        @Child(name = "focusReference", type = {Reference.class}, order=3, min=0, max=1, modifier=false, summary=false)
1222        @Description(shortDefinition="Classification of section by Resource", formalDefinition="A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title." )
1223        protected Reference focusReference;
1224
1225        /**
1226         * Identifies who is responsible for the information in this section, not necessarily who typed it in.
1227         */
1228        @Child(name = "author", type = {Person.class, Device.class, Group.class, Organization.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1229        @Description(shortDefinition="Who and/or what authored the section", formalDefinition="Identifies who is responsible for the information in this section, not necessarily who typed it in." )
1230        protected List<Reference> author;
1231
1232        /**
1233         * A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative.
1234         */
1235        @Child(name = "text", type = {Narrative.class}, order=5, min=0, max=1, modifier=false, summary=false)
1236        @Description(shortDefinition="Text summary of the section, for human interpretation", formalDefinition="A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative." )
1237        protected Narrative text;
1238
1239        /**
1240         * How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1241         */
1242        @Child(name = "mode", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
1243        @Description(shortDefinition="working | snapshot | changes", formalDefinition="How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted." )
1244        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-mode")
1245        protected Enumeration<ListMode> mode;
1246
1247        /**
1248         * Specifies the order applied to the items in the section entries.
1249         */
1250        @Child(name = "orderedBy", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=false)
1251        @Description(shortDefinition="Order of section entries", formalDefinition="Specifies the order applied to the items in the section entries." )
1252        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-order")
1253        protected CodeableConcept orderedBy;
1254
1255        /**
1256         * Specifies any type of classification of the evidence report.
1257         */
1258        @Child(name = "entryClassifier", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1259        @Description(shortDefinition="Extensible classifiers as content", formalDefinition="Specifies any type of classification of the evidence report." )
1260        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/evidence-classifier-code")
1261        protected List<CodeableConcept> entryClassifier;
1262
1263        /**
1264         * A reference to the actual resource from which the narrative in the section is derived.
1265         */
1266        @Child(name = "entryReference", type = {Reference.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1267        @Description(shortDefinition="Reference to resources as content", formalDefinition="A reference to the actual resource from which the narrative in the section is derived." )
1268        protected List<Reference> entryReference;
1269
1270        /**
1271         * Quantity as content.
1272         */
1273        @Child(name = "entryQuantity", type = {Quantity.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1274        @Description(shortDefinition="Quantity as content", formalDefinition="Quantity as content." )
1275        protected List<Quantity> entryQuantity;
1276
1277        /**
1278         * If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.
1279         */
1280        @Child(name = "emptyReason", type = {CodeableConcept.class}, order=11, min=0, max=1, modifier=false, summary=false)
1281        @Description(shortDefinition="Why the section is empty", formalDefinition="If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason." )
1282        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-empty-reason")
1283        protected CodeableConcept emptyReason;
1284
1285        /**
1286         * A nested sub-section within this section.
1287         */
1288        @Child(name = "section", type = {SectionComponent.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1289        @Description(shortDefinition="Nested Section", formalDefinition="A nested sub-section within this section." )
1290        protected List<SectionComponent> section;
1291
1292        private static final long serialVersionUID = -324854168L;
1293
1294    /**
1295     * Constructor
1296     */
1297      public SectionComponent() {
1298        super();
1299      }
1300
1301        /**
1302         * @return {@link #title} (The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1303         */
1304        public StringType getTitleElement() { 
1305          if (this.title == null)
1306            if (Configuration.errorOnAutoCreate())
1307              throw new Error("Attempt to auto-create SectionComponent.title");
1308            else if (Configuration.doAutoCreate())
1309              this.title = new StringType(); // bb
1310          return this.title;
1311        }
1312
1313        public boolean hasTitleElement() { 
1314          return this.title != null && !this.title.isEmpty();
1315        }
1316
1317        public boolean hasTitle() { 
1318          return this.title != null && !this.title.isEmpty();
1319        }
1320
1321        /**
1322         * @param value {@link #title} (The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1323         */
1324        public SectionComponent setTitleElement(StringType value) { 
1325          this.title = value;
1326          return this;
1327        }
1328
1329        /**
1330         * @return The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1331         */
1332        public String getTitle() { 
1333          return this.title == null ? null : this.title.getValue();
1334        }
1335
1336        /**
1337         * @param value The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1338         */
1339        public SectionComponent setTitle(String value) { 
1340          if (Utilities.noString(value))
1341            this.title = null;
1342          else {
1343            if (this.title == null)
1344              this.title = new StringType();
1345            this.title.setValue(value);
1346          }
1347          return this;
1348        }
1349
1350        /**
1351         * @return {@link #focus} (A code identifying the kind of content contained within the section. This should be consistent with the section title.)
1352         */
1353        public CodeableConcept getFocus() { 
1354          if (this.focus == null)
1355            if (Configuration.errorOnAutoCreate())
1356              throw new Error("Attempt to auto-create SectionComponent.focus");
1357            else if (Configuration.doAutoCreate())
1358              this.focus = new CodeableConcept(); // cc
1359          return this.focus;
1360        }
1361
1362        public boolean hasFocus() { 
1363          return this.focus != null && !this.focus.isEmpty();
1364        }
1365
1366        /**
1367         * @param value {@link #focus} (A code identifying the kind of content contained within the section. This should be consistent with the section title.)
1368         */
1369        public SectionComponent setFocus(CodeableConcept value) { 
1370          this.focus = value;
1371          return this;
1372        }
1373
1374        /**
1375         * @return {@link #focusReference} (A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title.)
1376         */
1377        public Reference getFocusReference() { 
1378          if (this.focusReference == null)
1379            if (Configuration.errorOnAutoCreate())
1380              throw new Error("Attempt to auto-create SectionComponent.focusReference");
1381            else if (Configuration.doAutoCreate())
1382              this.focusReference = new Reference(); // cc
1383          return this.focusReference;
1384        }
1385
1386        public boolean hasFocusReference() { 
1387          return this.focusReference != null && !this.focusReference.isEmpty();
1388        }
1389
1390        /**
1391         * @param value {@link #focusReference} (A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title.)
1392         */
1393        public SectionComponent setFocusReference(Reference value) { 
1394          this.focusReference = value;
1395          return this;
1396        }
1397
1398        /**
1399         * @return {@link #author} (Identifies who is responsible for the information in this section, not necessarily who typed it in.)
1400         */
1401        public List<Reference> getAuthor() { 
1402          if (this.author == null)
1403            this.author = new ArrayList<Reference>();
1404          return this.author;
1405        }
1406
1407        /**
1408         * @return Returns a reference to <code>this</code> for easy method chaining
1409         */
1410        public SectionComponent setAuthor(List<Reference> theAuthor) { 
1411          this.author = theAuthor;
1412          return this;
1413        }
1414
1415        public boolean hasAuthor() { 
1416          if (this.author == null)
1417            return false;
1418          for (Reference item : this.author)
1419            if (!item.isEmpty())
1420              return true;
1421          return false;
1422        }
1423
1424        public Reference addAuthor() { //3
1425          Reference t = new Reference();
1426          if (this.author == null)
1427            this.author = new ArrayList<Reference>();
1428          this.author.add(t);
1429          return t;
1430        }
1431
1432        public SectionComponent addAuthor(Reference t) { //3
1433          if (t == null)
1434            return this;
1435          if (this.author == null)
1436            this.author = new ArrayList<Reference>();
1437          this.author.add(t);
1438          return this;
1439        }
1440
1441        /**
1442         * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
1443         */
1444        public Reference getAuthorFirstRep() { 
1445          if (getAuthor().isEmpty()) {
1446            addAuthor();
1447          }
1448          return getAuthor().get(0);
1449        }
1450
1451        /**
1452         * @return {@link #text} (A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative.)
1453         */
1454        public Narrative getText() { 
1455          if (this.text == null)
1456            if (Configuration.errorOnAutoCreate())
1457              throw new Error("Attempt to auto-create SectionComponent.text");
1458            else if (Configuration.doAutoCreate())
1459              this.text = new Narrative(); // cc
1460          return this.text;
1461        }
1462
1463        public boolean hasText() { 
1464          return this.text != null && !this.text.isEmpty();
1465        }
1466
1467        /**
1468         * @param value {@link #text} (A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative.)
1469         */
1470        public SectionComponent setText(Narrative value) { 
1471          this.text = value;
1472          return this;
1473        }
1474
1475        /**
1476         * @return {@link #mode} (How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
1477         */
1478        public Enumeration<ListMode> getModeElement() { 
1479          if (this.mode == null)
1480            if (Configuration.errorOnAutoCreate())
1481              throw new Error("Attempt to auto-create SectionComponent.mode");
1482            else if (Configuration.doAutoCreate())
1483              this.mode = new Enumeration<ListMode>(new ListModeEnumFactory()); // bb
1484          return this.mode;
1485        }
1486
1487        public boolean hasModeElement() { 
1488          return this.mode != null && !this.mode.isEmpty();
1489        }
1490
1491        public boolean hasMode() { 
1492          return this.mode != null && !this.mode.isEmpty();
1493        }
1494
1495        /**
1496         * @param value {@link #mode} (How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
1497         */
1498        public SectionComponent setModeElement(Enumeration<ListMode> value) { 
1499          this.mode = value;
1500          return this;
1501        }
1502
1503        /**
1504         * @return How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1505         */
1506        public ListMode getMode() { 
1507          return this.mode == null ? null : this.mode.getValue();
1508        }
1509
1510        /**
1511         * @param value How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1512         */
1513        public SectionComponent setMode(ListMode value) { 
1514          if (value == null)
1515            this.mode = null;
1516          else {
1517            if (this.mode == null)
1518              this.mode = new Enumeration<ListMode>(new ListModeEnumFactory());
1519            this.mode.setValue(value);
1520          }
1521          return this;
1522        }
1523
1524        /**
1525         * @return {@link #orderedBy} (Specifies the order applied to the items in the section entries.)
1526         */
1527        public CodeableConcept getOrderedBy() { 
1528          if (this.orderedBy == null)
1529            if (Configuration.errorOnAutoCreate())
1530              throw new Error("Attempt to auto-create SectionComponent.orderedBy");
1531            else if (Configuration.doAutoCreate())
1532              this.orderedBy = new CodeableConcept(); // cc
1533          return this.orderedBy;
1534        }
1535
1536        public boolean hasOrderedBy() { 
1537          return this.orderedBy != null && !this.orderedBy.isEmpty();
1538        }
1539
1540        /**
1541         * @param value {@link #orderedBy} (Specifies the order applied to the items in the section entries.)
1542         */
1543        public SectionComponent setOrderedBy(CodeableConcept value) { 
1544          this.orderedBy = value;
1545          return this;
1546        }
1547
1548        /**
1549         * @return {@link #entryClassifier} (Specifies any type of classification of the evidence report.)
1550         */
1551        public List<CodeableConcept> getEntryClassifier() { 
1552          if (this.entryClassifier == null)
1553            this.entryClassifier = new ArrayList<CodeableConcept>();
1554          return this.entryClassifier;
1555        }
1556
1557        /**
1558         * @return Returns a reference to <code>this</code> for easy method chaining
1559         */
1560        public SectionComponent setEntryClassifier(List<CodeableConcept> theEntryClassifier) { 
1561          this.entryClassifier = theEntryClassifier;
1562          return this;
1563        }
1564
1565        public boolean hasEntryClassifier() { 
1566          if (this.entryClassifier == null)
1567            return false;
1568          for (CodeableConcept item : this.entryClassifier)
1569            if (!item.isEmpty())
1570              return true;
1571          return false;
1572        }
1573
1574        public CodeableConcept addEntryClassifier() { //3
1575          CodeableConcept t = new CodeableConcept();
1576          if (this.entryClassifier == null)
1577            this.entryClassifier = new ArrayList<CodeableConcept>();
1578          this.entryClassifier.add(t);
1579          return t;
1580        }
1581
1582        public SectionComponent addEntryClassifier(CodeableConcept t) { //3
1583          if (t == null)
1584            return this;
1585          if (this.entryClassifier == null)
1586            this.entryClassifier = new ArrayList<CodeableConcept>();
1587          this.entryClassifier.add(t);
1588          return this;
1589        }
1590
1591        /**
1592         * @return The first repetition of repeating field {@link #entryClassifier}, creating it if it does not already exist {3}
1593         */
1594        public CodeableConcept getEntryClassifierFirstRep() { 
1595          if (getEntryClassifier().isEmpty()) {
1596            addEntryClassifier();
1597          }
1598          return getEntryClassifier().get(0);
1599        }
1600
1601        /**
1602         * @return {@link #entryReference} (A reference to the actual resource from which the narrative in the section is derived.)
1603         */
1604        public List<Reference> getEntryReference() { 
1605          if (this.entryReference == null)
1606            this.entryReference = new ArrayList<Reference>();
1607          return this.entryReference;
1608        }
1609
1610        /**
1611         * @return Returns a reference to <code>this</code> for easy method chaining
1612         */
1613        public SectionComponent setEntryReference(List<Reference> theEntryReference) { 
1614          this.entryReference = theEntryReference;
1615          return this;
1616        }
1617
1618        public boolean hasEntryReference() { 
1619          if (this.entryReference == null)
1620            return false;
1621          for (Reference item : this.entryReference)
1622            if (!item.isEmpty())
1623              return true;
1624          return false;
1625        }
1626
1627        public Reference addEntryReference() { //3
1628          Reference t = new Reference();
1629          if (this.entryReference == null)
1630            this.entryReference = new ArrayList<Reference>();
1631          this.entryReference.add(t);
1632          return t;
1633        }
1634
1635        public SectionComponent addEntryReference(Reference t) { //3
1636          if (t == null)
1637            return this;
1638          if (this.entryReference == null)
1639            this.entryReference = new ArrayList<Reference>();
1640          this.entryReference.add(t);
1641          return this;
1642        }
1643
1644        /**
1645         * @return The first repetition of repeating field {@link #entryReference}, creating it if it does not already exist {3}
1646         */
1647        public Reference getEntryReferenceFirstRep() { 
1648          if (getEntryReference().isEmpty()) {
1649            addEntryReference();
1650          }
1651          return getEntryReference().get(0);
1652        }
1653
1654        /**
1655         * @return {@link #entryQuantity} (Quantity as content.)
1656         */
1657        public List<Quantity> getEntryQuantity() { 
1658          if (this.entryQuantity == null)
1659            this.entryQuantity = new ArrayList<Quantity>();
1660          return this.entryQuantity;
1661        }
1662
1663        /**
1664         * @return Returns a reference to <code>this</code> for easy method chaining
1665         */
1666        public SectionComponent setEntryQuantity(List<Quantity> theEntryQuantity) { 
1667          this.entryQuantity = theEntryQuantity;
1668          return this;
1669        }
1670
1671        public boolean hasEntryQuantity() { 
1672          if (this.entryQuantity == null)
1673            return false;
1674          for (Quantity item : this.entryQuantity)
1675            if (!item.isEmpty())
1676              return true;
1677          return false;
1678        }
1679
1680        public Quantity addEntryQuantity() { //3
1681          Quantity t = new Quantity();
1682          if (this.entryQuantity == null)
1683            this.entryQuantity = new ArrayList<Quantity>();
1684          this.entryQuantity.add(t);
1685          return t;
1686        }
1687
1688        public SectionComponent addEntryQuantity(Quantity t) { //3
1689          if (t == null)
1690            return this;
1691          if (this.entryQuantity == null)
1692            this.entryQuantity = new ArrayList<Quantity>();
1693          this.entryQuantity.add(t);
1694          return this;
1695        }
1696
1697        /**
1698         * @return The first repetition of repeating field {@link #entryQuantity}, creating it if it does not already exist {3}
1699         */
1700        public Quantity getEntryQuantityFirstRep() { 
1701          if (getEntryQuantity().isEmpty()) {
1702            addEntryQuantity();
1703          }
1704          return getEntryQuantity().get(0);
1705        }
1706
1707        /**
1708         * @return {@link #emptyReason} (If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.)
1709         */
1710        public CodeableConcept getEmptyReason() { 
1711          if (this.emptyReason == null)
1712            if (Configuration.errorOnAutoCreate())
1713              throw new Error("Attempt to auto-create SectionComponent.emptyReason");
1714            else if (Configuration.doAutoCreate())
1715              this.emptyReason = new CodeableConcept(); // cc
1716          return this.emptyReason;
1717        }
1718
1719        public boolean hasEmptyReason() { 
1720          return this.emptyReason != null && !this.emptyReason.isEmpty();
1721        }
1722
1723        /**
1724         * @param value {@link #emptyReason} (If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.)
1725         */
1726        public SectionComponent setEmptyReason(CodeableConcept value) { 
1727          this.emptyReason = value;
1728          return this;
1729        }
1730
1731        /**
1732         * @return {@link #section} (A nested sub-section within this section.)
1733         */
1734        public List<SectionComponent> getSection() { 
1735          if (this.section == null)
1736            this.section = new ArrayList<SectionComponent>();
1737          return this.section;
1738        }
1739
1740        /**
1741         * @return Returns a reference to <code>this</code> for easy method chaining
1742         */
1743        public SectionComponent setSection(List<SectionComponent> theSection) { 
1744          this.section = theSection;
1745          return this;
1746        }
1747
1748        public boolean hasSection() { 
1749          if (this.section == null)
1750            return false;
1751          for (SectionComponent item : this.section)
1752            if (!item.isEmpty())
1753              return true;
1754          return false;
1755        }
1756
1757        public SectionComponent addSection() { //3
1758          SectionComponent t = new SectionComponent();
1759          if (this.section == null)
1760            this.section = new ArrayList<SectionComponent>();
1761          this.section.add(t);
1762          return t;
1763        }
1764
1765        public SectionComponent addSection(SectionComponent t) { //3
1766          if (t == null)
1767            return this;
1768          if (this.section == null)
1769            this.section = new ArrayList<SectionComponent>();
1770          this.section.add(t);
1771          return this;
1772        }
1773
1774        /**
1775         * @return The first repetition of repeating field {@link #section}, creating it if it does not already exist {3}
1776         */
1777        public SectionComponent getSectionFirstRep() { 
1778          if (getSection().isEmpty()) {
1779            addSection();
1780          }
1781          return getSection().get(0);
1782        }
1783
1784        protected void listChildren(List<Property> children) {
1785          super.listChildren(children);
1786          children.add(new Property("title", "string", "The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.", 0, 1, title));
1787          children.add(new Property("focus", "CodeableConcept", "A code identifying the kind of content contained within the section. This should be consistent with the section title.", 0, 1, focus));
1788          children.add(new Property("focusReference", "Reference(Any)", "A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title.", 0, 1, focusReference));
1789          children.add(new Property("author", "Reference(Person|Device|Group|Organization)", "Identifies who is responsible for the information in this section, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author));
1790          children.add(new Property("text", "Narrative", "A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative.", 0, 1, text));
1791          children.add(new Property("mode", "code", "How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", 0, 1, mode));
1792          children.add(new Property("orderedBy", "CodeableConcept", "Specifies the order applied to the items in the section entries.", 0, 1, orderedBy));
1793          children.add(new Property("entryClassifier", "CodeableConcept", "Specifies any type of classification of the evidence report.", 0, java.lang.Integer.MAX_VALUE, entryClassifier));
1794          children.add(new Property("entryReference", "Reference(Any)", "A reference to the actual resource from which the narrative in the section is derived.", 0, java.lang.Integer.MAX_VALUE, entryReference));
1795          children.add(new Property("entryQuantity", "Quantity", "Quantity as content.", 0, java.lang.Integer.MAX_VALUE, entryQuantity));
1796          children.add(new Property("emptyReason", "CodeableConcept", "If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.", 0, 1, emptyReason));
1797          children.add(new Property("section", "@EvidenceReport.section", "A nested sub-section within this section.", 0, java.lang.Integer.MAX_VALUE, section));
1798        }
1799
1800        @Override
1801        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1802          switch (_hash) {
1803          case 110371416: /*title*/  return new Property("title", "string", "The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.", 0, 1, title);
1804          case 97604824: /*focus*/  return new Property("focus", "CodeableConcept", "A code identifying the kind of content contained within the section. This should be consistent with the section title.", 0, 1, focus);
1805          case 1823604051: /*focusReference*/  return new Property("focusReference", "Reference(Any)", "A definitional Resource identifying the kind of content contained within the section. This should be consistent with the section title.", 0, 1, focusReference);
1806          case -1406328437: /*author*/  return new Property("author", "Reference(Person|Device|Group|Organization)", "Identifies who is responsible for the information in this section, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author);
1807          case 3556653: /*text*/  return new Property("text", "Narrative", "A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is peferred to contain sufficient detail to make it acceptable for a human to just read the narrative.", 0, 1, text);
1808          case 3357091: /*mode*/  return new Property("mode", "code", "How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", 0, 1, mode);
1809          case -391079516: /*orderedBy*/  return new Property("orderedBy", "CodeableConcept", "Specifies the order applied to the items in the section entries.", 0, 1, orderedBy);
1810          case -948201421: /*entryClassifier*/  return new Property("entryClassifier", "CodeableConcept", "Specifies any type of classification of the evidence report.", 0, java.lang.Integer.MAX_VALUE, entryClassifier);
1811          case 438810361: /*entryReference*/  return new Property("entryReference", "Reference(Any)", "A reference to the actual resource from which the narrative in the section is derived.", 0, java.lang.Integer.MAX_VALUE, entryReference);
1812          case 1945583389: /*entryQuantity*/  return new Property("entryQuantity", "Quantity", "Quantity as content.", 0, java.lang.Integer.MAX_VALUE, entryQuantity);
1813          case 1140135409: /*emptyReason*/  return new Property("emptyReason", "CodeableConcept", "If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.", 0, 1, emptyReason);
1814          case 1970241253: /*section*/  return new Property("section", "@EvidenceReport.section", "A nested sub-section within this section.", 0, java.lang.Integer.MAX_VALUE, section);
1815          default: return super.getNamedProperty(_hash, _name, _checkValid);
1816          }
1817
1818        }
1819
1820      @Override
1821      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1822        switch (hash) {
1823        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1824        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : new Base[] {this.focus}; // CodeableConcept
1825        case 1823604051: /*focusReference*/ return this.focusReference == null ? new Base[0] : new Base[] {this.focusReference}; // Reference
1826        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // Reference
1827        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // Narrative
1828        case 3357091: /*mode*/ return this.mode == null ? new Base[0] : new Base[] {this.mode}; // Enumeration<ListMode>
1829        case -391079516: /*orderedBy*/ return this.orderedBy == null ? new Base[0] : new Base[] {this.orderedBy}; // CodeableConcept
1830        case -948201421: /*entryClassifier*/ return this.entryClassifier == null ? new Base[0] : this.entryClassifier.toArray(new Base[this.entryClassifier.size()]); // CodeableConcept
1831        case 438810361: /*entryReference*/ return this.entryReference == null ? new Base[0] : this.entryReference.toArray(new Base[this.entryReference.size()]); // Reference
1832        case 1945583389: /*entryQuantity*/ return this.entryQuantity == null ? new Base[0] : this.entryQuantity.toArray(new Base[this.entryQuantity.size()]); // Quantity
1833        case 1140135409: /*emptyReason*/ return this.emptyReason == null ? new Base[0] : new Base[] {this.emptyReason}; // CodeableConcept
1834        case 1970241253: /*section*/ return this.section == null ? new Base[0] : this.section.toArray(new Base[this.section.size()]); // SectionComponent
1835        default: return super.getProperty(hash, name, checkValid);
1836        }
1837
1838      }
1839
1840      @Override
1841      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1842        switch (hash) {
1843        case 110371416: // title
1844          this.title = TypeConvertor.castToString(value); // StringType
1845          return value;
1846        case 97604824: // focus
1847          this.focus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1848          return value;
1849        case 1823604051: // focusReference
1850          this.focusReference = TypeConvertor.castToReference(value); // Reference
1851          return value;
1852        case -1406328437: // author
1853          this.getAuthor().add(TypeConvertor.castToReference(value)); // Reference
1854          return value;
1855        case 3556653: // text
1856          this.text = TypeConvertor.castToNarrative(value); // Narrative
1857          return value;
1858        case 3357091: // mode
1859          value = new ListModeEnumFactory().fromType(TypeConvertor.castToCode(value));
1860          this.mode = (Enumeration) value; // Enumeration<ListMode>
1861          return value;
1862        case -391079516: // orderedBy
1863          this.orderedBy = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1864          return value;
1865        case -948201421: // entryClassifier
1866          this.getEntryClassifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1867          return value;
1868        case 438810361: // entryReference
1869          this.getEntryReference().add(TypeConvertor.castToReference(value)); // Reference
1870          return value;
1871        case 1945583389: // entryQuantity
1872          this.getEntryQuantity().add(TypeConvertor.castToQuantity(value)); // Quantity
1873          return value;
1874        case 1140135409: // emptyReason
1875          this.emptyReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1876          return value;
1877        case 1970241253: // section
1878          this.getSection().add((SectionComponent) value); // SectionComponent
1879          return value;
1880        default: return super.setProperty(hash, name, value);
1881        }
1882
1883      }
1884
1885      @Override
1886      public Base setProperty(String name, Base value) throws FHIRException {
1887        if (name.equals("title")) {
1888          this.title = TypeConvertor.castToString(value); // StringType
1889        } else if (name.equals("focus")) {
1890          this.focus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1891        } else if (name.equals("focusReference")) {
1892          this.focusReference = TypeConvertor.castToReference(value); // Reference
1893        } else if (name.equals("author")) {
1894          this.getAuthor().add(TypeConvertor.castToReference(value));
1895        } else if (name.equals("text")) {
1896          this.text = TypeConvertor.castToNarrative(value); // Narrative
1897        } else if (name.equals("mode")) {
1898          value = new ListModeEnumFactory().fromType(TypeConvertor.castToCode(value));
1899          this.mode = (Enumeration) value; // Enumeration<ListMode>
1900        } else if (name.equals("orderedBy")) {
1901          this.orderedBy = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1902        } else if (name.equals("entryClassifier")) {
1903          this.getEntryClassifier().add(TypeConvertor.castToCodeableConcept(value));
1904        } else if (name.equals("entryReference")) {
1905          this.getEntryReference().add(TypeConvertor.castToReference(value));
1906        } else if (name.equals("entryQuantity")) {
1907          this.getEntryQuantity().add(TypeConvertor.castToQuantity(value));
1908        } else if (name.equals("emptyReason")) {
1909          this.emptyReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1910        } else if (name.equals("section")) {
1911          this.getSection().add((SectionComponent) value);
1912        } else
1913          return super.setProperty(name, value);
1914        return value;
1915      }
1916
1917      @Override
1918      public Base makeProperty(int hash, String name) throws FHIRException {
1919        switch (hash) {
1920        case 110371416:  return getTitleElement();
1921        case 97604824:  return getFocus();
1922        case 1823604051:  return getFocusReference();
1923        case -1406328437:  return addAuthor(); 
1924        case 3556653:  return getText();
1925        case 3357091:  return getModeElement();
1926        case -391079516:  return getOrderedBy();
1927        case -948201421:  return addEntryClassifier(); 
1928        case 438810361:  return addEntryReference(); 
1929        case 1945583389:  return addEntryQuantity(); 
1930        case 1140135409:  return getEmptyReason();
1931        case 1970241253:  return addSection(); 
1932        default: return super.makeProperty(hash, name);
1933        }
1934
1935      }
1936
1937      @Override
1938      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1939        switch (hash) {
1940        case 110371416: /*title*/ return new String[] {"string"};
1941        case 97604824: /*focus*/ return new String[] {"CodeableConcept"};
1942        case 1823604051: /*focusReference*/ return new String[] {"Reference"};
1943        case -1406328437: /*author*/ return new String[] {"Reference"};
1944        case 3556653: /*text*/ return new String[] {"Narrative"};
1945        case 3357091: /*mode*/ return new String[] {"code"};
1946        case -391079516: /*orderedBy*/ return new String[] {"CodeableConcept"};
1947        case -948201421: /*entryClassifier*/ return new String[] {"CodeableConcept"};
1948        case 438810361: /*entryReference*/ return new String[] {"Reference"};
1949        case 1945583389: /*entryQuantity*/ return new String[] {"Quantity"};
1950        case 1140135409: /*emptyReason*/ return new String[] {"CodeableConcept"};
1951        case 1970241253: /*section*/ return new String[] {"@EvidenceReport.section"};
1952        default: return super.getTypesForProperty(hash, name);
1953        }
1954
1955      }
1956
1957      @Override
1958      public Base addChild(String name) throws FHIRException {
1959        if (name.equals("title")) {
1960          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.section.title");
1961        }
1962        else if (name.equals("focus")) {
1963          this.focus = new CodeableConcept();
1964          return this.focus;
1965        }
1966        else if (name.equals("focusReference")) {
1967          this.focusReference = new Reference();
1968          return this.focusReference;
1969        }
1970        else if (name.equals("author")) {
1971          return addAuthor();
1972        }
1973        else if (name.equals("text")) {
1974          this.text = new Narrative();
1975          return this.text;
1976        }
1977        else if (name.equals("mode")) {
1978          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.section.mode");
1979        }
1980        else if (name.equals("orderedBy")) {
1981          this.orderedBy = new CodeableConcept();
1982          return this.orderedBy;
1983        }
1984        else if (name.equals("entryClassifier")) {
1985          return addEntryClassifier();
1986        }
1987        else if (name.equals("entryReference")) {
1988          return addEntryReference();
1989        }
1990        else if (name.equals("entryQuantity")) {
1991          return addEntryQuantity();
1992        }
1993        else if (name.equals("emptyReason")) {
1994          this.emptyReason = new CodeableConcept();
1995          return this.emptyReason;
1996        }
1997        else if (name.equals("section")) {
1998          return addSection();
1999        }
2000        else
2001          return super.addChild(name);
2002      }
2003
2004      public SectionComponent copy() {
2005        SectionComponent dst = new SectionComponent();
2006        copyValues(dst);
2007        return dst;
2008      }
2009
2010      public void copyValues(SectionComponent dst) {
2011        super.copyValues(dst);
2012        dst.title = title == null ? null : title.copy();
2013        dst.focus = focus == null ? null : focus.copy();
2014        dst.focusReference = focusReference == null ? null : focusReference.copy();
2015        if (author != null) {
2016          dst.author = new ArrayList<Reference>();
2017          for (Reference i : author)
2018            dst.author.add(i.copy());
2019        };
2020        dst.text = text == null ? null : text.copy();
2021        dst.mode = mode == null ? null : mode.copy();
2022        dst.orderedBy = orderedBy == null ? null : orderedBy.copy();
2023        if (entryClassifier != null) {
2024          dst.entryClassifier = new ArrayList<CodeableConcept>();
2025          for (CodeableConcept i : entryClassifier)
2026            dst.entryClassifier.add(i.copy());
2027        };
2028        if (entryReference != null) {
2029          dst.entryReference = new ArrayList<Reference>();
2030          for (Reference i : entryReference)
2031            dst.entryReference.add(i.copy());
2032        };
2033        if (entryQuantity != null) {
2034          dst.entryQuantity = new ArrayList<Quantity>();
2035          for (Quantity i : entryQuantity)
2036            dst.entryQuantity.add(i.copy());
2037        };
2038        dst.emptyReason = emptyReason == null ? null : emptyReason.copy();
2039        if (section != null) {
2040          dst.section = new ArrayList<SectionComponent>();
2041          for (SectionComponent i : section)
2042            dst.section.add(i.copy());
2043        };
2044      }
2045
2046      @Override
2047      public boolean equalsDeep(Base other_) {
2048        if (!super.equalsDeep(other_))
2049          return false;
2050        if (!(other_ instanceof SectionComponent))
2051          return false;
2052        SectionComponent o = (SectionComponent) other_;
2053        return compareDeep(title, o.title, true) && compareDeep(focus, o.focus, true) && compareDeep(focusReference, o.focusReference, true)
2054           && compareDeep(author, o.author, true) && compareDeep(text, o.text, true) && compareDeep(mode, o.mode, true)
2055           && compareDeep(orderedBy, o.orderedBy, true) && compareDeep(entryClassifier, o.entryClassifier, true)
2056           && compareDeep(entryReference, o.entryReference, true) && compareDeep(entryQuantity, o.entryQuantity, true)
2057           && compareDeep(emptyReason, o.emptyReason, true) && compareDeep(section, o.section, true);
2058      }
2059
2060      @Override
2061      public boolean equalsShallow(Base other_) {
2062        if (!super.equalsShallow(other_))
2063          return false;
2064        if (!(other_ instanceof SectionComponent))
2065          return false;
2066        SectionComponent o = (SectionComponent) other_;
2067        return compareValues(title, o.title, true) && compareValues(mode, o.mode, true);
2068      }
2069
2070      public boolean isEmpty() {
2071        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(title, focus, focusReference
2072          , author, text, mode, orderedBy, entryClassifier, entryReference, entryQuantity
2073          , emptyReason, section);
2074      }
2075
2076  public String fhirType() {
2077    return "EvidenceReport.section";
2078
2079  }
2080
2081  }
2082
2083    /**
2084     * An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
2085     */
2086    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
2087    @Description(shortDefinition="Canonical identifier for this EvidenceReport, represented as a globally unique URI", formalDefinition="An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers." )
2088    protected UriType url;
2089
2090    /**
2091     * The status of this summary. Enables tracking the life-cycle of the content.
2092     */
2093    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
2094    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this summary. Enables tracking the life-cycle of the content." )
2095    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
2096    protected Enumeration<PublicationStatus> status;
2097
2098    /**
2099     * 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 evidence report instances.
2100     */
2101    @Child(name = "useContext", type = {UsageContext.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2102    @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 evidence report instances." )
2103    protected List<UsageContext> useContext;
2104
2105    /**
2106     * A formal identifier that is used to identify this EvidenceReport when it is represented in other formats, or referenced in a specification, model, design or an instance.
2107     */
2108    @Child(name = "identifier", type = {Identifier.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2109    @Description(shortDefinition="Unique identifier for the evidence report", formalDefinition="A formal identifier that is used to identify this EvidenceReport when it is represented in other formats, or referenced in a specification, model, design or an instance." )
2110    protected List<Identifier> identifier;
2111
2112    /**
2113     * A formal identifier that is used to identify things closely related to this EvidenceReport.
2114     */
2115    @Child(name = "relatedIdentifier", type = {Identifier.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2116    @Description(shortDefinition="Identifiers for articles that may relate to more than one evidence report", formalDefinition="A formal identifier that is used to identify things closely related to this EvidenceReport." )
2117    protected List<Identifier> relatedIdentifier;
2118
2119    /**
2120     * Citation Resource or display of suggested citation for this report.
2121     */
2122    @Child(name = "citeAs", type = {Citation.class, MarkdownType.class}, order=5, min=0, max=1, modifier=false, summary=false)
2123    @Description(shortDefinition="Citation for this report", formalDefinition="Citation Resource or display of suggested citation for this report." )
2124    protected DataType citeAs;
2125
2126    /**
2127     * Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression.
2128     */
2129    @Child(name = "type", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=false)
2130    @Description(shortDefinition="Kind of report", formalDefinition="Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression." )
2131    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/evidence-report-type")
2132    protected CodeableConcept type;
2133
2134    /**
2135     * Used for footnotes and annotations.
2136     */
2137    @Child(name = "note", type = {Annotation.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2138    @Description(shortDefinition="Used for footnotes and annotations", formalDefinition="Used for footnotes and annotations." )
2139    protected List<Annotation> note;
2140
2141    /**
2142     * Link, description or reference to artifact associated with the report.
2143     */
2144    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2145    @Description(shortDefinition="Link, description or reference to artifact associated with the report", formalDefinition="Link, description or reference to artifact associated with the report." )
2146    protected List<RelatedArtifact> relatedArtifact;
2147
2148    /**
2149     * Specifies the subject or focus of the report. Answers "What is this report about?".
2150     */
2151    @Child(name = "subject", type = {}, order=9, min=1, max=1, modifier=false, summary=true)
2152    @Description(shortDefinition="Focus of the report", formalDefinition="Specifies the subject or focus of the report. Answers \"What is this report about?\"." )
2153    protected EvidenceReportSubjectComponent subject;
2154
2155    /**
2156     * The name of the organization or individual that published the evidence report.
2157     */
2158    @Child(name = "publisher", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=true)
2159    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the evidence report." )
2160    protected StringType publisher;
2161
2162    /**
2163     * Contact details to assist a user in finding and communicating with the publisher.
2164     */
2165    @Child(name = "contact", type = {ContactDetail.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2166    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
2167    protected List<ContactDetail> contact;
2168
2169    /**
2170     * An individiual, organization, or device primarily involved in the creation and maintenance of the content.
2171     */
2172    @Child(name = "author", type = {ContactDetail.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2173    @Description(shortDefinition="Who authored the content", formalDefinition="An individiual, organization, or device primarily involved in the creation and maintenance of the content." )
2174    protected List<ContactDetail> author;
2175
2176    /**
2177     * An individiual, organization, or device primarily responsible for internal coherence of the content.
2178     */
2179    @Child(name = "editor", type = {ContactDetail.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2180    @Description(shortDefinition="Who edited the content", formalDefinition="An individiual, organization, or device primarily responsible for internal coherence of the content." )
2181    protected List<ContactDetail> editor;
2182
2183    /**
2184     * An individiual, organization, or device primarily responsible for review of some aspect of the content.
2185     */
2186    @Child(name = "reviewer", type = {ContactDetail.class}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2187    @Description(shortDefinition="Who reviewed the content", formalDefinition="An individiual, organization, or device primarily responsible for review of some aspect of the content." )
2188    protected List<ContactDetail> reviewer;
2189
2190    /**
2191     * An individiual, organization, or device responsible for officially endorsing the content for use in some setting.
2192     */
2193    @Child(name = "endorser", type = {ContactDetail.class}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2194    @Description(shortDefinition="Who endorsed the content", formalDefinition="An individiual, organization, or device responsible for officially endorsing the content for use in some setting." )
2195    protected List<ContactDetail> endorser;
2196
2197    /**
2198     * Relationships that this composition has with other compositions or documents that already exist.
2199     */
2200    @Child(name = "relatesTo", type = {}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2201    @Description(shortDefinition="Relationships to other compositions/documents", formalDefinition="Relationships that this composition has with other compositions or documents that already exist." )
2202    protected List<EvidenceReportRelatesToComponent> relatesTo;
2203
2204    /**
2205     * The root of the sections that make up the composition.
2206     */
2207    @Child(name = "section", type = {}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2208    @Description(shortDefinition="Composition is broken into sections", formalDefinition="The root of the sections that make up the composition." )
2209    protected List<SectionComponent> section;
2210
2211    private static final long serialVersionUID = -1087028792L;
2212
2213  /**
2214   * Constructor
2215   */
2216    public EvidenceReport() {
2217      super();
2218    }
2219
2220  /**
2221   * Constructor
2222   */
2223    public EvidenceReport(PublicationStatus status, EvidenceReportSubjectComponent subject) {
2224      super();
2225      this.setStatus(status);
2226      this.setSubject(subject);
2227    }
2228
2229    /**
2230     * @return {@link #url} (An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2231     */
2232    public UriType getUrlElement() { 
2233      if (this.url == null)
2234        if (Configuration.errorOnAutoCreate())
2235          throw new Error("Attempt to auto-create EvidenceReport.url");
2236        else if (Configuration.doAutoCreate())
2237          this.url = new UriType(); // bb
2238      return this.url;
2239    }
2240
2241    public boolean hasUrlElement() { 
2242      return this.url != null && !this.url.isEmpty();
2243    }
2244
2245    public boolean hasUrl() { 
2246      return this.url != null && !this.url.isEmpty();
2247    }
2248
2249    /**
2250     * @param value {@link #url} (An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2251     */
2252    public EvidenceReport setUrlElement(UriType value) { 
2253      this.url = value;
2254      return this;
2255    }
2256
2257    /**
2258     * @return An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
2259     */
2260    public String getUrl() { 
2261      return this.url == null ? null : this.url.getValue();
2262    }
2263
2264    /**
2265     * @param value An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.
2266     */
2267    public EvidenceReport setUrl(String value) { 
2268      if (Utilities.noString(value))
2269        this.url = null;
2270      else {
2271        if (this.url == null)
2272          this.url = new UriType();
2273        this.url.setValue(value);
2274      }
2275      return this;
2276    }
2277
2278    /**
2279     * @return {@link #status} (The status of this summary. 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
2280     */
2281    public Enumeration<PublicationStatus> getStatusElement() { 
2282      if (this.status == null)
2283        if (Configuration.errorOnAutoCreate())
2284          throw new Error("Attempt to auto-create EvidenceReport.status");
2285        else if (Configuration.doAutoCreate())
2286          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2287      return this.status;
2288    }
2289
2290    public boolean hasStatusElement() { 
2291      return this.status != null && !this.status.isEmpty();
2292    }
2293
2294    public boolean hasStatus() { 
2295      return this.status != null && !this.status.isEmpty();
2296    }
2297
2298    /**
2299     * @param value {@link #status} (The status of this summary. 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
2300     */
2301    public EvidenceReport setStatusElement(Enumeration<PublicationStatus> value) { 
2302      this.status = value;
2303      return this;
2304    }
2305
2306    /**
2307     * @return The status of this summary. Enables tracking the life-cycle of the content.
2308     */
2309    public PublicationStatus getStatus() { 
2310      return this.status == null ? null : this.status.getValue();
2311    }
2312
2313    /**
2314     * @param value The status of this summary. Enables tracking the life-cycle of the content.
2315     */
2316    public EvidenceReport setStatus(PublicationStatus value) { 
2317        if (this.status == null)
2318          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2319        this.status.setValue(value);
2320      return this;
2321    }
2322
2323    /**
2324     * @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 evidence report instances.)
2325     */
2326    public List<UsageContext> getUseContext() { 
2327      if (this.useContext == null)
2328        this.useContext = new ArrayList<UsageContext>();
2329      return this.useContext;
2330    }
2331
2332    /**
2333     * @return Returns a reference to <code>this</code> for easy method chaining
2334     */
2335    public EvidenceReport setUseContext(List<UsageContext> theUseContext) { 
2336      this.useContext = theUseContext;
2337      return this;
2338    }
2339
2340    public boolean hasUseContext() { 
2341      if (this.useContext == null)
2342        return false;
2343      for (UsageContext item : this.useContext)
2344        if (!item.isEmpty())
2345          return true;
2346      return false;
2347    }
2348
2349    public UsageContext addUseContext() { //3
2350      UsageContext t = new UsageContext();
2351      if (this.useContext == null)
2352        this.useContext = new ArrayList<UsageContext>();
2353      this.useContext.add(t);
2354      return t;
2355    }
2356
2357    public EvidenceReport addUseContext(UsageContext t) { //3
2358      if (t == null)
2359        return this;
2360      if (this.useContext == null)
2361        this.useContext = new ArrayList<UsageContext>();
2362      this.useContext.add(t);
2363      return this;
2364    }
2365
2366    /**
2367     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
2368     */
2369    public UsageContext getUseContextFirstRep() { 
2370      if (getUseContext().isEmpty()) {
2371        addUseContext();
2372      }
2373      return getUseContext().get(0);
2374    }
2375
2376    /**
2377     * @return {@link #identifier} (A formal identifier that is used to identify this EvidenceReport when it is represented in other formats, or referenced in a specification, model, design or an instance.)
2378     */
2379    public List<Identifier> getIdentifier() { 
2380      if (this.identifier == null)
2381        this.identifier = new ArrayList<Identifier>();
2382      return this.identifier;
2383    }
2384
2385    /**
2386     * @return Returns a reference to <code>this</code> for easy method chaining
2387     */
2388    public EvidenceReport setIdentifier(List<Identifier> theIdentifier) { 
2389      this.identifier = theIdentifier;
2390      return this;
2391    }
2392
2393    public boolean hasIdentifier() { 
2394      if (this.identifier == null)
2395        return false;
2396      for (Identifier item : this.identifier)
2397        if (!item.isEmpty())
2398          return true;
2399      return false;
2400    }
2401
2402    public Identifier addIdentifier() { //3
2403      Identifier t = new Identifier();
2404      if (this.identifier == null)
2405        this.identifier = new ArrayList<Identifier>();
2406      this.identifier.add(t);
2407      return t;
2408    }
2409
2410    public EvidenceReport addIdentifier(Identifier t) { //3
2411      if (t == null)
2412        return this;
2413      if (this.identifier == null)
2414        this.identifier = new ArrayList<Identifier>();
2415      this.identifier.add(t);
2416      return this;
2417    }
2418
2419    /**
2420     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2421     */
2422    public Identifier getIdentifierFirstRep() { 
2423      if (getIdentifier().isEmpty()) {
2424        addIdentifier();
2425      }
2426      return getIdentifier().get(0);
2427    }
2428
2429    /**
2430     * @return {@link #relatedIdentifier} (A formal identifier that is used to identify things closely related to this EvidenceReport.)
2431     */
2432    public List<Identifier> getRelatedIdentifier() { 
2433      if (this.relatedIdentifier == null)
2434        this.relatedIdentifier = new ArrayList<Identifier>();
2435      return this.relatedIdentifier;
2436    }
2437
2438    /**
2439     * @return Returns a reference to <code>this</code> for easy method chaining
2440     */
2441    public EvidenceReport setRelatedIdentifier(List<Identifier> theRelatedIdentifier) { 
2442      this.relatedIdentifier = theRelatedIdentifier;
2443      return this;
2444    }
2445
2446    public boolean hasRelatedIdentifier() { 
2447      if (this.relatedIdentifier == null)
2448        return false;
2449      for (Identifier item : this.relatedIdentifier)
2450        if (!item.isEmpty())
2451          return true;
2452      return false;
2453    }
2454
2455    public Identifier addRelatedIdentifier() { //3
2456      Identifier t = new Identifier();
2457      if (this.relatedIdentifier == null)
2458        this.relatedIdentifier = new ArrayList<Identifier>();
2459      this.relatedIdentifier.add(t);
2460      return t;
2461    }
2462
2463    public EvidenceReport addRelatedIdentifier(Identifier t) { //3
2464      if (t == null)
2465        return this;
2466      if (this.relatedIdentifier == null)
2467        this.relatedIdentifier = new ArrayList<Identifier>();
2468      this.relatedIdentifier.add(t);
2469      return this;
2470    }
2471
2472    /**
2473     * @return The first repetition of repeating field {@link #relatedIdentifier}, creating it if it does not already exist {3}
2474     */
2475    public Identifier getRelatedIdentifierFirstRep() { 
2476      if (getRelatedIdentifier().isEmpty()) {
2477        addRelatedIdentifier();
2478      }
2479      return getRelatedIdentifier().get(0);
2480    }
2481
2482    /**
2483     * @return {@link #citeAs} (Citation Resource or display of suggested citation for this report.)
2484     */
2485    public DataType getCiteAs() { 
2486      return this.citeAs;
2487    }
2488
2489    /**
2490     * @return {@link #citeAs} (Citation Resource or display of suggested citation for this report.)
2491     */
2492    public Reference getCiteAsReference() throws FHIRException { 
2493      if (this.citeAs == null)
2494        this.citeAs = new Reference();
2495      if (!(this.citeAs instanceof Reference))
2496        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.citeAs.getClass().getName()+" was encountered");
2497      return (Reference) this.citeAs;
2498    }
2499
2500    public boolean hasCiteAsReference() { 
2501      return this != null && this.citeAs instanceof Reference;
2502    }
2503
2504    /**
2505     * @return {@link #citeAs} (Citation Resource or display of suggested citation for this report.)
2506     */
2507    public MarkdownType getCiteAsMarkdownType() throws FHIRException { 
2508      if (this.citeAs == null)
2509        this.citeAs = new MarkdownType();
2510      if (!(this.citeAs instanceof MarkdownType))
2511        throw new FHIRException("Type mismatch: the type MarkdownType was expected, but "+this.citeAs.getClass().getName()+" was encountered");
2512      return (MarkdownType) this.citeAs;
2513    }
2514
2515    public boolean hasCiteAsMarkdownType() { 
2516      return this != null && this.citeAs instanceof MarkdownType;
2517    }
2518
2519    public boolean hasCiteAs() { 
2520      return this.citeAs != null && !this.citeAs.isEmpty();
2521    }
2522
2523    /**
2524     * @param value {@link #citeAs} (Citation Resource or display of suggested citation for this report.)
2525     */
2526    public EvidenceReport setCiteAs(DataType value) { 
2527      if (value != null && !(value instanceof Reference || value instanceof MarkdownType))
2528        throw new Error("Not the right type for EvidenceReport.citeAs[x]: "+value.fhirType());
2529      this.citeAs = value;
2530      return this;
2531    }
2532
2533    /**
2534     * @return {@link #type} (Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression.)
2535     */
2536    public CodeableConcept getType() { 
2537      if (this.type == null)
2538        if (Configuration.errorOnAutoCreate())
2539          throw new Error("Attempt to auto-create EvidenceReport.type");
2540        else if (Configuration.doAutoCreate())
2541          this.type = new CodeableConcept(); // cc
2542      return this.type;
2543    }
2544
2545    public boolean hasType() { 
2546      return this.type != null && !this.type.isEmpty();
2547    }
2548
2549    /**
2550     * @param value {@link #type} (Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression.)
2551     */
2552    public EvidenceReport setType(CodeableConcept value) { 
2553      this.type = value;
2554      return this;
2555    }
2556
2557    /**
2558     * @return {@link #note} (Used for footnotes and annotations.)
2559     */
2560    public List<Annotation> getNote() { 
2561      if (this.note == null)
2562        this.note = new ArrayList<Annotation>();
2563      return this.note;
2564    }
2565
2566    /**
2567     * @return Returns a reference to <code>this</code> for easy method chaining
2568     */
2569    public EvidenceReport setNote(List<Annotation> theNote) { 
2570      this.note = theNote;
2571      return this;
2572    }
2573
2574    public boolean hasNote() { 
2575      if (this.note == null)
2576        return false;
2577      for (Annotation item : this.note)
2578        if (!item.isEmpty())
2579          return true;
2580      return false;
2581    }
2582
2583    public Annotation addNote() { //3
2584      Annotation t = new Annotation();
2585      if (this.note == null)
2586        this.note = new ArrayList<Annotation>();
2587      this.note.add(t);
2588      return t;
2589    }
2590
2591    public EvidenceReport addNote(Annotation t) { //3
2592      if (t == null)
2593        return this;
2594      if (this.note == null)
2595        this.note = new ArrayList<Annotation>();
2596      this.note.add(t);
2597      return this;
2598    }
2599
2600    /**
2601     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
2602     */
2603    public Annotation getNoteFirstRep() { 
2604      if (getNote().isEmpty()) {
2605        addNote();
2606      }
2607      return getNote().get(0);
2608    }
2609
2610    /**
2611     * @return {@link #relatedArtifact} (Link, description or reference to artifact associated with the report.)
2612     */
2613    public List<RelatedArtifact> getRelatedArtifact() { 
2614      if (this.relatedArtifact == null)
2615        this.relatedArtifact = new ArrayList<RelatedArtifact>();
2616      return this.relatedArtifact;
2617    }
2618
2619    /**
2620     * @return Returns a reference to <code>this</code> for easy method chaining
2621     */
2622    public EvidenceReport setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
2623      this.relatedArtifact = theRelatedArtifact;
2624      return this;
2625    }
2626
2627    public boolean hasRelatedArtifact() { 
2628      if (this.relatedArtifact == null)
2629        return false;
2630      for (RelatedArtifact item : this.relatedArtifact)
2631        if (!item.isEmpty())
2632          return true;
2633      return false;
2634    }
2635
2636    public RelatedArtifact addRelatedArtifact() { //3
2637      RelatedArtifact t = new RelatedArtifact();
2638      if (this.relatedArtifact == null)
2639        this.relatedArtifact = new ArrayList<RelatedArtifact>();
2640      this.relatedArtifact.add(t);
2641      return t;
2642    }
2643
2644    public EvidenceReport addRelatedArtifact(RelatedArtifact t) { //3
2645      if (t == null)
2646        return this;
2647      if (this.relatedArtifact == null)
2648        this.relatedArtifact = new ArrayList<RelatedArtifact>();
2649      this.relatedArtifact.add(t);
2650      return this;
2651    }
2652
2653    /**
2654     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
2655     */
2656    public RelatedArtifact getRelatedArtifactFirstRep() { 
2657      if (getRelatedArtifact().isEmpty()) {
2658        addRelatedArtifact();
2659      }
2660      return getRelatedArtifact().get(0);
2661    }
2662
2663    /**
2664     * @return {@link #subject} (Specifies the subject or focus of the report. Answers "What is this report about?".)
2665     */
2666    public EvidenceReportSubjectComponent getSubject() { 
2667      if (this.subject == null)
2668        if (Configuration.errorOnAutoCreate())
2669          throw new Error("Attempt to auto-create EvidenceReport.subject");
2670        else if (Configuration.doAutoCreate())
2671          this.subject = new EvidenceReportSubjectComponent(); // cc
2672      return this.subject;
2673    }
2674
2675    public boolean hasSubject() { 
2676      return this.subject != null && !this.subject.isEmpty();
2677    }
2678
2679    /**
2680     * @param value {@link #subject} (Specifies the subject or focus of the report. Answers "What is this report about?".)
2681     */
2682    public EvidenceReport setSubject(EvidenceReportSubjectComponent value) { 
2683      this.subject = value;
2684      return this;
2685    }
2686
2687    /**
2688     * @return {@link #publisher} (The name of the organization or individual that published the evidence report.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2689     */
2690    public StringType getPublisherElement() { 
2691      if (this.publisher == null)
2692        if (Configuration.errorOnAutoCreate())
2693          throw new Error("Attempt to auto-create EvidenceReport.publisher");
2694        else if (Configuration.doAutoCreate())
2695          this.publisher = new StringType(); // bb
2696      return this.publisher;
2697    }
2698
2699    public boolean hasPublisherElement() { 
2700      return this.publisher != null && !this.publisher.isEmpty();
2701    }
2702
2703    public boolean hasPublisher() { 
2704      return this.publisher != null && !this.publisher.isEmpty();
2705    }
2706
2707    /**
2708     * @param value {@link #publisher} (The name of the organization or individual that published the evidence report.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2709     */
2710    public EvidenceReport setPublisherElement(StringType value) { 
2711      this.publisher = value;
2712      return this;
2713    }
2714
2715    /**
2716     * @return The name of the organization or individual that published the evidence report.
2717     */
2718    public String getPublisher() { 
2719      return this.publisher == null ? null : this.publisher.getValue();
2720    }
2721
2722    /**
2723     * @param value The name of the organization or individual that published the evidence report.
2724     */
2725    public EvidenceReport setPublisher(String value) { 
2726      if (Utilities.noString(value))
2727        this.publisher = null;
2728      else {
2729        if (this.publisher == null)
2730          this.publisher = new StringType();
2731        this.publisher.setValue(value);
2732      }
2733      return this;
2734    }
2735
2736    /**
2737     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2738     */
2739    public List<ContactDetail> getContact() { 
2740      if (this.contact == null)
2741        this.contact = new ArrayList<ContactDetail>();
2742      return this.contact;
2743    }
2744
2745    /**
2746     * @return Returns a reference to <code>this</code> for easy method chaining
2747     */
2748    public EvidenceReport setContact(List<ContactDetail> theContact) { 
2749      this.contact = theContact;
2750      return this;
2751    }
2752
2753    public boolean hasContact() { 
2754      if (this.contact == null)
2755        return false;
2756      for (ContactDetail item : this.contact)
2757        if (!item.isEmpty())
2758          return true;
2759      return false;
2760    }
2761
2762    public ContactDetail addContact() { //3
2763      ContactDetail t = new ContactDetail();
2764      if (this.contact == null)
2765        this.contact = new ArrayList<ContactDetail>();
2766      this.contact.add(t);
2767      return t;
2768    }
2769
2770    public EvidenceReport addContact(ContactDetail t) { //3
2771      if (t == null)
2772        return this;
2773      if (this.contact == null)
2774        this.contact = new ArrayList<ContactDetail>();
2775      this.contact.add(t);
2776      return this;
2777    }
2778
2779    /**
2780     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
2781     */
2782    public ContactDetail getContactFirstRep() { 
2783      if (getContact().isEmpty()) {
2784        addContact();
2785      }
2786      return getContact().get(0);
2787    }
2788
2789    /**
2790     * @return {@link #author} (An individiual, organization, or device primarily involved in the creation and maintenance of the content.)
2791     */
2792    public List<ContactDetail> getAuthor() { 
2793      if (this.author == null)
2794        this.author = new ArrayList<ContactDetail>();
2795      return this.author;
2796    }
2797
2798    /**
2799     * @return Returns a reference to <code>this</code> for easy method chaining
2800     */
2801    public EvidenceReport setAuthor(List<ContactDetail> theAuthor) { 
2802      this.author = theAuthor;
2803      return this;
2804    }
2805
2806    public boolean hasAuthor() { 
2807      if (this.author == null)
2808        return false;
2809      for (ContactDetail item : this.author)
2810        if (!item.isEmpty())
2811          return true;
2812      return false;
2813    }
2814
2815    public ContactDetail addAuthor() { //3
2816      ContactDetail t = new ContactDetail();
2817      if (this.author == null)
2818        this.author = new ArrayList<ContactDetail>();
2819      this.author.add(t);
2820      return t;
2821    }
2822
2823    public EvidenceReport addAuthor(ContactDetail t) { //3
2824      if (t == null)
2825        return this;
2826      if (this.author == null)
2827        this.author = new ArrayList<ContactDetail>();
2828      this.author.add(t);
2829      return this;
2830    }
2831
2832    /**
2833     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
2834     */
2835    public ContactDetail getAuthorFirstRep() { 
2836      if (getAuthor().isEmpty()) {
2837        addAuthor();
2838      }
2839      return getAuthor().get(0);
2840    }
2841
2842    /**
2843     * @return {@link #editor} (An individiual, organization, or device primarily responsible for internal coherence of the content.)
2844     */
2845    public List<ContactDetail> getEditor() { 
2846      if (this.editor == null)
2847        this.editor = new ArrayList<ContactDetail>();
2848      return this.editor;
2849    }
2850
2851    /**
2852     * @return Returns a reference to <code>this</code> for easy method chaining
2853     */
2854    public EvidenceReport setEditor(List<ContactDetail> theEditor) { 
2855      this.editor = theEditor;
2856      return this;
2857    }
2858
2859    public boolean hasEditor() { 
2860      if (this.editor == null)
2861        return false;
2862      for (ContactDetail item : this.editor)
2863        if (!item.isEmpty())
2864          return true;
2865      return false;
2866    }
2867
2868    public ContactDetail addEditor() { //3
2869      ContactDetail t = new ContactDetail();
2870      if (this.editor == null)
2871        this.editor = new ArrayList<ContactDetail>();
2872      this.editor.add(t);
2873      return t;
2874    }
2875
2876    public EvidenceReport addEditor(ContactDetail t) { //3
2877      if (t == null)
2878        return this;
2879      if (this.editor == null)
2880        this.editor = new ArrayList<ContactDetail>();
2881      this.editor.add(t);
2882      return this;
2883    }
2884
2885    /**
2886     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {3}
2887     */
2888    public ContactDetail getEditorFirstRep() { 
2889      if (getEditor().isEmpty()) {
2890        addEditor();
2891      }
2892      return getEditor().get(0);
2893    }
2894
2895    /**
2896     * @return {@link #reviewer} (An individiual, organization, or device primarily responsible for review of some aspect of the content.)
2897     */
2898    public List<ContactDetail> getReviewer() { 
2899      if (this.reviewer == null)
2900        this.reviewer = new ArrayList<ContactDetail>();
2901      return this.reviewer;
2902    }
2903
2904    /**
2905     * @return Returns a reference to <code>this</code> for easy method chaining
2906     */
2907    public EvidenceReport setReviewer(List<ContactDetail> theReviewer) { 
2908      this.reviewer = theReviewer;
2909      return this;
2910    }
2911
2912    public boolean hasReviewer() { 
2913      if (this.reviewer == null)
2914        return false;
2915      for (ContactDetail item : this.reviewer)
2916        if (!item.isEmpty())
2917          return true;
2918      return false;
2919    }
2920
2921    public ContactDetail addReviewer() { //3
2922      ContactDetail t = new ContactDetail();
2923      if (this.reviewer == null)
2924        this.reviewer = new ArrayList<ContactDetail>();
2925      this.reviewer.add(t);
2926      return t;
2927    }
2928
2929    public EvidenceReport addReviewer(ContactDetail t) { //3
2930      if (t == null)
2931        return this;
2932      if (this.reviewer == null)
2933        this.reviewer = new ArrayList<ContactDetail>();
2934      this.reviewer.add(t);
2935      return this;
2936    }
2937
2938    /**
2939     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {3}
2940     */
2941    public ContactDetail getReviewerFirstRep() { 
2942      if (getReviewer().isEmpty()) {
2943        addReviewer();
2944      }
2945      return getReviewer().get(0);
2946    }
2947
2948    /**
2949     * @return {@link #endorser} (An individiual, organization, or device responsible for officially endorsing the content for use in some setting.)
2950     */
2951    public List<ContactDetail> getEndorser() { 
2952      if (this.endorser == null)
2953        this.endorser = new ArrayList<ContactDetail>();
2954      return this.endorser;
2955    }
2956
2957    /**
2958     * @return Returns a reference to <code>this</code> for easy method chaining
2959     */
2960    public EvidenceReport setEndorser(List<ContactDetail> theEndorser) { 
2961      this.endorser = theEndorser;
2962      return this;
2963    }
2964
2965    public boolean hasEndorser() { 
2966      if (this.endorser == null)
2967        return false;
2968      for (ContactDetail item : this.endorser)
2969        if (!item.isEmpty())
2970          return true;
2971      return false;
2972    }
2973
2974    public ContactDetail addEndorser() { //3
2975      ContactDetail t = new ContactDetail();
2976      if (this.endorser == null)
2977        this.endorser = new ArrayList<ContactDetail>();
2978      this.endorser.add(t);
2979      return t;
2980    }
2981
2982    public EvidenceReport addEndorser(ContactDetail t) { //3
2983      if (t == null)
2984        return this;
2985      if (this.endorser == null)
2986        this.endorser = new ArrayList<ContactDetail>();
2987      this.endorser.add(t);
2988      return this;
2989    }
2990
2991    /**
2992     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {3}
2993     */
2994    public ContactDetail getEndorserFirstRep() { 
2995      if (getEndorser().isEmpty()) {
2996        addEndorser();
2997      }
2998      return getEndorser().get(0);
2999    }
3000
3001    /**
3002     * @return {@link #relatesTo} (Relationships that this composition has with other compositions or documents that already exist.)
3003     */
3004    public List<EvidenceReportRelatesToComponent> getRelatesTo() { 
3005      if (this.relatesTo == null)
3006        this.relatesTo = new ArrayList<EvidenceReportRelatesToComponent>();
3007      return this.relatesTo;
3008    }
3009
3010    /**
3011     * @return Returns a reference to <code>this</code> for easy method chaining
3012     */
3013    public EvidenceReport setRelatesTo(List<EvidenceReportRelatesToComponent> theRelatesTo) { 
3014      this.relatesTo = theRelatesTo;
3015      return this;
3016    }
3017
3018    public boolean hasRelatesTo() { 
3019      if (this.relatesTo == null)
3020        return false;
3021      for (EvidenceReportRelatesToComponent item : this.relatesTo)
3022        if (!item.isEmpty())
3023          return true;
3024      return false;
3025    }
3026
3027    public EvidenceReportRelatesToComponent addRelatesTo() { //3
3028      EvidenceReportRelatesToComponent t = new EvidenceReportRelatesToComponent();
3029      if (this.relatesTo == null)
3030        this.relatesTo = new ArrayList<EvidenceReportRelatesToComponent>();
3031      this.relatesTo.add(t);
3032      return t;
3033    }
3034
3035    public EvidenceReport addRelatesTo(EvidenceReportRelatesToComponent t) { //3
3036      if (t == null)
3037        return this;
3038      if (this.relatesTo == null)
3039        this.relatesTo = new ArrayList<EvidenceReportRelatesToComponent>();
3040      this.relatesTo.add(t);
3041      return this;
3042    }
3043
3044    /**
3045     * @return The first repetition of repeating field {@link #relatesTo}, creating it if it does not already exist {3}
3046     */
3047    public EvidenceReportRelatesToComponent getRelatesToFirstRep() { 
3048      if (getRelatesTo().isEmpty()) {
3049        addRelatesTo();
3050      }
3051      return getRelatesTo().get(0);
3052    }
3053
3054    /**
3055     * @return {@link #section} (The root of the sections that make up the composition.)
3056     */
3057    public List<SectionComponent> getSection() { 
3058      if (this.section == null)
3059        this.section = new ArrayList<SectionComponent>();
3060      return this.section;
3061    }
3062
3063    /**
3064     * @return Returns a reference to <code>this</code> for easy method chaining
3065     */
3066    public EvidenceReport setSection(List<SectionComponent> theSection) { 
3067      this.section = theSection;
3068      return this;
3069    }
3070
3071    public boolean hasSection() { 
3072      if (this.section == null)
3073        return false;
3074      for (SectionComponent item : this.section)
3075        if (!item.isEmpty())
3076          return true;
3077      return false;
3078    }
3079
3080    public SectionComponent addSection() { //3
3081      SectionComponent t = new SectionComponent();
3082      if (this.section == null)
3083        this.section = new ArrayList<SectionComponent>();
3084      this.section.add(t);
3085      return t;
3086    }
3087
3088    public EvidenceReport addSection(SectionComponent t) { //3
3089      if (t == null)
3090        return this;
3091      if (this.section == null)
3092        this.section = new ArrayList<SectionComponent>();
3093      this.section.add(t);
3094      return this;
3095    }
3096
3097    /**
3098     * @return The first repetition of repeating field {@link #section}, creating it if it does not already exist {3}
3099     */
3100    public SectionComponent getSectionFirstRep() { 
3101      if (getSection().isEmpty()) {
3102        addSection();
3103      }
3104      return getSection().get(0);
3105    }
3106
3107      protected void listChildren(List<Property> children) {
3108        super.listChildren(children);
3109        children.add(new Property("url", "uri", "An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.", 0, 1, url));
3110        children.add(new Property("status", "code", "The status of this summary. Enables tracking the life-cycle of the content.", 0, 1, status));
3111        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 evidence report instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
3112        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this EvidenceReport when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
3113        children.add(new Property("relatedIdentifier", "Identifier", "A formal identifier that is used to identify things closely related to this EvidenceReport.", 0, java.lang.Integer.MAX_VALUE, relatedIdentifier));
3114        children.add(new Property("citeAs[x]", "Reference(Citation)|markdown", "Citation Resource or display of suggested citation for this report.", 0, 1, citeAs));
3115        children.add(new Property("type", "CodeableConcept", "Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression.", 0, 1, type));
3116        children.add(new Property("note", "Annotation", "Used for footnotes and annotations.", 0, java.lang.Integer.MAX_VALUE, note));
3117        children.add(new Property("relatedArtifact", "RelatedArtifact", "Link, description or reference to artifact associated with the report.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
3118        children.add(new Property("subject", "", "Specifies the subject or focus of the report. Answers \"What is this report about?\".", 0, 1, subject));
3119        children.add(new Property("publisher", "string", "The name of the organization or individual that published the evidence report.", 0, 1, publisher));
3120        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));
3121        children.add(new Property("author", "ContactDetail", "An individiual, organization, or device primarily involved in the creation and maintenance of the content.", 0, java.lang.Integer.MAX_VALUE, author));
3122        children.add(new Property("editor", "ContactDetail", "An individiual, organization, or device primarily responsible for internal coherence of the content.", 0, java.lang.Integer.MAX_VALUE, editor));
3123        children.add(new Property("reviewer", "ContactDetail", "An individiual, organization, or device primarily responsible for review of some aspect of the content.", 0, java.lang.Integer.MAX_VALUE, reviewer));
3124        children.add(new Property("endorser", "ContactDetail", "An individiual, organization, or device responsible for officially endorsing the content for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser));
3125        children.add(new Property("relatesTo", "", "Relationships that this composition has with other compositions or documents that already exist.", 0, java.lang.Integer.MAX_VALUE, relatesTo));
3126        children.add(new Property("section", "", "The root of the sections that make up the composition.", 0, java.lang.Integer.MAX_VALUE, section));
3127      }
3128
3129      @Override
3130      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3131        switch (_hash) {
3132        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this EvidenceReport 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 summary is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the summary is stored on different servers.", 0, 1, url);
3133        case -892481550: /*status*/  return new Property("status", "code", "The status of this summary. Enables tracking the life-cycle of the content.", 0, 1, status);
3134        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 evidence report instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
3135        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this EvidenceReport when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
3136        case -1007604940: /*relatedIdentifier*/  return new Property("relatedIdentifier", "Identifier", "A formal identifier that is used to identify things closely related to this EvidenceReport.", 0, java.lang.Integer.MAX_VALUE, relatedIdentifier);
3137        case -1706539017: /*citeAs[x]*/  return new Property("citeAs[x]", "Reference(Citation)|markdown", "Citation Resource or display of suggested citation for this report.", 0, 1, citeAs);
3138        case -1360156695: /*citeAs*/  return new Property("citeAs[x]", "Reference(Citation)|markdown", "Citation Resource or display of suggested citation for this report.", 0, 1, citeAs);
3139        case 1269009762: /*citeAsReference*/  return new Property("citeAs[x]", "Reference(Citation)", "Citation Resource or display of suggested citation for this report.", 0, 1, citeAs);
3140        case 456265720: /*citeAsMarkdown*/  return new Property("citeAs[x]", "markdown", "Citation Resource or display of suggested citation for this report.", 0, 1, citeAs);
3141        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Specifies the kind of report, such as grouping of classifiers, search results, or human-compiled expression.", 0, 1, type);
3142        case 3387378: /*note*/  return new Property("note", "Annotation", "Used for footnotes and annotations.", 0, java.lang.Integer.MAX_VALUE, note);
3143        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Link, description or reference to artifact associated with the report.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
3144        case -1867885268: /*subject*/  return new Property("subject", "", "Specifies the subject or focus of the report. Answers \"What is this report about?\".", 0, 1, subject);
3145        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the evidence report.", 0, 1, publisher);
3146        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);
3147        case -1406328437: /*author*/  return new Property("author", "ContactDetail", "An individiual, organization, or device primarily involved in the creation and maintenance of the content.", 0, java.lang.Integer.MAX_VALUE, author);
3148        case -1307827859: /*editor*/  return new Property("editor", "ContactDetail", "An individiual, organization, or device primarily responsible for internal coherence of the content.", 0, java.lang.Integer.MAX_VALUE, editor);
3149        case -261190139: /*reviewer*/  return new Property("reviewer", "ContactDetail", "An individiual, organization, or device primarily responsible for review of some aspect of the content.", 0, java.lang.Integer.MAX_VALUE, reviewer);
3150        case 1740277666: /*endorser*/  return new Property("endorser", "ContactDetail", "An individiual, organization, or device responsible for officially endorsing the content for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser);
3151        case -7765931: /*relatesTo*/  return new Property("relatesTo", "", "Relationships that this composition has with other compositions or documents that already exist.", 0, java.lang.Integer.MAX_VALUE, relatesTo);
3152        case 1970241253: /*section*/  return new Property("section", "", "The root of the sections that make up the composition.", 0, java.lang.Integer.MAX_VALUE, section);
3153        default: return super.getNamedProperty(_hash, _name, _checkValid);
3154        }
3155
3156      }
3157
3158      @Override
3159      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3160        switch (hash) {
3161        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
3162        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3163        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
3164        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3165        case -1007604940: /*relatedIdentifier*/ return this.relatedIdentifier == null ? new Base[0] : this.relatedIdentifier.toArray(new Base[this.relatedIdentifier.size()]); // Identifier
3166        case -1360156695: /*citeAs*/ return this.citeAs == null ? new Base[0] : new Base[] {this.citeAs}; // DataType
3167        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
3168        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
3169        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
3170        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // EvidenceReportSubjectComponent
3171        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
3172        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
3173        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
3174        case -1307827859: /*editor*/ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
3175        case -261190139: /*reviewer*/ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
3176        case 1740277666: /*endorser*/ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
3177        case -7765931: /*relatesTo*/ return this.relatesTo == null ? new Base[0] : this.relatesTo.toArray(new Base[this.relatesTo.size()]); // EvidenceReportRelatesToComponent
3178        case 1970241253: /*section*/ return this.section == null ? new Base[0] : this.section.toArray(new Base[this.section.size()]); // SectionComponent
3179        default: return super.getProperty(hash, name, checkValid);
3180        }
3181
3182      }
3183
3184      @Override
3185      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3186        switch (hash) {
3187        case 116079: // url
3188          this.url = TypeConvertor.castToUri(value); // UriType
3189          return value;
3190        case -892481550: // status
3191          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3192          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3193          return value;
3194        case -669707736: // useContext
3195          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
3196          return value;
3197        case -1618432855: // identifier
3198          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3199          return value;
3200        case -1007604940: // relatedIdentifier
3201          this.getRelatedIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3202          return value;
3203        case -1360156695: // citeAs
3204          this.citeAs = TypeConvertor.castToType(value); // DataType
3205          return value;
3206        case 3575610: // type
3207          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3208          return value;
3209        case 3387378: // note
3210          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
3211          return value;
3212        case 666807069: // relatedArtifact
3213          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
3214          return value;
3215        case -1867885268: // subject
3216          this.subject = (EvidenceReportSubjectComponent) value; // EvidenceReportSubjectComponent
3217          return value;
3218        case 1447404028: // publisher
3219          this.publisher = TypeConvertor.castToString(value); // StringType
3220          return value;
3221        case 951526432: // contact
3222          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3223          return value;
3224        case -1406328437: // author
3225          this.getAuthor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3226          return value;
3227        case -1307827859: // editor
3228          this.getEditor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3229          return value;
3230        case -261190139: // reviewer
3231          this.getReviewer().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3232          return value;
3233        case 1740277666: // endorser
3234          this.getEndorser().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
3235          return value;
3236        case -7765931: // relatesTo
3237          this.getRelatesTo().add((EvidenceReportRelatesToComponent) value); // EvidenceReportRelatesToComponent
3238          return value;
3239        case 1970241253: // section
3240          this.getSection().add((SectionComponent) value); // SectionComponent
3241          return value;
3242        default: return super.setProperty(hash, name, value);
3243        }
3244
3245      }
3246
3247      @Override
3248      public Base setProperty(String name, Base value) throws FHIRException {
3249        if (name.equals("url")) {
3250          this.url = TypeConvertor.castToUri(value); // UriType
3251        } else if (name.equals("status")) {
3252          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3253          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3254        } else if (name.equals("useContext")) {
3255          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
3256        } else if (name.equals("identifier")) {
3257          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3258        } else if (name.equals("relatedIdentifier")) {
3259          this.getRelatedIdentifier().add(TypeConvertor.castToIdentifier(value));
3260        } else if (name.equals("citeAs[x]")) {
3261          this.citeAs = TypeConvertor.castToType(value); // DataType
3262        } else if (name.equals("type")) {
3263          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3264        } else if (name.equals("note")) {
3265          this.getNote().add(TypeConvertor.castToAnnotation(value));
3266        } else if (name.equals("relatedArtifact")) {
3267          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
3268        } else if (name.equals("subject")) {
3269          this.subject = (EvidenceReportSubjectComponent) value; // EvidenceReportSubjectComponent
3270        } else if (name.equals("publisher")) {
3271          this.publisher = TypeConvertor.castToString(value); // StringType
3272        } else if (name.equals("contact")) {
3273          this.getContact().add(TypeConvertor.castToContactDetail(value));
3274        } else if (name.equals("author")) {
3275          this.getAuthor().add(TypeConvertor.castToContactDetail(value));
3276        } else if (name.equals("editor")) {
3277          this.getEditor().add(TypeConvertor.castToContactDetail(value));
3278        } else if (name.equals("reviewer")) {
3279          this.getReviewer().add(TypeConvertor.castToContactDetail(value));
3280        } else if (name.equals("endorser")) {
3281          this.getEndorser().add(TypeConvertor.castToContactDetail(value));
3282        } else if (name.equals("relatesTo")) {
3283          this.getRelatesTo().add((EvidenceReportRelatesToComponent) value);
3284        } else if (name.equals("section")) {
3285          this.getSection().add((SectionComponent) value);
3286        } else
3287          return super.setProperty(name, value);
3288        return value;
3289      }
3290
3291      @Override
3292      public Base makeProperty(int hash, String name) throws FHIRException {
3293        switch (hash) {
3294        case 116079:  return getUrlElement();
3295        case -892481550:  return getStatusElement();
3296        case -669707736:  return addUseContext(); 
3297        case -1618432855:  return addIdentifier(); 
3298        case -1007604940:  return addRelatedIdentifier(); 
3299        case -1706539017:  return getCiteAs();
3300        case -1360156695:  return getCiteAs();
3301        case 3575610:  return getType();
3302        case 3387378:  return addNote(); 
3303        case 666807069:  return addRelatedArtifact(); 
3304        case -1867885268:  return getSubject();
3305        case 1447404028:  return getPublisherElement();
3306        case 951526432:  return addContact(); 
3307        case -1406328437:  return addAuthor(); 
3308        case -1307827859:  return addEditor(); 
3309        case -261190139:  return addReviewer(); 
3310        case 1740277666:  return addEndorser(); 
3311        case -7765931:  return addRelatesTo(); 
3312        case 1970241253:  return addSection(); 
3313        default: return super.makeProperty(hash, name);
3314        }
3315
3316      }
3317
3318      @Override
3319      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3320        switch (hash) {
3321        case 116079: /*url*/ return new String[] {"uri"};
3322        case -892481550: /*status*/ return new String[] {"code"};
3323        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3324        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3325        case -1007604940: /*relatedIdentifier*/ return new String[] {"Identifier"};
3326        case -1360156695: /*citeAs*/ return new String[] {"Reference", "markdown"};
3327        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3328        case 3387378: /*note*/ return new String[] {"Annotation"};
3329        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
3330        case -1867885268: /*subject*/ return new String[] {};
3331        case 1447404028: /*publisher*/ return new String[] {"string"};
3332        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3333        case -1406328437: /*author*/ return new String[] {"ContactDetail"};
3334        case -1307827859: /*editor*/ return new String[] {"ContactDetail"};
3335        case -261190139: /*reviewer*/ return new String[] {"ContactDetail"};
3336        case 1740277666: /*endorser*/ return new String[] {"ContactDetail"};
3337        case -7765931: /*relatesTo*/ return new String[] {};
3338        case 1970241253: /*section*/ return new String[] {};
3339        default: return super.getTypesForProperty(hash, name);
3340        }
3341
3342      }
3343
3344      @Override
3345      public Base addChild(String name) throws FHIRException {
3346        if (name.equals("url")) {
3347          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.url");
3348        }
3349        else if (name.equals("status")) {
3350          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.status");
3351        }
3352        else if (name.equals("useContext")) {
3353          return addUseContext();
3354        }
3355        else if (name.equals("identifier")) {
3356          return addIdentifier();
3357        }
3358        else if (name.equals("relatedIdentifier")) {
3359          return addRelatedIdentifier();
3360        }
3361        else if (name.equals("citeAsReference")) {
3362          this.citeAs = new Reference();
3363          return this.citeAs;
3364        }
3365        else if (name.equals("citeAsMarkdown")) {
3366          this.citeAs = new MarkdownType();
3367          return this.citeAs;
3368        }
3369        else if (name.equals("type")) {
3370          this.type = new CodeableConcept();
3371          return this.type;
3372        }
3373        else if (name.equals("note")) {
3374          return addNote();
3375        }
3376        else if (name.equals("relatedArtifact")) {
3377          return addRelatedArtifact();
3378        }
3379        else if (name.equals("subject")) {
3380          this.subject = new EvidenceReportSubjectComponent();
3381          return this.subject;
3382        }
3383        else if (name.equals("publisher")) {
3384          throw new FHIRException("Cannot call addChild on a primitive type EvidenceReport.publisher");
3385        }
3386        else if (name.equals("contact")) {
3387          return addContact();
3388        }
3389        else if (name.equals("author")) {
3390          return addAuthor();
3391        }
3392        else if (name.equals("editor")) {
3393          return addEditor();
3394        }
3395        else if (name.equals("reviewer")) {
3396          return addReviewer();
3397        }
3398        else if (name.equals("endorser")) {
3399          return addEndorser();
3400        }
3401        else if (name.equals("relatesTo")) {
3402          return addRelatesTo();
3403        }
3404        else if (name.equals("section")) {
3405          return addSection();
3406        }
3407        else
3408          return super.addChild(name);
3409      }
3410
3411  public String fhirType() {
3412    return "EvidenceReport";
3413
3414  }
3415
3416      public EvidenceReport copy() {
3417        EvidenceReport dst = new EvidenceReport();
3418        copyValues(dst);
3419        return dst;
3420      }
3421
3422      public void copyValues(EvidenceReport dst) {
3423        super.copyValues(dst);
3424        dst.url = url == null ? null : url.copy();
3425        dst.status = status == null ? null : status.copy();
3426        if (useContext != null) {
3427          dst.useContext = new ArrayList<UsageContext>();
3428          for (UsageContext i : useContext)
3429            dst.useContext.add(i.copy());
3430        };
3431        if (identifier != null) {
3432          dst.identifier = new ArrayList<Identifier>();
3433          for (Identifier i : identifier)
3434            dst.identifier.add(i.copy());
3435        };
3436        if (relatedIdentifier != null) {
3437          dst.relatedIdentifier = new ArrayList<Identifier>();
3438          for (Identifier i : relatedIdentifier)
3439            dst.relatedIdentifier.add(i.copy());
3440        };
3441        dst.citeAs = citeAs == null ? null : citeAs.copy();
3442        dst.type = type == null ? null : type.copy();
3443        if (note != null) {
3444          dst.note = new ArrayList<Annotation>();
3445          for (Annotation i : note)
3446            dst.note.add(i.copy());
3447        };
3448        if (relatedArtifact != null) {
3449          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
3450          for (RelatedArtifact i : relatedArtifact)
3451            dst.relatedArtifact.add(i.copy());
3452        };
3453        dst.subject = subject == null ? null : subject.copy();
3454        dst.publisher = publisher == null ? null : publisher.copy();
3455        if (contact != null) {
3456          dst.contact = new ArrayList<ContactDetail>();
3457          for (ContactDetail i : contact)
3458            dst.contact.add(i.copy());
3459        };
3460        if (author != null) {
3461          dst.author = new ArrayList<ContactDetail>();
3462          for (ContactDetail i : author)
3463            dst.author.add(i.copy());
3464        };
3465        if (editor != null) {
3466          dst.editor = new ArrayList<ContactDetail>();
3467          for (ContactDetail i : editor)
3468            dst.editor.add(i.copy());
3469        };
3470        if (reviewer != null) {
3471          dst.reviewer = new ArrayList<ContactDetail>();
3472          for (ContactDetail i : reviewer)
3473            dst.reviewer.add(i.copy());
3474        };
3475        if (endorser != null) {
3476          dst.endorser = new ArrayList<ContactDetail>();
3477          for (ContactDetail i : endorser)
3478            dst.endorser.add(i.copy());
3479        };
3480        if (relatesTo != null) {
3481          dst.relatesTo = new ArrayList<EvidenceReportRelatesToComponent>();
3482          for (EvidenceReportRelatesToComponent i : relatesTo)
3483            dst.relatesTo.add(i.copy());
3484        };
3485        if (section != null) {
3486          dst.section = new ArrayList<SectionComponent>();
3487          for (SectionComponent i : section)
3488            dst.section.add(i.copy());
3489        };
3490      }
3491
3492      protected EvidenceReport typedCopy() {
3493        return copy();
3494      }
3495
3496      @Override
3497      public boolean equalsDeep(Base other_) {
3498        if (!super.equalsDeep(other_))
3499          return false;
3500        if (!(other_ instanceof EvidenceReport))
3501          return false;
3502        EvidenceReport o = (EvidenceReport) other_;
3503        return compareDeep(url, o.url, true) && compareDeep(status, o.status, true) && compareDeep(useContext, o.useContext, true)
3504           && compareDeep(identifier, o.identifier, true) && compareDeep(relatedIdentifier, o.relatedIdentifier, true)
3505           && compareDeep(citeAs, o.citeAs, true) && compareDeep(type, o.type, true) && compareDeep(note, o.note, true)
3506           && compareDeep(relatedArtifact, o.relatedArtifact, true) && compareDeep(subject, o.subject, true)
3507           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(author, o.author, true)
3508           && compareDeep(editor, o.editor, true) && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true)
3509           && compareDeep(relatesTo, o.relatesTo, true) && compareDeep(section, o.section, true);
3510      }
3511
3512      @Override
3513      public boolean equalsShallow(Base other_) {
3514        if (!super.equalsShallow(other_))
3515          return false;
3516        if (!(other_ instanceof EvidenceReport))
3517          return false;
3518        EvidenceReport o = (EvidenceReport) other_;
3519        return compareValues(url, o.url, true) && compareValues(status, o.status, true) && compareValues(publisher, o.publisher, true)
3520          ;
3521      }
3522
3523      public boolean isEmpty() {
3524        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, status, useContext
3525          , identifier, relatedIdentifier, citeAs, type, note, relatedArtifact, subject
3526          , publisher, contact, author, editor, reviewer, endorser, relatesTo, section
3527          );
3528      }
3529
3530  @Override
3531  public ResourceType getResourceType() {
3532    return ResourceType.EvidenceReport;
3533   }
3534
3535 /**
3536   * Search parameter: <b>context-quantity</b>
3537   * <p>
3538   * Description: <b>A quantity- or range-valued use context assigned to the evidence report</b><br>
3539   * Type: <b>quantity</b><br>
3540   * Path: <b>(EvidenceReport.useContext.value as Quantity) | (EvidenceReport.useContext.value as Range)</b><br>
3541   * </p>
3542   */
3543  @SearchParamDefinition(name="context-quantity", path="(EvidenceReport.useContext.value as Quantity) | (EvidenceReport.useContext.value as Range)", description="A quantity- or range-valued use context assigned to the evidence report", type="quantity" )
3544  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3545 /**
3546   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3547   * <p>
3548   * Description: <b>A quantity- or range-valued use context assigned to the evidence report</b><br>
3549   * Type: <b>quantity</b><br>
3550   * Path: <b>(EvidenceReport.useContext.value as Quantity) | (EvidenceReport.useContext.value as Range)</b><br>
3551   * </p>
3552   */
3553  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
3554
3555 /**
3556   * Search parameter: <b>context-type-quantity</b>
3557   * <p>
3558   * Description: <b>A use context type and quantity- or range-based value assigned to the evidence report</b><br>
3559   * Type: <b>composite</b><br>
3560   * Path: <b>EvidenceReport.useContext</b><br>
3561   * </p>
3562   */
3563  @SearchParamDefinition(name="context-type-quantity", path="EvidenceReport.useContext", description="A use context type and quantity- or range-based value assigned to the evidence report", type="composite", compositeOf={"context-type", "context-quantity"} )
3564  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3565 /**
3566   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
3567   * <p>
3568   * Description: <b>A use context type and quantity- or range-based value assigned to the evidence report</b><br>
3569   * Type: <b>composite</b><br>
3570   * Path: <b>EvidenceReport.useContext</b><br>
3571   * </p>
3572   */
3573  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);
3574
3575 /**
3576   * Search parameter: <b>context-type-value</b>
3577   * <p>
3578   * Description: <b>A use context type and value assigned to the evidence report</b><br>
3579   * Type: <b>composite</b><br>
3580   * Path: <b>EvidenceReport.useContext</b><br>
3581   * </p>
3582   */
3583  @SearchParamDefinition(name="context-type-value", path="EvidenceReport.useContext", description="A use context type and value assigned to the evidence report", type="composite", compositeOf={"context-type", "context"} )
3584  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3585 /**
3586   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3587   * <p>
3588   * Description: <b>A use context type and value assigned to the evidence report</b><br>
3589   * Type: <b>composite</b><br>
3590   * Path: <b>EvidenceReport.useContext</b><br>
3591   * </p>
3592   */
3593  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);
3594
3595 /**
3596   * Search parameter: <b>context-type</b>
3597   * <p>
3598   * Description: <b>A type of use context assigned to the evidence report</b><br>
3599   * Type: <b>token</b><br>
3600   * Path: <b>EvidenceReport.useContext.code</b><br>
3601   * </p>
3602   */
3603  @SearchParamDefinition(name="context-type", path="EvidenceReport.useContext.code", description="A type of use context assigned to the evidence report", type="token" )
3604  public static final String SP_CONTEXT_TYPE = "context-type";
3605 /**
3606   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3607   * <p>
3608   * Description: <b>A type of use context assigned to the evidence report</b><br>
3609   * Type: <b>token</b><br>
3610   * Path: <b>EvidenceReport.useContext.code</b><br>
3611   * </p>
3612   */
3613  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
3614
3615 /**
3616   * Search parameter: <b>context</b>
3617   * <p>
3618   * Description: <b>A use context assigned to the evidence report</b><br>
3619   * Type: <b>token</b><br>
3620   * Path: <b>(EvidenceReport.useContext.value as CodeableConcept)</b><br>
3621   * </p>
3622   */
3623  @SearchParamDefinition(name="context", path="(EvidenceReport.useContext.value as CodeableConcept)", description="A use context assigned to the evidence report", type="token" )
3624  public static final String SP_CONTEXT = "context";
3625 /**
3626   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3627   * <p>
3628   * Description: <b>A use context assigned to the evidence report</b><br>
3629   * Type: <b>token</b><br>
3630   * Path: <b>(EvidenceReport.useContext.value as CodeableConcept)</b><br>
3631   * </p>
3632   */
3633  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
3634
3635 /**
3636   * Search parameter: <b>identifier</b>
3637   * <p>
3638   * Description: <b>External identifier for the evidence report</b><br>
3639   * Type: <b>token</b><br>
3640   * Path: <b>EvidenceReport.identifier</b><br>
3641   * </p>
3642   */
3643  @SearchParamDefinition(name="identifier", path="EvidenceReport.identifier", description="External identifier for the evidence report", type="token" )
3644  public static final String SP_IDENTIFIER = "identifier";
3645 /**
3646   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3647   * <p>
3648   * Description: <b>External identifier for the evidence report</b><br>
3649   * Type: <b>token</b><br>
3650   * Path: <b>EvidenceReport.identifier</b><br>
3651   * </p>
3652   */
3653  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3654
3655 /**
3656   * Search parameter: <b>publisher</b>
3657   * <p>
3658   * Description: <b>Name of the publisher of the evidence report</b><br>
3659   * Type: <b>string</b><br>
3660   * Path: <b>EvidenceReport.publisher</b><br>
3661   * </p>
3662   */
3663  @SearchParamDefinition(name="publisher", path="EvidenceReport.publisher", description="Name of the publisher of the evidence report", type="string" )
3664  public static final String SP_PUBLISHER = "publisher";
3665 /**
3666   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3667   * <p>
3668   * Description: <b>Name of the publisher of the evidence report</b><br>
3669   * Type: <b>string</b><br>
3670   * Path: <b>EvidenceReport.publisher</b><br>
3671   * </p>
3672   */
3673  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3674
3675 /**
3676   * Search parameter: <b>status</b>
3677   * <p>
3678   * Description: <b>The current status of the evidence report</b><br>
3679   * Type: <b>token</b><br>
3680   * Path: <b>EvidenceReport.status</b><br>
3681   * </p>
3682   */
3683  @SearchParamDefinition(name="status", path="EvidenceReport.status", description="The current status of the evidence report", type="token" )
3684  public static final String SP_STATUS = "status";
3685 /**
3686   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3687   * <p>
3688   * Description: <b>The current status of the evidence report</b><br>
3689   * Type: <b>token</b><br>
3690   * Path: <b>EvidenceReport.status</b><br>
3691   * </p>
3692   */
3693  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3694
3695 /**
3696   * Search parameter: <b>url</b>
3697   * <p>
3698   * Description: <b>The uri that identifies the evidence report</b><br>
3699   * Type: <b>uri</b><br>
3700   * Path: <b>EvidenceReport.url</b><br>
3701   * </p>
3702   */
3703  @SearchParamDefinition(name="url", path="EvidenceReport.url", description="The uri that identifies the evidence report", type="uri" )
3704  public static final String SP_URL = "url";
3705 /**
3706   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3707   * <p>
3708   * Description: <b>The uri that identifies the evidence report</b><br>
3709   * Type: <b>uri</b><br>
3710   * Path: <b>EvidenceReport.url</b><br>
3711   * </p>
3712   */
3713  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3714
3715
3716}
3717