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