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