001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).
052 */
053@ResourceDef(name="ValueSet", profile="http://hl7.org/fhir/StructureDefinition/ValueSet")
054public class ValueSet extends MetadataResource {
055
056    @Block()
057    public static class ValueSetComposeComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
060         */
061        @Child(name = "lockedDate", type = {DateType.class}, order=1, min=0, max=1, modifier=false, summary=true)
062        @Description(shortDefinition="Fixed date for references with no specified version (transitive)", formalDefinition="The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version." )
063        protected DateType lockedDate;
064
065        /**
066         * Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
067         */
068        @Child(name = "inactive", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=true)
069        @Description(shortDefinition="Whether inactive codes are in the value set", formalDefinition="Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included)." )
070        protected BooleanType inactive;
071
072        /**
073         * Include one or more codes from a code system or other value set(s).
074         */
075        @Child(name = "include", type = {}, order=3, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
076        @Description(shortDefinition="Include one or more codes from a code system or other value set(s)", formalDefinition="Include one or more codes from a code system or other value set(s)." )
077        protected List<ConceptSetComponent> include;
078
079        /**
080         * Exclude one or more codes from the value set based on code system filters and/or other value sets.
081         */
082        @Child(name = "exclude", type = {ConceptSetComponent.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
083        @Description(shortDefinition="Explicitly exclude codes from a code system or other value sets", formalDefinition="Exclude one or more codes from the value set based on code system filters and/or other value sets." )
084        protected List<ConceptSetComponent> exclude;
085
086        /**
087         * A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.
088         */
089        @Child(name = "property", type = {StringType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
090        @Description(shortDefinition="Property to return if client doesn't override", formalDefinition="A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server." )
091        protected List<StringType> property;
092
093        private static final long serialVersionUID = -15414259L;
094
095    /**
096     * Constructor
097     */
098      public ValueSetComposeComponent() {
099        super();
100      }
101
102    /**
103     * Constructor
104     */
105      public ValueSetComposeComponent(ConceptSetComponent include) {
106        super();
107        this.addInclude(include);
108      }
109
110        /**
111         * @return {@link #lockedDate} (The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
112         */
113        public DateType getLockedDateElement() { 
114          if (this.lockedDate == null)
115            if (Configuration.errorOnAutoCreate())
116              throw new Error("Attempt to auto-create ValueSetComposeComponent.lockedDate");
117            else if (Configuration.doAutoCreate())
118              this.lockedDate = new DateType(); // bb
119          return this.lockedDate;
120        }
121
122        public boolean hasLockedDateElement() { 
123          return this.lockedDate != null && !this.lockedDate.isEmpty();
124        }
125
126        public boolean hasLockedDate() { 
127          return this.lockedDate != null && !this.lockedDate.isEmpty();
128        }
129
130        /**
131         * @param value {@link #lockedDate} (The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
132         */
133        public ValueSetComposeComponent setLockedDateElement(DateType value) { 
134          this.lockedDate = value;
135          return this;
136        }
137
138        /**
139         * @return The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
140         */
141        public Date getLockedDate() { 
142          return this.lockedDate == null ? null : this.lockedDate.getValue();
143        }
144
145        /**
146         * @param value The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
147         */
148        public ValueSetComposeComponent setLockedDate(Date value) { 
149          if (value == null)
150            this.lockedDate = null;
151          else {
152            if (this.lockedDate == null)
153              this.lockedDate = new DateType();
154            this.lockedDate.setValue(value);
155          }
156          return this;
157        }
158
159        /**
160         * @return {@link #inactive} (Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
161         */
162        public BooleanType getInactiveElement() { 
163          if (this.inactive == null)
164            if (Configuration.errorOnAutoCreate())
165              throw new Error("Attempt to auto-create ValueSetComposeComponent.inactive");
166            else if (Configuration.doAutoCreate())
167              this.inactive = new BooleanType(); // bb
168          return this.inactive;
169        }
170
171        public boolean hasInactiveElement() { 
172          return this.inactive != null && !this.inactive.isEmpty();
173        }
174
175        public boolean hasInactive() { 
176          return this.inactive != null && !this.inactive.isEmpty();
177        }
178
179        /**
180         * @param value {@link #inactive} (Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
181         */
182        public ValueSetComposeComponent setInactiveElement(BooleanType value) { 
183          this.inactive = value;
184          return this;
185        }
186
187        /**
188         * @return Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
189         */
190        public boolean getInactive() { 
191          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
192        }
193
194        /**
195         * @param value Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
196         */
197        public ValueSetComposeComponent setInactive(boolean value) { 
198            if (this.inactive == null)
199              this.inactive = new BooleanType();
200            this.inactive.setValue(value);
201          return this;
202        }
203
204        /**
205         * @return {@link #include} (Include one or more codes from a code system or other value set(s).)
206         */
207        public List<ConceptSetComponent> getInclude() { 
208          if (this.include == null)
209            this.include = new ArrayList<ConceptSetComponent>();
210          return this.include;
211        }
212
213        /**
214         * @return Returns a reference to <code>this</code> for easy method chaining
215         */
216        public ValueSetComposeComponent setInclude(List<ConceptSetComponent> theInclude) { 
217          this.include = theInclude;
218          return this;
219        }
220
221        public boolean hasInclude() { 
222          if (this.include == null)
223            return false;
224          for (ConceptSetComponent item : this.include)
225            if (!item.isEmpty())
226              return true;
227          return false;
228        }
229
230        public ConceptSetComponent addInclude() { //3
231          ConceptSetComponent t = new ConceptSetComponent();
232          if (this.include == null)
233            this.include = new ArrayList<ConceptSetComponent>();
234          this.include.add(t);
235          return t;
236        }
237
238        public ValueSetComposeComponent addInclude(ConceptSetComponent t) { //3
239          if (t == null)
240            return this;
241          if (this.include == null)
242            this.include = new ArrayList<ConceptSetComponent>();
243          this.include.add(t);
244          return this;
245        }
246
247        /**
248         * @return The first repetition of repeating field {@link #include}, creating it if it does not already exist {3}
249         */
250        public ConceptSetComponent getIncludeFirstRep() { 
251          if (getInclude().isEmpty()) {
252            addInclude();
253          }
254          return getInclude().get(0);
255        }
256
257        /**
258         * @return {@link #exclude} (Exclude one or more codes from the value set based on code system filters and/or other value sets.)
259         */
260        public List<ConceptSetComponent> getExclude() { 
261          if (this.exclude == null)
262            this.exclude = new ArrayList<ConceptSetComponent>();
263          return this.exclude;
264        }
265
266        /**
267         * @return Returns a reference to <code>this</code> for easy method chaining
268         */
269        public ValueSetComposeComponent setExclude(List<ConceptSetComponent> theExclude) { 
270          this.exclude = theExclude;
271          return this;
272        }
273
274        public boolean hasExclude() { 
275          if (this.exclude == null)
276            return false;
277          for (ConceptSetComponent item : this.exclude)
278            if (!item.isEmpty())
279              return true;
280          return false;
281        }
282
283        public ConceptSetComponent addExclude() { //3
284          ConceptSetComponent t = new ConceptSetComponent();
285          if (this.exclude == null)
286            this.exclude = new ArrayList<ConceptSetComponent>();
287          this.exclude.add(t);
288          return t;
289        }
290
291        public ValueSetComposeComponent addExclude(ConceptSetComponent t) { //3
292          if (t == null)
293            return this;
294          if (this.exclude == null)
295            this.exclude = new ArrayList<ConceptSetComponent>();
296          this.exclude.add(t);
297          return this;
298        }
299
300        /**
301         * @return The first repetition of repeating field {@link #exclude}, creating it if it does not already exist {3}
302         */
303        public ConceptSetComponent getExcludeFirstRep() { 
304          if (getExclude().isEmpty()) {
305            addExclude();
306          }
307          return getExclude().get(0);
308        }
309
310        /**
311         * @return {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
312         */
313        public List<StringType> getProperty() { 
314          if (this.property == null)
315            this.property = new ArrayList<StringType>();
316          return this.property;
317        }
318
319        /**
320         * @return Returns a reference to <code>this</code> for easy method chaining
321         */
322        public ValueSetComposeComponent setProperty(List<StringType> theProperty) { 
323          this.property = theProperty;
324          return this;
325        }
326
327        public boolean hasProperty() { 
328          if (this.property == null)
329            return false;
330          for (StringType item : this.property)
331            if (!item.isEmpty())
332              return true;
333          return false;
334        }
335
336        /**
337         * @return {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
338         */
339        public StringType addPropertyElement() {//2 
340          StringType t = new StringType();
341          if (this.property == null)
342            this.property = new ArrayList<StringType>();
343          this.property.add(t);
344          return t;
345        }
346
347        /**
348         * @param value {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
349         */
350        public ValueSetComposeComponent addProperty(String value) { //1
351          StringType t = new StringType();
352          t.setValue(value);
353          if (this.property == null)
354            this.property = new ArrayList<StringType>();
355          this.property.add(t);
356          return this;
357        }
358
359        /**
360         * @param value {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
361         */
362        public boolean hasProperty(String value) { 
363          if (this.property == null)
364            return false;
365          for (StringType v : this.property)
366            if (v.getValue().equals(value)) // string
367              return true;
368          return false;
369        }
370
371        protected void listChildren(List<Property> children) {
372          super.listChildren(children);
373          children.add(new Property("lockedDate", "date", "The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", 0, 1, lockedDate));
374          children.add(new Property("inactive", "boolean", "Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", 0, 1, inactive));
375          children.add(new Property("include", "", "Include one or more codes from a code system or other value set(s).", 0, java.lang.Integer.MAX_VALUE, include));
376          children.add(new Property("exclude", "@ValueSet.compose.include", "Exclude one or more codes from the value set based on code system filters and/or other value sets.", 0, java.lang.Integer.MAX_VALUE, exclude));
377          children.add(new Property("property", "string", "A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.", 0, java.lang.Integer.MAX_VALUE, property));
378        }
379
380        @Override
381        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
382          switch (_hash) {
383          case 1391591896: /*lockedDate*/  return new Property("lockedDate", "date", "The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", 0, 1, lockedDate);
384          case 24665195: /*inactive*/  return new Property("inactive", "boolean", "Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", 0, 1, inactive);
385          case 1942574248: /*include*/  return new Property("include", "", "Include one or more codes from a code system or other value set(s).", 0, java.lang.Integer.MAX_VALUE, include);
386          case -1321148966: /*exclude*/  return new Property("exclude", "@ValueSet.compose.include", "Exclude one or more codes from the value set based on code system filters and/or other value sets.", 0, java.lang.Integer.MAX_VALUE, exclude);
387          case -993141291: /*property*/  return new Property("property", "string", "A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.", 0, java.lang.Integer.MAX_VALUE, property);
388          default: return super.getNamedProperty(_hash, _name, _checkValid);
389          }
390
391        }
392
393      @Override
394      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
395        switch (hash) {
396        case 1391591896: /*lockedDate*/ return this.lockedDate == null ? new Base[0] : new Base[] {this.lockedDate}; // DateType
397        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
398        case 1942574248: /*include*/ return this.include == null ? new Base[0] : this.include.toArray(new Base[this.include.size()]); // ConceptSetComponent
399        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : this.exclude.toArray(new Base[this.exclude.size()]); // ConceptSetComponent
400        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // StringType
401        default: return super.getProperty(hash, name, checkValid);
402        }
403
404      }
405
406      @Override
407      public Base setProperty(int hash, String name, Base value) throws FHIRException {
408        switch (hash) {
409        case 1391591896: // lockedDate
410          this.lockedDate = TypeConvertor.castToDate(value); // DateType
411          return value;
412        case 24665195: // inactive
413          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
414          return value;
415        case 1942574248: // include
416          this.getInclude().add((ConceptSetComponent) value); // ConceptSetComponent
417          return value;
418        case -1321148966: // exclude
419          this.getExclude().add((ConceptSetComponent) value); // ConceptSetComponent
420          return value;
421        case -993141291: // property
422          this.getProperty().add(TypeConvertor.castToString(value)); // StringType
423          return value;
424        default: return super.setProperty(hash, name, value);
425        }
426
427      }
428
429      @Override
430      public Base setProperty(String name, Base value) throws FHIRException {
431        if (name.equals("lockedDate")) {
432          this.lockedDate = TypeConvertor.castToDate(value); // DateType
433        } else if (name.equals("inactive")) {
434          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
435        } else if (name.equals("include")) {
436          this.getInclude().add((ConceptSetComponent) value);
437        } else if (name.equals("exclude")) {
438          this.getExclude().add((ConceptSetComponent) value);
439        } else if (name.equals("property")) {
440          this.getProperty().add(TypeConvertor.castToString(value));
441        } else
442          return super.setProperty(name, value);
443        return value;
444      }
445
446      @Override
447      public Base makeProperty(int hash, String name) throws FHIRException {
448        switch (hash) {
449        case 1391591896:  return getLockedDateElement();
450        case 24665195:  return getInactiveElement();
451        case 1942574248:  return addInclude(); 
452        case -1321148966:  return addExclude(); 
453        case -993141291:  return addPropertyElement();
454        default: return super.makeProperty(hash, name);
455        }
456
457      }
458
459      @Override
460      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
461        switch (hash) {
462        case 1391591896: /*lockedDate*/ return new String[] {"date"};
463        case 24665195: /*inactive*/ return new String[] {"boolean"};
464        case 1942574248: /*include*/ return new String[] {};
465        case -1321148966: /*exclude*/ return new String[] {"@ValueSet.compose.include"};
466        case -993141291: /*property*/ return new String[] {"string"};
467        default: return super.getTypesForProperty(hash, name);
468        }
469
470      }
471
472      @Override
473      public Base addChild(String name) throws FHIRException {
474        if (name.equals("lockedDate")) {
475          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.lockedDate");
476        }
477        else if (name.equals("inactive")) {
478          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.inactive");
479        }
480        else if (name.equals("include")) {
481          return addInclude();
482        }
483        else if (name.equals("exclude")) {
484          return addExclude();
485        }
486        else if (name.equals("property")) {
487          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.property");
488        }
489        else
490          return super.addChild(name);
491      }
492
493      public ValueSetComposeComponent copy() {
494        ValueSetComposeComponent dst = new ValueSetComposeComponent();
495        copyValues(dst);
496        return dst;
497      }
498
499      public void copyValues(ValueSetComposeComponent dst) {
500        super.copyValues(dst);
501        dst.lockedDate = lockedDate == null ? null : lockedDate.copy();
502        dst.inactive = inactive == null ? null : inactive.copy();
503        if (include != null) {
504          dst.include = new ArrayList<ConceptSetComponent>();
505          for (ConceptSetComponent i : include)
506            dst.include.add(i.copy());
507        };
508        if (exclude != null) {
509          dst.exclude = new ArrayList<ConceptSetComponent>();
510          for (ConceptSetComponent i : exclude)
511            dst.exclude.add(i.copy());
512        };
513        if (property != null) {
514          dst.property = new ArrayList<StringType>();
515          for (StringType i : property)
516            dst.property.add(i.copy());
517        };
518      }
519
520      @Override
521      public boolean equalsDeep(Base other_) {
522        if (!super.equalsDeep(other_))
523          return false;
524        if (!(other_ instanceof ValueSetComposeComponent))
525          return false;
526        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
527        return compareDeep(lockedDate, o.lockedDate, true) && compareDeep(inactive, o.inactive, true) && compareDeep(include, o.include, true)
528           && compareDeep(exclude, o.exclude, true) && compareDeep(property, o.property, true);
529      }
530
531      @Override
532      public boolean equalsShallow(Base other_) {
533        if (!super.equalsShallow(other_))
534          return false;
535        if (!(other_ instanceof ValueSetComposeComponent))
536          return false;
537        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
538        return compareValues(lockedDate, o.lockedDate, true) && compareValues(inactive, o.inactive, true) && compareValues(property, o.property, true)
539          ;
540      }
541
542      public boolean isEmpty() {
543        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(lockedDate, inactive, include
544          , exclude, property);
545      }
546
547  public String fhirType() {
548    return "ValueSet.compose";
549
550  }
551
552  }
553
554    @Block()
555    public static class ConceptSetComponent extends BackboneElement implements IBaseBackboneElement {
556        /**
557         * An absolute URI which is the code system from which the selected codes come from.
558         */
559        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=true)
560        @Description(shortDefinition="The system the codes come from", formalDefinition="An absolute URI which is the code system from which the selected codes come from." )
561        protected UriType system;
562
563        /**
564         * The version of the code system that the codes are selected from, or the special version '*' for all versions.
565         */
566        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
567        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system that the codes are selected from, or the special version '*' for all versions." )
568        protected StringType version;
569
570        /**
571         * Specifies a concept to be included or excluded.
572         */
573        @Child(name = "concept", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
574        @Description(shortDefinition="A concept defined in the system", formalDefinition="Specifies a concept to be included or excluded." )
575        protected List<ConceptReferenceComponent> concept;
576
577        /**
578         * Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.
579         */
580        @Child(name = "filter", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
581        @Description(shortDefinition="Select codes/concepts by their properties (including relationships)", formalDefinition="Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true." )
582        protected List<ConceptSetFilterComponent> filter;
583
584        /**
585         * Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.
586         */
587        @Child(name = "valueSet", type = {CanonicalType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
588        @Description(shortDefinition="Select the contents included in this value set", formalDefinition="Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets." )
589        protected List<CanonicalType> valueSet;
590
591        /**
592         * A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
593         */
594        @Child(name = "copyright", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
595        @Description(shortDefinition="A copyright statement for the specific code system included in the value set", formalDefinition="A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present)." )
596        protected StringType copyright;
597
598        private static final long serialVersionUID = -517139062L;
599
600    /**
601     * Constructor
602     */
603      public ConceptSetComponent() {
604        super();
605      }
606
607        /**
608         * @return {@link #system} (An absolute URI which is the code system from which the selected codes come from.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
609         */
610        public UriType getSystemElement() { 
611          if (this.system == null)
612            if (Configuration.errorOnAutoCreate())
613              throw new Error("Attempt to auto-create ConceptSetComponent.system");
614            else if (Configuration.doAutoCreate())
615              this.system = new UriType(); // bb
616          return this.system;
617        }
618
619        public boolean hasSystemElement() { 
620          return this.system != null && !this.system.isEmpty();
621        }
622
623        public boolean hasSystem() { 
624          return this.system != null && !this.system.isEmpty();
625        }
626
627        /**
628         * @param value {@link #system} (An absolute URI which is the code system from which the selected codes come from.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
629         */
630        public ConceptSetComponent setSystemElement(UriType value) { 
631          this.system = value;
632          return this;
633        }
634
635        /**
636         * @return An absolute URI which is the code system from which the selected codes come from.
637         */
638        public String getSystem() { 
639          return this.system == null ? null : this.system.getValue();
640        }
641
642        /**
643         * @param value An absolute URI which is the code system from which the selected codes come from.
644         */
645        public ConceptSetComponent setSystem(String value) { 
646          if (Utilities.noString(value))
647            this.system = null;
648          else {
649            if (this.system == null)
650              this.system = new UriType();
651            this.system.setValue(value);
652          }
653          return this;
654        }
655
656        /**
657         * @return {@link #version} (The version of the code system that the codes are selected from, or the special version '*' for all versions.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
658         */
659        public StringType getVersionElement() { 
660          if (this.version == null)
661            if (Configuration.errorOnAutoCreate())
662              throw new Error("Attempt to auto-create ConceptSetComponent.version");
663            else if (Configuration.doAutoCreate())
664              this.version = new StringType(); // bb
665          return this.version;
666        }
667
668        public boolean hasVersionElement() { 
669          return this.version != null && !this.version.isEmpty();
670        }
671
672        public boolean hasVersion() { 
673          return this.version != null && !this.version.isEmpty();
674        }
675
676        /**
677         * @param value {@link #version} (The version of the code system that the codes are selected from, or the special version '*' for all versions.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
678         */
679        public ConceptSetComponent setVersionElement(StringType value) { 
680          this.version = value;
681          return this;
682        }
683
684        /**
685         * @return The version of the code system that the codes are selected from, or the special version '*' for all versions.
686         */
687        public String getVersion() { 
688          return this.version == null ? null : this.version.getValue();
689        }
690
691        /**
692         * @param value The version of the code system that the codes are selected from, or the special version '*' for all versions.
693         */
694        public ConceptSetComponent setVersion(String value) { 
695          if (Utilities.noString(value))
696            this.version = null;
697          else {
698            if (this.version == null)
699              this.version = new StringType();
700            this.version.setValue(value);
701          }
702          return this;
703        }
704
705        /**
706         * @return {@link #concept} (Specifies a concept to be included or excluded.)
707         */
708        public List<ConceptReferenceComponent> getConcept() { 
709          if (this.concept == null)
710            this.concept = new ArrayList<ConceptReferenceComponent>();
711          return this.concept;
712        }
713
714        /**
715         * @return Returns a reference to <code>this</code> for easy method chaining
716         */
717        public ConceptSetComponent setConcept(List<ConceptReferenceComponent> theConcept) { 
718          this.concept = theConcept;
719          return this;
720        }
721
722        public boolean hasConcept() { 
723          if (this.concept == null)
724            return false;
725          for (ConceptReferenceComponent item : this.concept)
726            if (!item.isEmpty())
727              return true;
728          return false;
729        }
730
731        public ConceptReferenceComponent addConcept() { //3
732          ConceptReferenceComponent t = new ConceptReferenceComponent();
733          if (this.concept == null)
734            this.concept = new ArrayList<ConceptReferenceComponent>();
735          this.concept.add(t);
736          return t;
737        }
738
739        public ConceptSetComponent addConcept(ConceptReferenceComponent t) { //3
740          if (t == null)
741            return this;
742          if (this.concept == null)
743            this.concept = new ArrayList<ConceptReferenceComponent>();
744          this.concept.add(t);
745          return this;
746        }
747
748        /**
749         * @return The first repetition of repeating field {@link #concept}, creating it if it does not already exist {3}
750         */
751        public ConceptReferenceComponent getConceptFirstRep() { 
752          if (getConcept().isEmpty()) {
753            addConcept();
754          }
755          return getConcept().get(0);
756        }
757
758        /**
759         * @return {@link #filter} (Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.)
760         */
761        public List<ConceptSetFilterComponent> getFilter() { 
762          if (this.filter == null)
763            this.filter = new ArrayList<ConceptSetFilterComponent>();
764          return this.filter;
765        }
766
767        /**
768         * @return Returns a reference to <code>this</code> for easy method chaining
769         */
770        public ConceptSetComponent setFilter(List<ConceptSetFilterComponent> theFilter) { 
771          this.filter = theFilter;
772          return this;
773        }
774
775        public boolean hasFilter() { 
776          if (this.filter == null)
777            return false;
778          for (ConceptSetFilterComponent item : this.filter)
779            if (!item.isEmpty())
780              return true;
781          return false;
782        }
783
784        public ConceptSetFilterComponent addFilter() { //3
785          ConceptSetFilterComponent t = new ConceptSetFilterComponent();
786          if (this.filter == null)
787            this.filter = new ArrayList<ConceptSetFilterComponent>();
788          this.filter.add(t);
789          return t;
790        }
791
792        public ConceptSetComponent addFilter(ConceptSetFilterComponent t) { //3
793          if (t == null)
794            return this;
795          if (this.filter == null)
796            this.filter = new ArrayList<ConceptSetFilterComponent>();
797          this.filter.add(t);
798          return this;
799        }
800
801        /**
802         * @return The first repetition of repeating field {@link #filter}, creating it if it does not already exist {3}
803         */
804        public ConceptSetFilterComponent getFilterFirstRep() { 
805          if (getFilter().isEmpty()) {
806            addFilter();
807          }
808          return getFilter().get(0);
809        }
810
811        /**
812         * @return {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
813         */
814        public List<CanonicalType> getValueSet() { 
815          if (this.valueSet == null)
816            this.valueSet = new ArrayList<CanonicalType>();
817          return this.valueSet;
818        }
819
820        /**
821         * @return Returns a reference to <code>this</code> for easy method chaining
822         */
823        public ConceptSetComponent setValueSet(List<CanonicalType> theValueSet) { 
824          this.valueSet = theValueSet;
825          return this;
826        }
827
828        public boolean hasValueSet() { 
829          if (this.valueSet == null)
830            return false;
831          for (CanonicalType item : this.valueSet)
832            if (!item.isEmpty())
833              return true;
834          return false;
835        }
836
837        /**
838         * @return {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
839         */
840        public CanonicalType addValueSetElement() {//2 
841          CanonicalType t = new CanonicalType();
842          if (this.valueSet == null)
843            this.valueSet = new ArrayList<CanonicalType>();
844          this.valueSet.add(t);
845          return t;
846        }
847
848        /**
849         * @param value {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
850         */
851        public ConceptSetComponent addValueSet(String value) { //1
852          CanonicalType t = new CanonicalType();
853          t.setValue(value);
854          if (this.valueSet == null)
855            this.valueSet = new ArrayList<CanonicalType>();
856          this.valueSet.add(t);
857          return this;
858        }
859
860        /**
861         * @param value {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
862         */
863        public boolean hasValueSet(String value) { 
864          if (this.valueSet == null)
865            return false;
866          for (CanonicalType v : this.valueSet)
867            if (v.getValue().equals(value)) // canonical
868              return true;
869          return false;
870        }
871
872        /**
873         * @return {@link #copyright} (A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
874         */
875        public StringType getCopyrightElement() { 
876          if (this.copyright == null)
877            if (Configuration.errorOnAutoCreate())
878              throw new Error("Attempt to auto-create ConceptSetComponent.copyright");
879            else if (Configuration.doAutoCreate())
880              this.copyright = new StringType(); // bb
881          return this.copyright;
882        }
883
884        public boolean hasCopyrightElement() { 
885          return this.copyright != null && !this.copyright.isEmpty();
886        }
887
888        public boolean hasCopyright() { 
889          return this.copyright != null && !this.copyright.isEmpty();
890        }
891
892        /**
893         * @param value {@link #copyright} (A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
894         */
895        public ConceptSetComponent setCopyrightElement(StringType value) { 
896          this.copyright = value;
897          return this;
898        }
899
900        /**
901         * @return A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
902         */
903        public String getCopyright() { 
904          return this.copyright == null ? null : this.copyright.getValue();
905        }
906
907        /**
908         * @param value A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
909         */
910        public ConceptSetComponent setCopyright(String value) { 
911          if (Utilities.noString(value))
912            this.copyright = null;
913          else {
914            if (this.copyright == null)
915              this.copyright = new StringType();
916            this.copyright.setValue(value);
917          }
918          return this;
919        }
920
921        protected void listChildren(List<Property> children) {
922          super.listChildren(children);
923          children.add(new Property("system", "uri", "An absolute URI which is the code system from which the selected codes come from.", 0, 1, system));
924          children.add(new Property("version", "string", "The version of the code system that the codes are selected from, or the special version '*' for all versions.", 0, 1, version));
925          children.add(new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept));
926          children.add(new Property("filter", "", "Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.", 0, java.lang.Integer.MAX_VALUE, filter));
927          children.add(new Property("valueSet", "canonical(ValueSet)", "Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.", 0, java.lang.Integer.MAX_VALUE, valueSet));
928          children.add(new Property("copyright", "string", "A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).", 0, 1, copyright));
929        }
930
931        @Override
932        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
933          switch (_hash) {
934          case -887328209: /*system*/  return new Property("system", "uri", "An absolute URI which is the code system from which the selected codes come from.", 0, 1, system);
935          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system that the codes are selected from, or the special version '*' for all versions.", 0, 1, version);
936          case 951024232: /*concept*/  return new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept);
937          case -1274492040: /*filter*/  return new Property("filter", "", "Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.", 0, java.lang.Integer.MAX_VALUE, filter);
938          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.", 0, java.lang.Integer.MAX_VALUE, valueSet);
939          case 1522889671: /*copyright*/  return new Property("copyright", "string", "A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).", 0, 1, copyright);
940          default: return super.getNamedProperty(_hash, _name, _checkValid);
941          }
942
943        }
944
945      @Override
946      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
947        switch (hash) {
948        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
949        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
950        case 951024232: /*concept*/ return this.concept == null ? new Base[0] : this.concept.toArray(new Base[this.concept.size()]); // ConceptReferenceComponent
951        case -1274492040: /*filter*/ return this.filter == null ? new Base[0] : this.filter.toArray(new Base[this.filter.size()]); // ConceptSetFilterComponent
952        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : this.valueSet.toArray(new Base[this.valueSet.size()]); // CanonicalType
953        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // StringType
954        default: return super.getProperty(hash, name, checkValid);
955        }
956
957      }
958
959      @Override
960      public Base setProperty(int hash, String name, Base value) throws FHIRException {
961        switch (hash) {
962        case -887328209: // system
963          this.system = TypeConvertor.castToUri(value); // UriType
964          return value;
965        case 351608024: // version
966          this.version = TypeConvertor.castToString(value); // StringType
967          return value;
968        case 951024232: // concept
969          this.getConcept().add((ConceptReferenceComponent) value); // ConceptReferenceComponent
970          return value;
971        case -1274492040: // filter
972          this.getFilter().add((ConceptSetFilterComponent) value); // ConceptSetFilterComponent
973          return value;
974        case -1410174671: // valueSet
975          this.getValueSet().add(TypeConvertor.castToCanonical(value)); // CanonicalType
976          return value;
977        case 1522889671: // copyright
978          this.copyright = TypeConvertor.castToString(value); // StringType
979          return value;
980        default: return super.setProperty(hash, name, value);
981        }
982
983      }
984
985      @Override
986      public Base setProperty(String name, Base value) throws FHIRException {
987        if (name.equals("system")) {
988          this.system = TypeConvertor.castToUri(value); // UriType
989        } else if (name.equals("version")) {
990          this.version = TypeConvertor.castToString(value); // StringType
991        } else if (name.equals("concept")) {
992          this.getConcept().add((ConceptReferenceComponent) value);
993        } else if (name.equals("filter")) {
994          this.getFilter().add((ConceptSetFilterComponent) value);
995        } else if (name.equals("valueSet")) {
996          this.getValueSet().add(TypeConvertor.castToCanonical(value));
997        } else if (name.equals("copyright")) {
998          this.copyright = TypeConvertor.castToString(value); // StringType
999        } else
1000          return super.setProperty(name, value);
1001        return value;
1002      }
1003
1004      @Override
1005      public Base makeProperty(int hash, String name) throws FHIRException {
1006        switch (hash) {
1007        case -887328209:  return getSystemElement();
1008        case 351608024:  return getVersionElement();
1009        case 951024232:  return addConcept(); 
1010        case -1274492040:  return addFilter(); 
1011        case -1410174671:  return addValueSetElement();
1012        case 1522889671:  return getCopyrightElement();
1013        default: return super.makeProperty(hash, name);
1014        }
1015
1016      }
1017
1018      @Override
1019      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1020        switch (hash) {
1021        case -887328209: /*system*/ return new String[] {"uri"};
1022        case 351608024: /*version*/ return new String[] {"string"};
1023        case 951024232: /*concept*/ return new String[] {};
1024        case -1274492040: /*filter*/ return new String[] {};
1025        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
1026        case 1522889671: /*copyright*/ return new String[] {"string"};
1027        default: return super.getTypesForProperty(hash, name);
1028        }
1029
1030      }
1031
1032      @Override
1033      public Base addChild(String name) throws FHIRException {
1034        if (name.equals("system")) {
1035          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.system");
1036        }
1037        else if (name.equals("version")) {
1038          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.version");
1039        }
1040        else if (name.equals("concept")) {
1041          return addConcept();
1042        }
1043        else if (name.equals("filter")) {
1044          return addFilter();
1045        }
1046        else if (name.equals("valueSet")) {
1047          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.valueSet");
1048        }
1049        else if (name.equals("copyright")) {
1050          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.copyright");
1051        }
1052        else
1053          return super.addChild(name);
1054      }
1055
1056      public ConceptSetComponent copy() {
1057        ConceptSetComponent dst = new ConceptSetComponent();
1058        copyValues(dst);
1059        return dst;
1060      }
1061
1062      public void copyValues(ConceptSetComponent dst) {
1063        super.copyValues(dst);
1064        dst.system = system == null ? null : system.copy();
1065        dst.version = version == null ? null : version.copy();
1066        if (concept != null) {
1067          dst.concept = new ArrayList<ConceptReferenceComponent>();
1068          for (ConceptReferenceComponent i : concept)
1069            dst.concept.add(i.copy());
1070        };
1071        if (filter != null) {
1072          dst.filter = new ArrayList<ConceptSetFilterComponent>();
1073          for (ConceptSetFilterComponent i : filter)
1074            dst.filter.add(i.copy());
1075        };
1076        if (valueSet != null) {
1077          dst.valueSet = new ArrayList<CanonicalType>();
1078          for (CanonicalType i : valueSet)
1079            dst.valueSet.add(i.copy());
1080        };
1081        dst.copyright = copyright == null ? null : copyright.copy();
1082      }
1083
1084      @Override
1085      public boolean equalsDeep(Base other_) {
1086        if (!super.equalsDeep(other_))
1087          return false;
1088        if (!(other_ instanceof ConceptSetComponent))
1089          return false;
1090        ConceptSetComponent o = (ConceptSetComponent) other_;
1091        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(concept, o.concept, true)
1092           && compareDeep(filter, o.filter, true) && compareDeep(valueSet, o.valueSet, true) && compareDeep(copyright, o.copyright, true)
1093          ;
1094      }
1095
1096      @Override
1097      public boolean equalsShallow(Base other_) {
1098        if (!super.equalsShallow(other_))
1099          return false;
1100        if (!(other_ instanceof ConceptSetComponent))
1101          return false;
1102        ConceptSetComponent o = (ConceptSetComponent) other_;
1103        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(valueSet, o.valueSet, true)
1104           && compareValues(copyright, o.copyright, true);
1105      }
1106
1107      public boolean isEmpty() {
1108        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version, concept
1109          , filter, valueSet, copyright);
1110      }
1111
1112  public String fhirType() {
1113    return "ValueSet.compose.include";
1114
1115  }
1116
1117  }
1118
1119    @Block()
1120    public static class ConceptReferenceComponent extends BackboneElement implements IBaseBackboneElement {
1121        /**
1122         * Specifies a code for the concept to be included or excluded.
1123         */
1124        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1125        @Description(shortDefinition="Code or expression from system", formalDefinition="Specifies a code for the concept to be included or excluded." )
1126        protected CodeType code;
1127
1128        /**
1129         * The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1130         */
1131        @Child(name = "display", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1132        @Description(shortDefinition="Text to display for this code for this value set in this valueset", formalDefinition="The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system." )
1133        protected StringType display;
1134
1135        /**
1136         * Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
1137         */
1138        @Child(name = "designation", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1139        @Description(shortDefinition="Additional representations for this concept", formalDefinition="Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc." )
1140        protected List<ConceptReferenceDesignationComponent> designation;
1141
1142        private static final long serialVersionUID = 260579971L;
1143
1144    /**
1145     * Constructor
1146     */
1147      public ConceptReferenceComponent() {
1148        super();
1149      }
1150
1151    /**
1152     * Constructor
1153     */
1154      public ConceptReferenceComponent(String code) {
1155        super();
1156        this.setCode(code);
1157      }
1158
1159        /**
1160         * @return {@link #code} (Specifies a code for the concept to be included or excluded.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1161         */
1162        public CodeType getCodeElement() { 
1163          if (this.code == null)
1164            if (Configuration.errorOnAutoCreate())
1165              throw new Error("Attempt to auto-create ConceptReferenceComponent.code");
1166            else if (Configuration.doAutoCreate())
1167              this.code = new CodeType(); // bb
1168          return this.code;
1169        }
1170
1171        public boolean hasCodeElement() { 
1172          return this.code != null && !this.code.isEmpty();
1173        }
1174
1175        public boolean hasCode() { 
1176          return this.code != null && !this.code.isEmpty();
1177        }
1178
1179        /**
1180         * @param value {@link #code} (Specifies a code for the concept to be included or excluded.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1181         */
1182        public ConceptReferenceComponent setCodeElement(CodeType value) { 
1183          this.code = value;
1184          return this;
1185        }
1186
1187        /**
1188         * @return Specifies a code for the concept to be included or excluded.
1189         */
1190        public String getCode() { 
1191          return this.code == null ? null : this.code.getValue();
1192        }
1193
1194        /**
1195         * @param value Specifies a code for the concept to be included or excluded.
1196         */
1197        public ConceptReferenceComponent setCode(String value) { 
1198            if (this.code == null)
1199              this.code = new CodeType();
1200            this.code.setValue(value);
1201          return this;
1202        }
1203
1204        /**
1205         * @return {@link #display} (The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
1206         */
1207        public StringType getDisplayElement() { 
1208          if (this.display == null)
1209            if (Configuration.errorOnAutoCreate())
1210              throw new Error("Attempt to auto-create ConceptReferenceComponent.display");
1211            else if (Configuration.doAutoCreate())
1212              this.display = new StringType(); // bb
1213          return this.display;
1214        }
1215
1216        public boolean hasDisplayElement() { 
1217          return this.display != null && !this.display.isEmpty();
1218        }
1219
1220        public boolean hasDisplay() { 
1221          return this.display != null && !this.display.isEmpty();
1222        }
1223
1224        /**
1225         * @param value {@link #display} (The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
1226         */
1227        public ConceptReferenceComponent setDisplayElement(StringType value) { 
1228          this.display = value;
1229          return this;
1230        }
1231
1232        /**
1233         * @return The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1234         */
1235        public String getDisplay() { 
1236          return this.display == null ? null : this.display.getValue();
1237        }
1238
1239        /**
1240         * @param value The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1241         */
1242        public ConceptReferenceComponent setDisplay(String value) { 
1243          if (Utilities.noString(value))
1244            this.display = null;
1245          else {
1246            if (this.display == null)
1247              this.display = new StringType();
1248            this.display.setValue(value);
1249          }
1250          return this;
1251        }
1252
1253        /**
1254         * @return {@link #designation} (Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.)
1255         */
1256        public List<ConceptReferenceDesignationComponent> getDesignation() { 
1257          if (this.designation == null)
1258            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1259          return this.designation;
1260        }
1261
1262        /**
1263         * @return Returns a reference to <code>this</code> for easy method chaining
1264         */
1265        public ConceptReferenceComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
1266          this.designation = theDesignation;
1267          return this;
1268        }
1269
1270        public boolean hasDesignation() { 
1271          if (this.designation == null)
1272            return false;
1273          for (ConceptReferenceDesignationComponent item : this.designation)
1274            if (!item.isEmpty())
1275              return true;
1276          return false;
1277        }
1278
1279        public ConceptReferenceDesignationComponent addDesignation() { //3
1280          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
1281          if (this.designation == null)
1282            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1283          this.designation.add(t);
1284          return t;
1285        }
1286
1287        public ConceptReferenceComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
1288          if (t == null)
1289            return this;
1290          if (this.designation == null)
1291            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1292          this.designation.add(t);
1293          return this;
1294        }
1295
1296        /**
1297         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
1298         */
1299        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
1300          if (getDesignation().isEmpty()) {
1301            addDesignation();
1302          }
1303          return getDesignation().get(0);
1304        }
1305
1306        protected void listChildren(List<Property> children) {
1307          super.listChildren(children);
1308          children.add(new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code));
1309          children.add(new Property("display", "string", "The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", 0, 1, display));
1310          children.add(new Property("designation", "", "Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", 0, java.lang.Integer.MAX_VALUE, designation));
1311        }
1312
1313        @Override
1314        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1315          switch (_hash) {
1316          case 3059181: /*code*/  return new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code);
1317          case 1671764162: /*display*/  return new Property("display", "string", "The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", 0, 1, display);
1318          case -900931593: /*designation*/  return new Property("designation", "", "Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", 0, java.lang.Integer.MAX_VALUE, designation);
1319          default: return super.getNamedProperty(_hash, _name, _checkValid);
1320          }
1321
1322        }
1323
1324      @Override
1325      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1326        switch (hash) {
1327        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1328        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
1329        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
1330        default: return super.getProperty(hash, name, checkValid);
1331        }
1332
1333      }
1334
1335      @Override
1336      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1337        switch (hash) {
1338        case 3059181: // code
1339          this.code = TypeConvertor.castToCode(value); // CodeType
1340          return value;
1341        case 1671764162: // display
1342          this.display = TypeConvertor.castToString(value); // StringType
1343          return value;
1344        case -900931593: // designation
1345          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
1346          return value;
1347        default: return super.setProperty(hash, name, value);
1348        }
1349
1350      }
1351
1352      @Override
1353      public Base setProperty(String name, Base value) throws FHIRException {
1354        if (name.equals("code")) {
1355          this.code = TypeConvertor.castToCode(value); // CodeType
1356        } else if (name.equals("display")) {
1357          this.display = TypeConvertor.castToString(value); // StringType
1358        } else if (name.equals("designation")) {
1359          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
1360        } else
1361          return super.setProperty(name, value);
1362        return value;
1363      }
1364
1365      @Override
1366      public Base makeProperty(int hash, String name) throws FHIRException {
1367        switch (hash) {
1368        case 3059181:  return getCodeElement();
1369        case 1671764162:  return getDisplayElement();
1370        case -900931593:  return addDesignation(); 
1371        default: return super.makeProperty(hash, name);
1372        }
1373
1374      }
1375
1376      @Override
1377      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1378        switch (hash) {
1379        case 3059181: /*code*/ return new String[] {"code"};
1380        case 1671764162: /*display*/ return new String[] {"string"};
1381        case -900931593: /*designation*/ return new String[] {};
1382        default: return super.getTypesForProperty(hash, name);
1383        }
1384
1385      }
1386
1387      @Override
1388      public Base addChild(String name) throws FHIRException {
1389        if (name.equals("code")) {
1390          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.code");
1391        }
1392        else if (name.equals("display")) {
1393          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.display");
1394        }
1395        else if (name.equals("designation")) {
1396          return addDesignation();
1397        }
1398        else
1399          return super.addChild(name);
1400      }
1401
1402      public ConceptReferenceComponent copy() {
1403        ConceptReferenceComponent dst = new ConceptReferenceComponent();
1404        copyValues(dst);
1405        return dst;
1406      }
1407
1408      public void copyValues(ConceptReferenceComponent dst) {
1409        super.copyValues(dst);
1410        dst.code = code == null ? null : code.copy();
1411        dst.display = display == null ? null : display.copy();
1412        if (designation != null) {
1413          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1414          for (ConceptReferenceDesignationComponent i : designation)
1415            dst.designation.add(i.copy());
1416        };
1417      }
1418
1419      @Override
1420      public boolean equalsDeep(Base other_) {
1421        if (!super.equalsDeep(other_))
1422          return false;
1423        if (!(other_ instanceof ConceptReferenceComponent))
1424          return false;
1425        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1426        return compareDeep(code, o.code, true) && compareDeep(display, o.display, true) && compareDeep(designation, o.designation, true)
1427          ;
1428      }
1429
1430      @Override
1431      public boolean equalsShallow(Base other_) {
1432        if (!super.equalsShallow(other_))
1433          return false;
1434        if (!(other_ instanceof ConceptReferenceComponent))
1435          return false;
1436        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1437        return compareValues(code, o.code, true) && compareValues(display, o.display, true);
1438      }
1439
1440      public boolean isEmpty() {
1441        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, display, designation
1442          );
1443      }
1444
1445  public String fhirType() {
1446    return "ValueSet.compose.include.concept";
1447
1448  }
1449
1450  }
1451
1452    @Block()
1453    public static class ConceptReferenceDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1454        /**
1455         * The language this designation is defined for.
1456         */
1457        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1458        @Description(shortDefinition="Human language of the designation", formalDefinition="The language this designation is defined for." )
1459        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-languages")
1460        protected CodeType language;
1461
1462        /**
1463         * A code that represents types of uses of designations.
1464         */
1465        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=false)
1466        @Description(shortDefinition="Types of uses of designations", formalDefinition="A code that represents types of uses of designations." )
1467        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1468        protected Coding use;
1469
1470        /**
1471         * Additional codes that detail how this designation would be used, if there is more than one use.
1472         */
1473        @Child(name = "additionalUse", type = {Coding.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1474        @Description(shortDefinition="Additional ways how this designation would be used", formalDefinition="Additional codes that detail how this designation would be used, if there is more than one use." )
1475        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1476        protected List<Coding> additionalUse;
1477
1478        /**
1479         * The text value for this designation.
1480         */
1481        @Child(name = "value", type = {StringType.class}, order=4, min=1, max=1, modifier=false, summary=false)
1482        @Description(shortDefinition="The text value for this designation", formalDefinition="The text value for this designation." )
1483        protected StringType value;
1484
1485        private static final long serialVersionUID = -141147882L;
1486
1487    /**
1488     * Constructor
1489     */
1490      public ConceptReferenceDesignationComponent() {
1491        super();
1492      }
1493
1494    /**
1495     * Constructor
1496     */
1497      public ConceptReferenceDesignationComponent(String value) {
1498        super();
1499        this.setValue(value);
1500      }
1501
1502        /**
1503         * @return {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1504         */
1505        public CodeType getLanguageElement() { 
1506          if (this.language == null)
1507            if (Configuration.errorOnAutoCreate())
1508              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.language");
1509            else if (Configuration.doAutoCreate())
1510              this.language = new CodeType(); // bb
1511          return this.language;
1512        }
1513
1514        public boolean hasLanguageElement() { 
1515          return this.language != null && !this.language.isEmpty();
1516        }
1517
1518        public boolean hasLanguage() { 
1519          return this.language != null && !this.language.isEmpty();
1520        }
1521
1522        /**
1523         * @param value {@link #language} (The language this designation is defined for.). This is the underlying object with id, value and extensions. The accessor "getLanguage" gives direct access to the value
1524         */
1525        public ConceptReferenceDesignationComponent setLanguageElement(CodeType value) { 
1526          this.language = value;
1527          return this;
1528        }
1529
1530        /**
1531         * @return The language this designation is defined for.
1532         */
1533        public String getLanguage() { 
1534          return this.language == null ? null : this.language.getValue();
1535        }
1536
1537        /**
1538         * @param value The language this designation is defined for.
1539         */
1540        public ConceptReferenceDesignationComponent setLanguage(String value) { 
1541          if (Utilities.noString(value))
1542            this.language = null;
1543          else {
1544            if (this.language == null)
1545              this.language = new CodeType();
1546            this.language.setValue(value);
1547          }
1548          return this;
1549        }
1550
1551        /**
1552         * @return {@link #use} (A code that represents types of uses of designations.)
1553         */
1554        public Coding getUse() { 
1555          if (this.use == null)
1556            if (Configuration.errorOnAutoCreate())
1557              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.use");
1558            else if (Configuration.doAutoCreate())
1559              this.use = new Coding(); // cc
1560          return this.use;
1561        }
1562
1563        public boolean hasUse() { 
1564          return this.use != null && !this.use.isEmpty();
1565        }
1566
1567        /**
1568         * @param value {@link #use} (A code that represents types of uses of designations.)
1569         */
1570        public ConceptReferenceDesignationComponent setUse(Coding value) { 
1571          this.use = value;
1572          return this;
1573        }
1574
1575        /**
1576         * @return {@link #additionalUse} (Additional codes that detail how this designation would be used, if there is more than one use.)
1577         */
1578        public List<Coding> getAdditionalUse() { 
1579          if (this.additionalUse == null)
1580            this.additionalUse = new ArrayList<Coding>();
1581          return this.additionalUse;
1582        }
1583
1584        /**
1585         * @return Returns a reference to <code>this</code> for easy method chaining
1586         */
1587        public ConceptReferenceDesignationComponent setAdditionalUse(List<Coding> theAdditionalUse) { 
1588          this.additionalUse = theAdditionalUse;
1589          return this;
1590        }
1591
1592        public boolean hasAdditionalUse() { 
1593          if (this.additionalUse == null)
1594            return false;
1595          for (Coding item : this.additionalUse)
1596            if (!item.isEmpty())
1597              return true;
1598          return false;
1599        }
1600
1601        public Coding addAdditionalUse() { //3
1602          Coding t = new Coding();
1603          if (this.additionalUse == null)
1604            this.additionalUse = new ArrayList<Coding>();
1605          this.additionalUse.add(t);
1606          return t;
1607        }
1608
1609        public ConceptReferenceDesignationComponent addAdditionalUse(Coding t) { //3
1610          if (t == null)
1611            return this;
1612          if (this.additionalUse == null)
1613            this.additionalUse = new ArrayList<Coding>();
1614          this.additionalUse.add(t);
1615          return this;
1616        }
1617
1618        /**
1619         * @return The first repetition of repeating field {@link #additionalUse}, creating it if it does not already exist {3}
1620         */
1621        public Coding getAdditionalUseFirstRep() { 
1622          if (getAdditionalUse().isEmpty()) {
1623            addAdditionalUse();
1624          }
1625          return getAdditionalUse().get(0);
1626        }
1627
1628        /**
1629         * @return {@link #value} (The text value for this designation.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1630         */
1631        public StringType getValueElement() { 
1632          if (this.value == null)
1633            if (Configuration.errorOnAutoCreate())
1634              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.value");
1635            else if (Configuration.doAutoCreate())
1636              this.value = new StringType(); // bb
1637          return this.value;
1638        }
1639
1640        public boolean hasValueElement() { 
1641          return this.value != null && !this.value.isEmpty();
1642        }
1643
1644        public boolean hasValue() { 
1645          return this.value != null && !this.value.isEmpty();
1646        }
1647
1648        /**
1649         * @param value {@link #value} (The text value for this designation.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1650         */
1651        public ConceptReferenceDesignationComponent setValueElement(StringType value) { 
1652          this.value = value;
1653          return this;
1654        }
1655
1656        /**
1657         * @return The text value for this designation.
1658         */
1659        public String getValue() { 
1660          return this.value == null ? null : this.value.getValue();
1661        }
1662
1663        /**
1664         * @param value The text value for this designation.
1665         */
1666        public ConceptReferenceDesignationComponent setValue(String value) { 
1667            if (this.value == null)
1668              this.value = new StringType();
1669            this.value.setValue(value);
1670          return this;
1671        }
1672
1673        protected void listChildren(List<Property> children) {
1674          super.listChildren(children);
1675          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1676          children.add(new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use));
1677          children.add(new Property("additionalUse", "Coding", "Additional codes that detail how this designation would be used, if there is more than one use.", 0, java.lang.Integer.MAX_VALUE, additionalUse));
1678          children.add(new Property("value", "string", "The text value for this designation.", 0, 1, value));
1679        }
1680
1681        @Override
1682        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1683          switch (_hash) {
1684          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1685          case 116103: /*use*/  return new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use);
1686          case 938414048: /*additionalUse*/  return new Property("additionalUse", "Coding", "Additional codes that detail how this designation would be used, if there is more than one use.", 0, java.lang.Integer.MAX_VALUE, additionalUse);
1687          case 111972721: /*value*/  return new Property("value", "string", "The text value for this designation.", 0, 1, value);
1688          default: return super.getNamedProperty(_hash, _name, _checkValid);
1689          }
1690
1691        }
1692
1693      @Override
1694      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1695        switch (hash) {
1696        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1697        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1698        case 938414048: /*additionalUse*/ return this.additionalUse == null ? new Base[0] : this.additionalUse.toArray(new Base[this.additionalUse.size()]); // Coding
1699        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
1700        default: return super.getProperty(hash, name, checkValid);
1701        }
1702
1703      }
1704
1705      @Override
1706      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1707        switch (hash) {
1708        case -1613589672: // language
1709          this.language = TypeConvertor.castToCode(value); // CodeType
1710          return value;
1711        case 116103: // use
1712          this.use = TypeConvertor.castToCoding(value); // Coding
1713          return value;
1714        case 938414048: // additionalUse
1715          this.getAdditionalUse().add(TypeConvertor.castToCoding(value)); // Coding
1716          return value;
1717        case 111972721: // value
1718          this.value = TypeConvertor.castToString(value); // StringType
1719          return value;
1720        default: return super.setProperty(hash, name, value);
1721        }
1722
1723      }
1724
1725      @Override
1726      public Base setProperty(String name, Base value) throws FHIRException {
1727        if (name.equals("language")) {
1728          this.language = TypeConvertor.castToCode(value); // CodeType
1729        } else if (name.equals("use")) {
1730          this.use = TypeConvertor.castToCoding(value); // Coding
1731        } else if (name.equals("additionalUse")) {
1732          this.getAdditionalUse().add(TypeConvertor.castToCoding(value));
1733        } else if (name.equals("value")) {
1734          this.value = TypeConvertor.castToString(value); // StringType
1735        } else
1736          return super.setProperty(name, value);
1737        return value;
1738      }
1739
1740      @Override
1741      public Base makeProperty(int hash, String name) throws FHIRException {
1742        switch (hash) {
1743        case -1613589672:  return getLanguageElement();
1744        case 116103:  return getUse();
1745        case 938414048:  return addAdditionalUse(); 
1746        case 111972721:  return getValueElement();
1747        default: return super.makeProperty(hash, name);
1748        }
1749
1750      }
1751
1752      @Override
1753      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1754        switch (hash) {
1755        case -1613589672: /*language*/ return new String[] {"code"};
1756        case 116103: /*use*/ return new String[] {"Coding"};
1757        case 938414048: /*additionalUse*/ return new String[] {"Coding"};
1758        case 111972721: /*value*/ return new String[] {"string"};
1759        default: return super.getTypesForProperty(hash, name);
1760        }
1761
1762      }
1763
1764      @Override
1765      public Base addChild(String name) throws FHIRException {
1766        if (name.equals("language")) {
1767          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.designation.language");
1768        }
1769        else if (name.equals("use")) {
1770          this.use = new Coding();
1771          return this.use;
1772        }
1773        else if (name.equals("additionalUse")) {
1774          return addAdditionalUse();
1775        }
1776        else if (name.equals("value")) {
1777          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.designation.value");
1778        }
1779        else
1780          return super.addChild(name);
1781      }
1782
1783      public ConceptReferenceDesignationComponent copy() {
1784        ConceptReferenceDesignationComponent dst = new ConceptReferenceDesignationComponent();
1785        copyValues(dst);
1786        return dst;
1787      }
1788
1789      public void copyValues(ConceptReferenceDesignationComponent dst) {
1790        super.copyValues(dst);
1791        dst.language = language == null ? null : language.copy();
1792        dst.use = use == null ? null : use.copy();
1793        if (additionalUse != null) {
1794          dst.additionalUse = new ArrayList<Coding>();
1795          for (Coding i : additionalUse)
1796            dst.additionalUse.add(i.copy());
1797        };
1798        dst.value = value == null ? null : value.copy();
1799      }
1800
1801      @Override
1802      public boolean equalsDeep(Base other_) {
1803        if (!super.equalsDeep(other_))
1804          return false;
1805        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1806          return false;
1807        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1808        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true) && compareDeep(additionalUse, o.additionalUse, true)
1809           && compareDeep(value, o.value, true);
1810      }
1811
1812      @Override
1813      public boolean equalsShallow(Base other_) {
1814        if (!super.equalsShallow(other_))
1815          return false;
1816        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1817          return false;
1818        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1819        return compareValues(language, o.language, true) && compareValues(value, o.value, true);
1820      }
1821
1822      public boolean isEmpty() {
1823        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use, additionalUse
1824          , value);
1825      }
1826
1827  public String fhirType() {
1828    return "ValueSet.compose.include.concept.designation";
1829
1830  }
1831
1832  }
1833
1834    @Block()
1835    public static class ConceptSetFilterComponent extends BackboneElement implements IBaseBackboneElement {
1836        /**
1837         * A code that identifies a property or a filter defined in the code system.
1838         */
1839        @Child(name = "property", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1840        @Description(shortDefinition="A property/filter defined by the code system", formalDefinition="A code that identifies a property or a filter defined in the code system." )
1841        protected CodeType property;
1842
1843        /**
1844         * The kind of operation to perform as a part of the filter criteria.
1845         */
1846        @Child(name = "op", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1847        @Description(shortDefinition="= | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists", formalDefinition="The kind of operation to perform as a part of the filter criteria." )
1848        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/filter-operator")
1849        protected Enumeration<FilterOperator> op;
1850
1851        /**
1852         * The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.
1853         */
1854        @Child(name = "value", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1855        @Description(shortDefinition="Code from the system, or regex criteria, or boolean value for exists", formalDefinition="The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'." )
1856        protected StringType value;
1857
1858        private static final long serialVersionUID = 1259153492L;
1859
1860    /**
1861     * Constructor
1862     */
1863      public ConceptSetFilterComponent() {
1864        super();
1865      }
1866
1867    /**
1868     * Constructor
1869     */
1870      public ConceptSetFilterComponent(String property, FilterOperator op, String value) {
1871        super();
1872        this.setProperty(property);
1873        this.setOp(op);
1874        this.setValue(value);
1875      }
1876
1877        /**
1878         * @return {@link #property} (A code that identifies a property or a filter defined in the code system.). This is the underlying object with id, value and extensions. The accessor "getProperty" gives direct access to the value
1879         */
1880        public CodeType getPropertyElement() { 
1881          if (this.property == null)
1882            if (Configuration.errorOnAutoCreate())
1883              throw new Error("Attempt to auto-create ConceptSetFilterComponent.property");
1884            else if (Configuration.doAutoCreate())
1885              this.property = new CodeType(); // bb
1886          return this.property;
1887        }
1888
1889        public boolean hasPropertyElement() { 
1890          return this.property != null && !this.property.isEmpty();
1891        }
1892
1893        public boolean hasProperty() { 
1894          return this.property != null && !this.property.isEmpty();
1895        }
1896
1897        /**
1898         * @param value {@link #property} (A code that identifies a property or a filter defined in the code system.). This is the underlying object with id, value and extensions. The accessor "getProperty" gives direct access to the value
1899         */
1900        public ConceptSetFilterComponent setPropertyElement(CodeType value) { 
1901          this.property = value;
1902          return this;
1903        }
1904
1905        /**
1906         * @return A code that identifies a property or a filter defined in the code system.
1907         */
1908        public String getProperty() { 
1909          return this.property == null ? null : this.property.getValue();
1910        }
1911
1912        /**
1913         * @param value A code that identifies a property or a filter defined in the code system.
1914         */
1915        public ConceptSetFilterComponent setProperty(String value) { 
1916            if (this.property == null)
1917              this.property = new CodeType();
1918            this.property.setValue(value);
1919          return this;
1920        }
1921
1922        /**
1923         * @return {@link #op} (The kind of operation to perform as a part of the filter criteria.). This is the underlying object with id, value and extensions. The accessor "getOp" gives direct access to the value
1924         */
1925        public Enumeration<FilterOperator> getOpElement() { 
1926          if (this.op == null)
1927            if (Configuration.errorOnAutoCreate())
1928              throw new Error("Attempt to auto-create ConceptSetFilterComponent.op");
1929            else if (Configuration.doAutoCreate())
1930              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory()); // bb
1931          return this.op;
1932        }
1933
1934        public boolean hasOpElement() { 
1935          return this.op != null && !this.op.isEmpty();
1936        }
1937
1938        public boolean hasOp() { 
1939          return this.op != null && !this.op.isEmpty();
1940        }
1941
1942        /**
1943         * @param value {@link #op} (The kind of operation to perform as a part of the filter criteria.). This is the underlying object with id, value and extensions. The accessor "getOp" gives direct access to the value
1944         */
1945        public ConceptSetFilterComponent setOpElement(Enumeration<FilterOperator> value) { 
1946          this.op = value;
1947          return this;
1948        }
1949
1950        /**
1951         * @return The kind of operation to perform as a part of the filter criteria.
1952         */
1953        public FilterOperator getOp() { 
1954          return this.op == null ? null : this.op.getValue();
1955        }
1956
1957        /**
1958         * @param value The kind of operation to perform as a part of the filter criteria.
1959         */
1960        public ConceptSetFilterComponent setOp(FilterOperator value) { 
1961            if (this.op == null)
1962              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory());
1963            this.op.setValue(value);
1964          return this;
1965        }
1966
1967        /**
1968         * @return {@link #value} (The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1969         */
1970        public StringType getValueElement() { 
1971          if (this.value == null)
1972            if (Configuration.errorOnAutoCreate())
1973              throw new Error("Attempt to auto-create ConceptSetFilterComponent.value");
1974            else if (Configuration.doAutoCreate())
1975              this.value = new StringType(); // bb
1976          return this.value;
1977        }
1978
1979        public boolean hasValueElement() { 
1980          return this.value != null && !this.value.isEmpty();
1981        }
1982
1983        public boolean hasValue() { 
1984          return this.value != null && !this.value.isEmpty();
1985        }
1986
1987        /**
1988         * @param value {@link #value} (The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
1989         */
1990        public ConceptSetFilterComponent setValueElement(StringType value) { 
1991          this.value = value;
1992          return this;
1993        }
1994
1995        /**
1996         * @return The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.
1997         */
1998        public String getValue() { 
1999          return this.value == null ? null : this.value.getValue();
2000        }
2001
2002        /**
2003         * @param value The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.
2004         */
2005        public ConceptSetFilterComponent setValue(String value) { 
2006            if (this.value == null)
2007              this.value = new StringType();
2008            this.value.setValue(value);
2009          return this;
2010        }
2011
2012        protected void listChildren(List<Property> children) {
2013          super.listChildren(children);
2014          children.add(new Property("property", "code", "A code that identifies a property or a filter defined in the code system.", 0, 1, property));
2015          children.add(new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op));
2016          children.add(new Property("value", "string", "The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.", 0, 1, value));
2017        }
2018
2019        @Override
2020        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2021          switch (_hash) {
2022          case -993141291: /*property*/  return new Property("property", "code", "A code that identifies a property or a filter defined in the code system.", 0, 1, property);
2023          case 3553: /*op*/  return new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op);
2024          case 111972721: /*value*/  return new Property("value", "string", "The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value  (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists'.", 0, 1, value);
2025          default: return super.getNamedProperty(_hash, _name, _checkValid);
2026          }
2027
2028        }
2029
2030      @Override
2031      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2032        switch (hash) {
2033        case -993141291: /*property*/ return this.property == null ? new Base[0] : new Base[] {this.property}; // CodeType
2034        case 3553: /*op*/ return this.op == null ? new Base[0] : new Base[] {this.op}; // Enumeration<FilterOperator>
2035        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
2036        default: return super.getProperty(hash, name, checkValid);
2037        }
2038
2039      }
2040
2041      @Override
2042      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2043        switch (hash) {
2044        case -993141291: // property
2045          this.property = TypeConvertor.castToCode(value); // CodeType
2046          return value;
2047        case 3553: // op
2048          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
2049          this.op = (Enumeration) value; // Enumeration<FilterOperator>
2050          return value;
2051        case 111972721: // value
2052          this.value = TypeConvertor.castToString(value); // StringType
2053          return value;
2054        default: return super.setProperty(hash, name, value);
2055        }
2056
2057      }
2058
2059      @Override
2060      public Base setProperty(String name, Base value) throws FHIRException {
2061        if (name.equals("property")) {
2062          this.property = TypeConvertor.castToCode(value); // CodeType
2063        } else if (name.equals("op")) {
2064          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
2065          this.op = (Enumeration) value; // Enumeration<FilterOperator>
2066        } else if (name.equals("value")) {
2067          this.value = TypeConvertor.castToString(value); // StringType
2068        } else
2069          return super.setProperty(name, value);
2070        return value;
2071      }
2072
2073      @Override
2074      public Base makeProperty(int hash, String name) throws FHIRException {
2075        switch (hash) {
2076        case -993141291:  return getPropertyElement();
2077        case 3553:  return getOpElement();
2078        case 111972721:  return getValueElement();
2079        default: return super.makeProperty(hash, name);
2080        }
2081
2082      }
2083
2084      @Override
2085      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2086        switch (hash) {
2087        case -993141291: /*property*/ return new String[] {"code"};
2088        case 3553: /*op*/ return new String[] {"code"};
2089        case 111972721: /*value*/ return new String[] {"string"};
2090        default: return super.getTypesForProperty(hash, name);
2091        }
2092
2093      }
2094
2095      @Override
2096      public Base addChild(String name) throws FHIRException {
2097        if (name.equals("property")) {
2098          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.property");
2099        }
2100        else if (name.equals("op")) {
2101          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.op");
2102        }
2103        else if (name.equals("value")) {
2104          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.value");
2105        }
2106        else
2107          return super.addChild(name);
2108      }
2109
2110      public ConceptSetFilterComponent copy() {
2111        ConceptSetFilterComponent dst = new ConceptSetFilterComponent();
2112        copyValues(dst);
2113        return dst;
2114      }
2115
2116      public void copyValues(ConceptSetFilterComponent dst) {
2117        super.copyValues(dst);
2118        dst.property = property == null ? null : property.copy();
2119        dst.op = op == null ? null : op.copy();
2120        dst.value = value == null ? null : value.copy();
2121      }
2122
2123      @Override
2124      public boolean equalsDeep(Base other_) {
2125        if (!super.equalsDeep(other_))
2126          return false;
2127        if (!(other_ instanceof ConceptSetFilterComponent))
2128          return false;
2129        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2130        return compareDeep(property, o.property, true) && compareDeep(op, o.op, true) && compareDeep(value, o.value, true)
2131          ;
2132      }
2133
2134      @Override
2135      public boolean equalsShallow(Base other_) {
2136        if (!super.equalsShallow(other_))
2137          return false;
2138        if (!(other_ instanceof ConceptSetFilterComponent))
2139          return false;
2140        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2141        return compareValues(property, o.property, true) && compareValues(op, o.op, true) && compareValues(value, o.value, true)
2142          ;
2143      }
2144
2145      public boolean isEmpty() {
2146        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(property, op, value);
2147      }
2148
2149  public String fhirType() {
2150    return "ValueSet.compose.include.filter";
2151
2152  }
2153
2154  }
2155
2156    @Block()
2157    public static class ValueSetExpansionComponent extends BackboneElement implements IBaseBackboneElement {
2158        /**
2159         * An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.
2160         */
2161        @Child(name = "identifier", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2162        @Description(shortDefinition="Identifies the value set expansion (business identifier)", formalDefinition="An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier." )
2163        protected UriType identifier;
2164
2165        /**
2166         * As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.
2167         */
2168        @Child(name = "next", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2169        @Description(shortDefinition="Opaque urls for paging through expansion results", formalDefinition="As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them." )
2170        protected UriType next;
2171
2172        /**
2173         * The time at which the expansion was produced by the expanding system.
2174         */
2175        @Child(name = "timestamp", type = {DateTimeType.class}, order=3, min=1, max=1, modifier=false, summary=false)
2176        @Description(shortDefinition="Time ValueSet expansion happened", formalDefinition="The time at which the expansion was produced by the expanding system." )
2177        protected DateTimeType timestamp;
2178
2179        /**
2180         * The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.
2181         */
2182        @Child(name = "total", type = {IntegerType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2183        @Description(shortDefinition="Total number of codes in the expansion", formalDefinition="The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter." )
2184        protected IntegerType total;
2185
2186        /**
2187         * If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.
2188         */
2189        @Child(name = "offset", type = {IntegerType.class}, order=5, min=0, max=1, modifier=false, summary=false)
2190        @Description(shortDefinition="Offset at which this resource starts", formalDefinition="If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present." )
2191        protected IntegerType offset;
2192
2193        /**
2194         * A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.
2195         */
2196        @Child(name = "parameter", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2197        @Description(shortDefinition="Parameter that controlled the expansion process", formalDefinition="A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion." )
2198        protected List<ValueSetExpansionParameterComponent> parameter;
2199
2200        /**
2201         * A property defines an additional slot through which additional information can be provided about a concept.
2202         */
2203        @Child(name = "property", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2204        @Description(shortDefinition="Additional information supplied about each concept", formalDefinition="A property defines an additional slot through which additional information can be provided about a concept." )
2205        protected List<ValueSetExpansionPropertyComponent> property;
2206
2207        /**
2208         * The codes that are contained in the value set expansion.
2209         */
2210        @Child(name = "contains", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2211        @Description(shortDefinition="Codes in the value set", formalDefinition="The codes that are contained in the value set expansion." )
2212        protected List<ValueSetExpansionContainsComponent> contains;
2213
2214        private static final long serialVersionUID = 1141573269L;
2215
2216    /**
2217     * Constructor
2218     */
2219      public ValueSetExpansionComponent() {
2220        super();
2221      }
2222
2223    /**
2224     * Constructor
2225     */
2226      public ValueSetExpansionComponent(Date timestamp) {
2227        super();
2228        this.setTimestamp(timestamp);
2229      }
2230
2231        /**
2232         * @return {@link #identifier} (An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.). This is the underlying object with id, value and extensions. The accessor "getIdentifier" gives direct access to the value
2233         */
2234        public UriType getIdentifierElement() { 
2235          if (this.identifier == null)
2236            if (Configuration.errorOnAutoCreate())
2237              throw new Error("Attempt to auto-create ValueSetExpansionComponent.identifier");
2238            else if (Configuration.doAutoCreate())
2239              this.identifier = new UriType(); // bb
2240          return this.identifier;
2241        }
2242
2243        public boolean hasIdentifierElement() { 
2244          return this.identifier != null && !this.identifier.isEmpty();
2245        }
2246
2247        public boolean hasIdentifier() { 
2248          return this.identifier != null && !this.identifier.isEmpty();
2249        }
2250
2251        /**
2252         * @param value {@link #identifier} (An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.). This is the underlying object with id, value and extensions. The accessor "getIdentifier" gives direct access to the value
2253         */
2254        public ValueSetExpansionComponent setIdentifierElement(UriType value) { 
2255          this.identifier = value;
2256          return this;
2257        }
2258
2259        /**
2260         * @return An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.
2261         */
2262        public String getIdentifier() { 
2263          return this.identifier == null ? null : this.identifier.getValue();
2264        }
2265
2266        /**
2267         * @param value An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.
2268         */
2269        public ValueSetExpansionComponent setIdentifier(String value) { 
2270          if (Utilities.noString(value))
2271            this.identifier = null;
2272          else {
2273            if (this.identifier == null)
2274              this.identifier = new UriType();
2275            this.identifier.setValue(value);
2276          }
2277          return this;
2278        }
2279
2280        /**
2281         * @return {@link #next} (As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.). This is the underlying object with id, value and extensions. The accessor "getNext" gives direct access to the value
2282         */
2283        public UriType getNextElement() { 
2284          if (this.next == null)
2285            if (Configuration.errorOnAutoCreate())
2286              throw new Error("Attempt to auto-create ValueSetExpansionComponent.next");
2287            else if (Configuration.doAutoCreate())
2288              this.next = new UriType(); // bb
2289          return this.next;
2290        }
2291
2292        public boolean hasNextElement() { 
2293          return this.next != null && !this.next.isEmpty();
2294        }
2295
2296        public boolean hasNext() { 
2297          return this.next != null && !this.next.isEmpty();
2298        }
2299
2300        /**
2301         * @param value {@link #next} (As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.). This is the underlying object with id, value and extensions. The accessor "getNext" gives direct access to the value
2302         */
2303        public ValueSetExpansionComponent setNextElement(UriType value) { 
2304          this.next = value;
2305          return this;
2306        }
2307
2308        /**
2309         * @return As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.
2310         */
2311        public String getNext() { 
2312          return this.next == null ? null : this.next.getValue();
2313        }
2314
2315        /**
2316         * @param value As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.
2317         */
2318        public ValueSetExpansionComponent setNext(String value) { 
2319          if (Utilities.noString(value))
2320            this.next = null;
2321          else {
2322            if (this.next == null)
2323              this.next = new UriType();
2324            this.next.setValue(value);
2325          }
2326          return this;
2327        }
2328
2329        /**
2330         * @return {@link #timestamp} (The time at which the expansion was produced by the expanding system.). This is the underlying object with id, value and extensions. The accessor "getTimestamp" gives direct access to the value
2331         */
2332        public DateTimeType getTimestampElement() { 
2333          if (this.timestamp == null)
2334            if (Configuration.errorOnAutoCreate())
2335              throw new Error("Attempt to auto-create ValueSetExpansionComponent.timestamp");
2336            else if (Configuration.doAutoCreate())
2337              this.timestamp = new DateTimeType(); // bb
2338          return this.timestamp;
2339        }
2340
2341        public boolean hasTimestampElement() { 
2342          return this.timestamp != null && !this.timestamp.isEmpty();
2343        }
2344
2345        public boolean hasTimestamp() { 
2346          return this.timestamp != null && !this.timestamp.isEmpty();
2347        }
2348
2349        /**
2350         * @param value {@link #timestamp} (The time at which the expansion was produced by the expanding system.). This is the underlying object with id, value and extensions. The accessor "getTimestamp" gives direct access to the value
2351         */
2352        public ValueSetExpansionComponent setTimestampElement(DateTimeType value) { 
2353          this.timestamp = value;
2354          return this;
2355        }
2356
2357        /**
2358         * @return The time at which the expansion was produced by the expanding system.
2359         */
2360        public Date getTimestamp() { 
2361          return this.timestamp == null ? null : this.timestamp.getValue();
2362        }
2363
2364        /**
2365         * @param value The time at which the expansion was produced by the expanding system.
2366         */
2367        public ValueSetExpansionComponent setTimestamp(Date value) { 
2368            if (this.timestamp == null)
2369              this.timestamp = new DateTimeType();
2370            this.timestamp.setValue(value);
2371          return this;
2372        }
2373
2374        /**
2375         * @return {@link #total} (The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.). This is the underlying object with id, value and extensions. The accessor "getTotal" gives direct access to the value
2376         */
2377        public IntegerType getTotalElement() { 
2378          if (this.total == null)
2379            if (Configuration.errorOnAutoCreate())
2380              throw new Error("Attempt to auto-create ValueSetExpansionComponent.total");
2381            else if (Configuration.doAutoCreate())
2382              this.total = new IntegerType(); // bb
2383          return this.total;
2384        }
2385
2386        public boolean hasTotalElement() { 
2387          return this.total != null && !this.total.isEmpty();
2388        }
2389
2390        public boolean hasTotal() { 
2391          return this.total != null && !this.total.isEmpty();
2392        }
2393
2394        /**
2395         * @param value {@link #total} (The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.). This is the underlying object with id, value and extensions. The accessor "getTotal" gives direct access to the value
2396         */
2397        public ValueSetExpansionComponent setTotalElement(IntegerType value) { 
2398          this.total = value;
2399          return this;
2400        }
2401
2402        /**
2403         * @return The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.
2404         */
2405        public int getTotal() { 
2406          return this.total == null || this.total.isEmpty() ? 0 : this.total.getValue();
2407        }
2408
2409        /**
2410         * @param value The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.
2411         */
2412        public ValueSetExpansionComponent setTotal(int value) { 
2413            if (this.total == null)
2414              this.total = new IntegerType();
2415            this.total.setValue(value);
2416          return this;
2417        }
2418
2419        /**
2420         * @return {@link #offset} (If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.). This is the underlying object with id, value and extensions. The accessor "getOffset" gives direct access to the value
2421         */
2422        public IntegerType getOffsetElement() { 
2423          if (this.offset == null)
2424            if (Configuration.errorOnAutoCreate())
2425              throw new Error("Attempt to auto-create ValueSetExpansionComponent.offset");
2426            else if (Configuration.doAutoCreate())
2427              this.offset = new IntegerType(); // bb
2428          return this.offset;
2429        }
2430
2431        public boolean hasOffsetElement() { 
2432          return this.offset != null && !this.offset.isEmpty();
2433        }
2434
2435        public boolean hasOffset() { 
2436          return this.offset != null && !this.offset.isEmpty();
2437        }
2438
2439        /**
2440         * @param value {@link #offset} (If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.). This is the underlying object with id, value and extensions. The accessor "getOffset" gives direct access to the value
2441         */
2442        public ValueSetExpansionComponent setOffsetElement(IntegerType value) { 
2443          this.offset = value;
2444          return this;
2445        }
2446
2447        /**
2448         * @return If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.
2449         */
2450        public int getOffset() { 
2451          return this.offset == null || this.offset.isEmpty() ? 0 : this.offset.getValue();
2452        }
2453
2454        /**
2455         * @param value If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.
2456         */
2457        public ValueSetExpansionComponent setOffset(int value) { 
2458            if (this.offset == null)
2459              this.offset = new IntegerType();
2460            this.offset.setValue(value);
2461          return this;
2462        }
2463
2464        /**
2465         * @return {@link #parameter} (A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.)
2466         */
2467        public List<ValueSetExpansionParameterComponent> getParameter() { 
2468          if (this.parameter == null)
2469            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2470          return this.parameter;
2471        }
2472
2473        /**
2474         * @return Returns a reference to <code>this</code> for easy method chaining
2475         */
2476        public ValueSetExpansionComponent setParameter(List<ValueSetExpansionParameterComponent> theParameter) { 
2477          this.parameter = theParameter;
2478          return this;
2479        }
2480
2481        public boolean hasParameter() { 
2482          if (this.parameter == null)
2483            return false;
2484          for (ValueSetExpansionParameterComponent item : this.parameter)
2485            if (!item.isEmpty())
2486              return true;
2487          return false;
2488        }
2489
2490        public ValueSetExpansionParameterComponent addParameter() { //3
2491          ValueSetExpansionParameterComponent t = new ValueSetExpansionParameterComponent();
2492          if (this.parameter == null)
2493            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2494          this.parameter.add(t);
2495          return t;
2496        }
2497
2498        public ValueSetExpansionComponent addParameter(ValueSetExpansionParameterComponent t) { //3
2499          if (t == null)
2500            return this;
2501          if (this.parameter == null)
2502            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2503          this.parameter.add(t);
2504          return this;
2505        }
2506
2507        /**
2508         * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist {3}
2509         */
2510        public ValueSetExpansionParameterComponent getParameterFirstRep() { 
2511          if (getParameter().isEmpty()) {
2512            addParameter();
2513          }
2514          return getParameter().get(0);
2515        }
2516
2517        /**
2518         * @return {@link #property} (A property defines an additional slot through which additional information can be provided about a concept.)
2519         */
2520        public List<ValueSetExpansionPropertyComponent> getProperty() { 
2521          if (this.property == null)
2522            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2523          return this.property;
2524        }
2525
2526        /**
2527         * @return Returns a reference to <code>this</code> for easy method chaining
2528         */
2529        public ValueSetExpansionComponent setProperty(List<ValueSetExpansionPropertyComponent> theProperty) { 
2530          this.property = theProperty;
2531          return this;
2532        }
2533
2534        public boolean hasProperty() { 
2535          if (this.property == null)
2536            return false;
2537          for (ValueSetExpansionPropertyComponent item : this.property)
2538            if (!item.isEmpty())
2539              return true;
2540          return false;
2541        }
2542
2543        public ValueSetExpansionPropertyComponent addProperty() { //3
2544          ValueSetExpansionPropertyComponent t = new ValueSetExpansionPropertyComponent();
2545          if (this.property == null)
2546            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2547          this.property.add(t);
2548          return t;
2549        }
2550
2551        public ValueSetExpansionComponent addProperty(ValueSetExpansionPropertyComponent t) { //3
2552          if (t == null)
2553            return this;
2554          if (this.property == null)
2555            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2556          this.property.add(t);
2557          return this;
2558        }
2559
2560        /**
2561         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
2562         */
2563        public ValueSetExpansionPropertyComponent getPropertyFirstRep() { 
2564          if (getProperty().isEmpty()) {
2565            addProperty();
2566          }
2567          return getProperty().get(0);
2568        }
2569
2570        /**
2571         * @return {@link #contains} (The codes that are contained in the value set expansion.)
2572         */
2573        public List<ValueSetExpansionContainsComponent> getContains() { 
2574          if (this.contains == null)
2575            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2576          return this.contains;
2577        }
2578
2579        /**
2580         * @return Returns a reference to <code>this</code> for easy method chaining
2581         */
2582        public ValueSetExpansionComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
2583          this.contains = theContains;
2584          return this;
2585        }
2586
2587        public boolean hasContains() { 
2588          if (this.contains == null)
2589            return false;
2590          for (ValueSetExpansionContainsComponent item : this.contains)
2591            if (!item.isEmpty())
2592              return true;
2593          return false;
2594        }
2595
2596        public ValueSetExpansionContainsComponent addContains() { //3
2597          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
2598          if (this.contains == null)
2599            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2600          this.contains.add(t);
2601          return t;
2602        }
2603
2604        public ValueSetExpansionComponent addContains(ValueSetExpansionContainsComponent t) { //3
2605          if (t == null)
2606            return this;
2607          if (this.contains == null)
2608            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2609          this.contains.add(t);
2610          return this;
2611        }
2612
2613        /**
2614         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
2615         */
2616        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
2617          if (getContains().isEmpty()) {
2618            addContains();
2619          }
2620          return getContains().get(0);
2621        }
2622
2623        protected void listChildren(List<Property> children) {
2624          super.listChildren(children);
2625          children.add(new Property("identifier", "uri", "An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.", 0, 1, identifier));
2626          children.add(new Property("next", "uri", "As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.", 0, 1, next));
2627          children.add(new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp));
2628          children.add(new Property("total", "integer", "The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.", 0, 1, total));
2629          children.add(new Property("offset", "integer", "If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.", 0, 1, offset));
2630          children.add(new Property("parameter", "", "A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.", 0, java.lang.Integer.MAX_VALUE, parameter));
2631          children.add(new Property("property", "", "A property defines an additional slot through which additional information can be provided about a concept.", 0, java.lang.Integer.MAX_VALUE, property));
2632          children.add(new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains));
2633        }
2634
2635        @Override
2636        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2637          switch (_hash) {
2638          case -1618432855: /*identifier*/  return new Property("identifier", "uri", "An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.", 0, 1, identifier);
2639          case 3377907: /*next*/  return new Property("next", "uri", "As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.", 0, 1, next);
2640          case 55126294: /*timestamp*/  return new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp);
2641          case 110549828: /*total*/  return new Property("total", "integer", "The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.", 0, 1, total);
2642          case -1019779949: /*offset*/  return new Property("offset", "integer", "If paging is being used, the offset at which this resource starts.  I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.", 0, 1, offset);
2643          case 1954460585: /*parameter*/  return new Property("parameter", "", "A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.", 0, java.lang.Integer.MAX_VALUE, parameter);
2644          case -993141291: /*property*/  return new Property("property", "", "A property defines an additional slot through which additional information can be provided about a concept.", 0, java.lang.Integer.MAX_VALUE, property);
2645          case -567445985: /*contains*/  return new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains);
2646          default: return super.getNamedProperty(_hash, _name, _checkValid);
2647          }
2648
2649        }
2650
2651      @Override
2652      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2653        switch (hash) {
2654        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // UriType
2655        case 3377907: /*next*/ return this.next == null ? new Base[0] : new Base[] {this.next}; // UriType
2656        case 55126294: /*timestamp*/ return this.timestamp == null ? new Base[0] : new Base[] {this.timestamp}; // DateTimeType
2657        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // IntegerType
2658        case -1019779949: /*offset*/ return this.offset == null ? new Base[0] : new Base[] {this.offset}; // IntegerType
2659        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // ValueSetExpansionParameterComponent
2660        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ValueSetExpansionPropertyComponent
2661        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
2662        default: return super.getProperty(hash, name, checkValid);
2663        }
2664
2665      }
2666
2667      @Override
2668      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2669        switch (hash) {
2670        case -1618432855: // identifier
2671          this.identifier = TypeConvertor.castToUri(value); // UriType
2672          return value;
2673        case 3377907: // next
2674          this.next = TypeConvertor.castToUri(value); // UriType
2675          return value;
2676        case 55126294: // timestamp
2677          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2678          return value;
2679        case 110549828: // total
2680          this.total = TypeConvertor.castToInteger(value); // IntegerType
2681          return value;
2682        case -1019779949: // offset
2683          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2684          return value;
2685        case 1954460585: // parameter
2686          this.getParameter().add((ValueSetExpansionParameterComponent) value); // ValueSetExpansionParameterComponent
2687          return value;
2688        case -993141291: // property
2689          this.getProperty().add((ValueSetExpansionPropertyComponent) value); // ValueSetExpansionPropertyComponent
2690          return value;
2691        case -567445985: // contains
2692          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
2693          return value;
2694        default: return super.setProperty(hash, name, value);
2695        }
2696
2697      }
2698
2699      @Override
2700      public Base setProperty(String name, Base value) throws FHIRException {
2701        if (name.equals("identifier")) {
2702          this.identifier = TypeConvertor.castToUri(value); // UriType
2703        } else if (name.equals("next")) {
2704          this.next = TypeConvertor.castToUri(value); // UriType
2705        } else if (name.equals("timestamp")) {
2706          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2707        } else if (name.equals("total")) {
2708          this.total = TypeConvertor.castToInteger(value); // IntegerType
2709        } else if (name.equals("offset")) {
2710          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2711        } else if (name.equals("parameter")) {
2712          this.getParameter().add((ValueSetExpansionParameterComponent) value);
2713        } else if (name.equals("property")) {
2714          this.getProperty().add((ValueSetExpansionPropertyComponent) value);
2715        } else if (name.equals("contains")) {
2716          this.getContains().add((ValueSetExpansionContainsComponent) value);
2717        } else
2718          return super.setProperty(name, value);
2719        return value;
2720      }
2721
2722      @Override
2723      public Base makeProperty(int hash, String name) throws FHIRException {
2724        switch (hash) {
2725        case -1618432855:  return getIdentifierElement();
2726        case 3377907:  return getNextElement();
2727        case 55126294:  return getTimestampElement();
2728        case 110549828:  return getTotalElement();
2729        case -1019779949:  return getOffsetElement();
2730        case 1954460585:  return addParameter(); 
2731        case -993141291:  return addProperty(); 
2732        case -567445985:  return addContains(); 
2733        default: return super.makeProperty(hash, name);
2734        }
2735
2736      }
2737
2738      @Override
2739      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2740        switch (hash) {
2741        case -1618432855: /*identifier*/ return new String[] {"uri"};
2742        case 3377907: /*next*/ return new String[] {"uri"};
2743        case 55126294: /*timestamp*/ return new String[] {"dateTime"};
2744        case 110549828: /*total*/ return new String[] {"integer"};
2745        case -1019779949: /*offset*/ return new String[] {"integer"};
2746        case 1954460585: /*parameter*/ return new String[] {};
2747        case -993141291: /*property*/ return new String[] {};
2748        case -567445985: /*contains*/ return new String[] {};
2749        default: return super.getTypesForProperty(hash, name);
2750        }
2751
2752      }
2753
2754      @Override
2755      public Base addChild(String name) throws FHIRException {
2756        if (name.equals("identifier")) {
2757          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.identifier");
2758        }
2759        else if (name.equals("next")) {
2760          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.next");
2761        }
2762        else if (name.equals("timestamp")) {
2763          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.timestamp");
2764        }
2765        else if (name.equals("total")) {
2766          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.total");
2767        }
2768        else if (name.equals("offset")) {
2769          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.offset");
2770        }
2771        else if (name.equals("parameter")) {
2772          return addParameter();
2773        }
2774        else if (name.equals("property")) {
2775          return addProperty();
2776        }
2777        else if (name.equals("contains")) {
2778          return addContains();
2779        }
2780        else
2781          return super.addChild(name);
2782      }
2783
2784      public ValueSetExpansionComponent copy() {
2785        ValueSetExpansionComponent dst = new ValueSetExpansionComponent();
2786        copyValues(dst);
2787        return dst;
2788      }
2789
2790      public void copyValues(ValueSetExpansionComponent dst) {
2791        super.copyValues(dst);
2792        dst.identifier = identifier == null ? null : identifier.copy();
2793        dst.next = next == null ? null : next.copy();
2794        dst.timestamp = timestamp == null ? null : timestamp.copy();
2795        dst.total = total == null ? null : total.copy();
2796        dst.offset = offset == null ? null : offset.copy();
2797        if (parameter != null) {
2798          dst.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2799          for (ValueSetExpansionParameterComponent i : parameter)
2800            dst.parameter.add(i.copy());
2801        };
2802        if (property != null) {
2803          dst.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2804          for (ValueSetExpansionPropertyComponent i : property)
2805            dst.property.add(i.copy());
2806        };
2807        if (contains != null) {
2808          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2809          for (ValueSetExpansionContainsComponent i : contains)
2810            dst.contains.add(i.copy());
2811        };
2812      }
2813
2814      @Override
2815      public boolean equalsDeep(Base other_) {
2816        if (!super.equalsDeep(other_))
2817          return false;
2818        if (!(other_ instanceof ValueSetExpansionComponent))
2819          return false;
2820        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2821        return compareDeep(identifier, o.identifier, true) && compareDeep(next, o.next, true) && compareDeep(timestamp, o.timestamp, true)
2822           && compareDeep(total, o.total, true) && compareDeep(offset, o.offset, true) && compareDeep(parameter, o.parameter, true)
2823           && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true);
2824      }
2825
2826      @Override
2827      public boolean equalsShallow(Base other_) {
2828        if (!super.equalsShallow(other_))
2829          return false;
2830        if (!(other_ instanceof ValueSetExpansionComponent))
2831          return false;
2832        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2833        return compareValues(identifier, o.identifier, true) && compareValues(next, o.next, true) && compareValues(timestamp, o.timestamp, true)
2834           && compareValues(total, o.total, true) && compareValues(offset, o.offset, true);
2835      }
2836
2837      public boolean isEmpty() {
2838        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, next, timestamp
2839          , total, offset, parameter, property, contains);
2840      }
2841
2842      public boolean hasParameterValue(String name, String value) {
2843        for (ValueSetExpansionParameterComponent p : getParameter()) {
2844          if (name.equals(p.getName()) && p.hasValue() && value.equals(p.getValue().primitiveValue())) {
2845            return true;
2846          }
2847        }
2848        return false;
2849      }
2850
2851      public void addParameter(String name, DataType value) {
2852        getParameter().add(new ValueSetExpansionParameterComponent(name).setValue(value));
2853      }
2854      
2855      public String fhirType() {
2856        return "ValueSet.expansion";
2857      }
2858
2859    }
2860
2861    @Block()
2862    public static class ValueSetExpansionParameterComponent extends BackboneElement implements IBaseBackboneElement {
2863        /**
2864         * Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.
2865         */
2866        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2867        @Description(shortDefinition="Name as assigned by the client or server", formalDefinition="Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process." )
2868        protected StringType name;
2869
2870        /**
2871         * The value of the parameter.
2872         */
2873        @Child(name = "value", type = {StringType.class, BooleanType.class, IntegerType.class, DecimalType.class, UriType.class, CodeType.class, DateTimeType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2874        @Description(shortDefinition="Value of the named parameter", formalDefinition="The value of the parameter." )
2875        protected DataType value;
2876
2877        private static final long serialVersionUID = 1839679495L;
2878
2879    /**
2880     * Constructor
2881     */
2882      public ValueSetExpansionParameterComponent() {
2883        super();
2884      }
2885
2886    /**
2887     * Constructor
2888     */
2889      public ValueSetExpansionParameterComponent(String name) {
2890        super();
2891        this.setName(name);
2892      }
2893
2894        /**
2895         * @return {@link #name} (Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2896         */
2897        public StringType getNameElement() { 
2898          if (this.name == null)
2899            if (Configuration.errorOnAutoCreate())
2900              throw new Error("Attempt to auto-create ValueSetExpansionParameterComponent.name");
2901            else if (Configuration.doAutoCreate())
2902              this.name = new StringType(); // bb
2903          return this.name;
2904        }
2905
2906        public boolean hasNameElement() { 
2907          return this.name != null && !this.name.isEmpty();
2908        }
2909
2910        public boolean hasName() { 
2911          return this.name != null && !this.name.isEmpty();
2912        }
2913
2914        /**
2915         * @param value {@link #name} (Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
2916         */
2917        public ValueSetExpansionParameterComponent setNameElement(StringType value) { 
2918          this.name = value;
2919          return this;
2920        }
2921
2922        /**
2923         * @return Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.
2924         */
2925        public String getName() { 
2926          return this.name == null ? null : this.name.getValue();
2927        }
2928
2929        /**
2930         * @param value Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.
2931         */
2932        public ValueSetExpansionParameterComponent setName(String value) { 
2933            if (this.name == null)
2934              this.name = new StringType();
2935            this.name.setValue(value);
2936          return this;
2937        }
2938
2939        /**
2940         * @return {@link #value} (The value of the parameter.)
2941         */
2942        public DataType getValue() { 
2943          return this.value;
2944        }
2945
2946        /**
2947         * @return {@link #value} (The value of the parameter.)
2948         */
2949        public StringType getValueStringType() throws FHIRException { 
2950          if (this.value == null)
2951            this.value = new StringType();
2952          if (!(this.value instanceof StringType))
2953            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2954          return (StringType) this.value;
2955        }
2956
2957        public boolean hasValueStringType() { 
2958          return this != null && this.value instanceof StringType;
2959        }
2960
2961        /**
2962         * @return {@link #value} (The value of the parameter.)
2963         */
2964        public BooleanType getValueBooleanType() throws FHIRException { 
2965          if (this.value == null)
2966            this.value = new BooleanType();
2967          if (!(this.value instanceof BooleanType))
2968            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2969          return (BooleanType) this.value;
2970        }
2971
2972        public boolean hasValueBooleanType() { 
2973          return this != null && this.value instanceof BooleanType;
2974        }
2975
2976        /**
2977         * @return {@link #value} (The value of the parameter.)
2978         */
2979        public IntegerType getValueIntegerType() throws FHIRException { 
2980          if (this.value == null)
2981            this.value = new IntegerType();
2982          if (!(this.value instanceof IntegerType))
2983            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2984          return (IntegerType) this.value;
2985        }
2986
2987        public boolean hasValueIntegerType() { 
2988          return this != null && this.value instanceof IntegerType;
2989        }
2990
2991        /**
2992         * @return {@link #value} (The value of the parameter.)
2993         */
2994        public DecimalType getValueDecimalType() throws FHIRException { 
2995          if (this.value == null)
2996            this.value = new DecimalType();
2997          if (!(this.value instanceof DecimalType))
2998            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
2999          return (DecimalType) this.value;
3000        }
3001
3002        public boolean hasValueDecimalType() { 
3003          return this != null && this.value instanceof DecimalType;
3004        }
3005
3006        /**
3007         * @return {@link #value} (The value of the parameter.)
3008         */
3009        public UriType getValueUriType() throws FHIRException { 
3010          if (this.value == null)
3011            this.value = new UriType();
3012          if (!(this.value instanceof UriType))
3013            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
3014          return (UriType) this.value;
3015        }
3016
3017        public boolean hasValueUriType() { 
3018          return this != null && this.value instanceof UriType;
3019        }
3020
3021        /**
3022         * @return {@link #value} (The value of the parameter.)
3023         */
3024        public CodeType getValueCodeType() throws FHIRException { 
3025          if (this.value == null)
3026            this.value = new CodeType();
3027          if (!(this.value instanceof CodeType))
3028            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
3029          return (CodeType) this.value;
3030        }
3031
3032        public boolean hasValueCodeType() { 
3033          return this != null && this.value instanceof CodeType;
3034        }
3035
3036        /**
3037         * @return {@link #value} (The value of the parameter.)
3038         */
3039        public DateTimeType getValueDateTimeType() throws FHIRException { 
3040          if (this.value == null)
3041            this.value = new DateTimeType();
3042          if (!(this.value instanceof DateTimeType))
3043            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
3044          return (DateTimeType) this.value;
3045        }
3046
3047        public boolean hasValueDateTimeType() { 
3048          return this != null && this.value instanceof DateTimeType;
3049        }
3050
3051        public boolean hasValue() { 
3052          return this.value != null && !this.value.isEmpty();
3053        }
3054
3055        /**
3056         * @param value {@link #value} (The value of the parameter.)
3057         */
3058        public ValueSetExpansionParameterComponent setValue(DataType value) { 
3059          if (value != null && !(value instanceof StringType || value instanceof BooleanType || value instanceof IntegerType || value instanceof DecimalType || value instanceof UriType || value instanceof CodeType || value instanceof DateTimeType))
3060            throw new FHIRException("Not the right type for ValueSet.expansion.parameter.value[x]: "+value.fhirType());
3061          this.value = value;
3062          return this;
3063        }
3064
3065        protected void listChildren(List<Property> children) {
3066          super.listChildren(children);
3067          children.add(new Property("name", "string", "Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.", 0, 1, name));
3068          children.add(new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value));
3069        }
3070
3071        @Override
3072        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3073          switch (_hash) {
3074          case 3373707: /*name*/  return new Property("name", "string", "Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.", 0, 1, name);
3075          case -1410166417: /*value[x]*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
3076          case 111972721: /*value*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
3077          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of the parameter.", 0, 1, value);
3078          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the parameter.", 0, 1, value);
3079          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of the parameter.", 0, 1, value);
3080          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of the parameter.", 0, 1, value);
3081          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The value of the parameter.", 0, 1, value);
3082          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of the parameter.", 0, 1, value);
3083          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of the parameter.", 0, 1, value);
3084          default: return super.getNamedProperty(_hash, _name, _checkValid);
3085          }
3086
3087        }
3088
3089      @Override
3090      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3091        switch (hash) {
3092        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3093        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
3094        default: return super.getProperty(hash, name, checkValid);
3095        }
3096
3097      }
3098
3099      @Override
3100      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3101        switch (hash) {
3102        case 3373707: // name
3103          this.name = TypeConvertor.castToString(value); // StringType
3104          return value;
3105        case 111972721: // value
3106          this.value = TypeConvertor.castToType(value); // DataType
3107          return value;
3108        default: return super.setProperty(hash, name, value);
3109        }
3110
3111      }
3112
3113      @Override
3114      public Base setProperty(String name, Base value) throws FHIRException {
3115        if (name.equals("name")) {
3116          this.name = TypeConvertor.castToString(value); // StringType
3117        } else if (name.equals("value[x]")) {
3118          this.value = TypeConvertor.castToType(value); // DataType
3119        } else
3120          return super.setProperty(name, value);
3121        return value;
3122      }
3123
3124      @Override
3125      public Base makeProperty(int hash, String name) throws FHIRException {
3126        switch (hash) {
3127        case 3373707:  return getNameElement();
3128        case -1410166417:  return getValue();
3129        case 111972721:  return getValue();
3130        default: return super.makeProperty(hash, name);
3131        }
3132
3133      }
3134
3135      @Override
3136      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3137        switch (hash) {
3138        case 3373707: /*name*/ return new String[] {"string"};
3139        case 111972721: /*value*/ return new String[] {"string", "boolean", "integer", "decimal", "uri", "code", "dateTime"};
3140        default: return super.getTypesForProperty(hash, name);
3141        }
3142
3143      }
3144
3145      @Override
3146      public Base addChild(String name) throws FHIRException {
3147        if (name.equals("name")) {
3148          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.parameter.name");
3149        }
3150        else if (name.equals("valueString")) {
3151          this.value = new StringType();
3152          return this.value;
3153        }
3154        else if (name.equals("valueBoolean")) {
3155          this.value = new BooleanType();
3156          return this.value;
3157        }
3158        else if (name.equals("valueInteger")) {
3159          this.value = new IntegerType();
3160          return this.value;
3161        }
3162        else if (name.equals("valueDecimal")) {
3163          this.value = new DecimalType();
3164          return this.value;
3165        }
3166        else if (name.equals("valueUri")) {
3167          this.value = new UriType();
3168          return this.value;
3169        }
3170        else if (name.equals("valueCode")) {
3171          this.value = new CodeType();
3172          return this.value;
3173        }
3174        else if (name.equals("valueDateTime")) {
3175          this.value = new DateTimeType();
3176          return this.value;
3177        }
3178        else
3179          return super.addChild(name);
3180      }
3181
3182      public ValueSetExpansionParameterComponent copy() {
3183        ValueSetExpansionParameterComponent dst = new ValueSetExpansionParameterComponent();
3184        copyValues(dst);
3185        return dst;
3186      }
3187
3188      public void copyValues(ValueSetExpansionParameterComponent dst) {
3189        super.copyValues(dst);
3190        dst.name = name == null ? null : name.copy();
3191        dst.value = value == null ? null : value.copy();
3192      }
3193
3194      @Override
3195      public boolean equalsDeep(Base other_) {
3196        if (!super.equalsDeep(other_))
3197          return false;
3198        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3199          return false;
3200        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3201        return compareDeep(name, o.name, true) && compareDeep(value, o.value, true);
3202      }
3203
3204      @Override
3205      public boolean equalsShallow(Base other_) {
3206        if (!super.equalsShallow(other_))
3207          return false;
3208        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3209          return false;
3210        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3211        return compareValues(name, o.name, true);
3212      }
3213
3214      public boolean isEmpty() {
3215        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, value);
3216      }
3217
3218  public String fhirType() {
3219    return "ValueSet.expansion.parameter";
3220
3221  }
3222
3223  @Override
3224  public String toString() {
3225    var s = (hasValue() ? getValue().primitiveValue() : "");
3226    return getName() + "=" + s;
3227  }
3228
3229  }
3230
3231    @Block()
3232    public static class ValueSetExpansionPropertyComponent extends BackboneElement implements IBaseBackboneElement {
3233        /**
3234         * A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3235         */
3236        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3237        @Description(shortDefinition="Identifies the property on the concepts, and when referred to in operations", formalDefinition="A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code." )
3238        protected CodeType code;
3239
3240        /**
3241         * Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3242         */
3243        @Child(name = "uri", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3244        @Description(shortDefinition="Formal identifier for the property", formalDefinition="Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system." )
3245        protected UriType uri;
3246
3247        private static final long serialVersionUID = 929575836L;
3248
3249    /**
3250     * Constructor
3251     */
3252      public ValueSetExpansionPropertyComponent() {
3253        super();
3254      }
3255
3256    /**
3257     * Constructor
3258     */
3259      public ValueSetExpansionPropertyComponent(String code) {
3260        super();
3261        this.setCode(code);
3262      }
3263
3264        /**
3265         * @return {@link #code} (A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3266         */
3267        public CodeType getCodeElement() { 
3268          if (this.code == null)
3269            if (Configuration.errorOnAutoCreate())
3270              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.code");
3271            else if (Configuration.doAutoCreate())
3272              this.code = new CodeType(); // bb
3273          return this.code;
3274        }
3275
3276        public boolean hasCodeElement() { 
3277          return this.code != null && !this.code.isEmpty();
3278        }
3279
3280        public boolean hasCode() { 
3281          return this.code != null && !this.code.isEmpty();
3282        }
3283
3284        /**
3285         * @param value {@link #code} (A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3286         */
3287        public ValueSetExpansionPropertyComponent setCodeElement(CodeType value) { 
3288          this.code = value;
3289          return this;
3290        }
3291
3292        /**
3293         * @return A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3294         */
3295        public String getCode() { 
3296          return this.code == null ? null : this.code.getValue();
3297        }
3298
3299        /**
3300         * @param value A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3301         */
3302        public ValueSetExpansionPropertyComponent setCode(String value) { 
3303            if (this.code == null)
3304              this.code = new CodeType();
3305            this.code.setValue(value);
3306          return this;
3307        }
3308
3309        /**
3310         * @return {@link #uri} (Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.). This is the underlying object with id, value and extensions. The accessor "getUri" gives direct access to the value
3311         */
3312        public UriType getUriElement() { 
3313          if (this.uri == null)
3314            if (Configuration.errorOnAutoCreate())
3315              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.uri");
3316            else if (Configuration.doAutoCreate())
3317              this.uri = new UriType(); // bb
3318          return this.uri;
3319        }
3320
3321        public boolean hasUriElement() { 
3322          return this.uri != null && !this.uri.isEmpty();
3323        }
3324
3325        public boolean hasUri() { 
3326          return this.uri != null && !this.uri.isEmpty();
3327        }
3328
3329        /**
3330         * @param value {@link #uri} (Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.). This is the underlying object with id, value and extensions. The accessor "getUri" gives direct access to the value
3331         */
3332        public ValueSetExpansionPropertyComponent setUriElement(UriType value) { 
3333          this.uri = value;
3334          return this;
3335        }
3336
3337        /**
3338         * @return Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3339         */
3340        public String getUri() { 
3341          return this.uri == null ? null : this.uri.getValue();
3342        }
3343
3344        /**
3345         * @param value Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3346         */
3347        public ValueSetExpansionPropertyComponent setUri(String value) { 
3348          if (Utilities.noString(value))
3349            this.uri = null;
3350          else {
3351            if (this.uri == null)
3352              this.uri = new UriType();
3353            this.uri.setValue(value);
3354          }
3355          return this;
3356        }
3357
3358        protected void listChildren(List<Property> children) {
3359          super.listChildren(children);
3360          children.add(new Property("code", "code", "A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.", 0, 1, code));
3361          children.add(new Property("uri", "uri", "Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.", 0, 1, uri));
3362        }
3363
3364        @Override
3365        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3366          switch (_hash) {
3367          case 3059181: /*code*/  return new Property("code", "code", "A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.", 0, 1, code);
3368          case 116076: /*uri*/  return new Property("uri", "uri", "Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.", 0, 1, uri);
3369          default: return super.getNamedProperty(_hash, _name, _checkValid);
3370          }
3371
3372        }
3373
3374      @Override
3375      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3376        switch (hash) {
3377        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3378        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // UriType
3379        default: return super.getProperty(hash, name, checkValid);
3380        }
3381
3382      }
3383
3384      @Override
3385      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3386        switch (hash) {
3387        case 3059181: // code
3388          this.code = TypeConvertor.castToCode(value); // CodeType
3389          return value;
3390        case 116076: // uri
3391          this.uri = TypeConvertor.castToUri(value); // UriType
3392          return value;
3393        default: return super.setProperty(hash, name, value);
3394        }
3395
3396      }
3397
3398      @Override
3399      public Base setProperty(String name, Base value) throws FHIRException {
3400        if (name.equals("code")) {
3401          this.code = TypeConvertor.castToCode(value); // CodeType
3402        } else if (name.equals("uri")) {
3403          this.uri = TypeConvertor.castToUri(value); // UriType
3404        } else
3405          return super.setProperty(name, value);
3406        return value;
3407      }
3408
3409      @Override
3410      public Base makeProperty(int hash, String name) throws FHIRException {
3411        switch (hash) {
3412        case 3059181:  return getCodeElement();
3413        case 116076:  return getUriElement();
3414        default: return super.makeProperty(hash, name);
3415        }
3416
3417      }
3418
3419      @Override
3420      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3421        switch (hash) {
3422        case 3059181: /*code*/ return new String[] {"code"};
3423        case 116076: /*uri*/ return new String[] {"uri"};
3424        default: return super.getTypesForProperty(hash, name);
3425        }
3426
3427      }
3428
3429      @Override
3430      public Base addChild(String name) throws FHIRException {
3431        if (name.equals("code")) {
3432          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.property.code");
3433        }
3434        else if (name.equals("uri")) {
3435          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.property.uri");
3436        }
3437        else
3438          return super.addChild(name);
3439      }
3440
3441      public ValueSetExpansionPropertyComponent copy() {
3442        ValueSetExpansionPropertyComponent dst = new ValueSetExpansionPropertyComponent();
3443        copyValues(dst);
3444        return dst;
3445      }
3446
3447      public void copyValues(ValueSetExpansionPropertyComponent dst) {
3448        super.copyValues(dst);
3449        dst.code = code == null ? null : code.copy();
3450        dst.uri = uri == null ? null : uri.copy();
3451      }
3452
3453      @Override
3454      public boolean equalsDeep(Base other_) {
3455        if (!super.equalsDeep(other_))
3456          return false;
3457        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3458          return false;
3459        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3460        return compareDeep(code, o.code, true) && compareDeep(uri, o.uri, true);
3461      }
3462
3463      @Override
3464      public boolean equalsShallow(Base other_) {
3465        if (!super.equalsShallow(other_))
3466          return false;
3467        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3468          return false;
3469        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3470        return compareValues(code, o.code, true) && compareValues(uri, o.uri, true);
3471      }
3472
3473      public boolean isEmpty() {
3474        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, uri);
3475      }
3476
3477  public String fhirType() {
3478    return "ValueSet.expansion.property";
3479
3480  }
3481
3482  }
3483
3484    @Block()
3485    public static class ValueSetExpansionContainsComponent extends BackboneElement implements IBaseBackboneElement {
3486        /**
3487         * An absolute URI which is the code system in which the code for this item in the expansion is defined.
3488         */
3489        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
3490        @Description(shortDefinition="System value for the code", formalDefinition="An absolute URI which is the code system in which the code for this item in the expansion is defined." )
3491        protected UriType system;
3492
3493        /**
3494         * If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
3495         */
3496        @Child(name = "abstract", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3497        @Description(shortDefinition="If user cannot select this entry", formalDefinition="If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value." )
3498        protected BooleanType abstract_;
3499
3500        /**
3501         * If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).
3502         */
3503        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
3504        @Description(shortDefinition="If concept is inactive in the code system", formalDefinition="If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use)." )
3505        protected BooleanType inactive;
3506
3507        /**
3508         * The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.
3509         */
3510        @Child(name = "version", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
3511        @Description(shortDefinition="Version in which this code/display is defined", formalDefinition="The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged." )
3512        protected StringType version;
3513
3514        /**
3515         * The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.
3516         */
3517        @Child(name = "code", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
3518        @Description(shortDefinition="Code - if blank, this is not a selectable code", formalDefinition="The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set." )
3519        protected CodeType code;
3520
3521        /**
3522         * The recommended display for this item in the expansion.
3523         */
3524        @Child(name = "display", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
3525        @Description(shortDefinition="User display for the concept", formalDefinition="The recommended display for this item in the expansion." )
3526        protected StringType display;
3527
3528        /**
3529         * Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.
3530         */
3531        @Child(name = "designation", type = {ConceptReferenceDesignationComponent.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3532        @Description(shortDefinition="Additional representations for this item", formalDefinition="Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation." )
3533        protected List<ConceptReferenceDesignationComponent> designation;
3534
3535        /**
3536         * A property value for this concept.
3537         */
3538        @Child(name = "property", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3539        @Description(shortDefinition="Property value for the concept", formalDefinition="A property value for this concept." )
3540        protected List<ConceptPropertyComponent> property;
3541
3542        /**
3543         * Other codes and entries contained under this entry in the hierarchy.
3544         */
3545        @Child(name = "contains", type = {ValueSetExpansionContainsComponent.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3546        @Description(shortDefinition="Codes contained under this entry", formalDefinition="Other codes and entries contained under this entry in the hierarchy." )
3547        protected List<ValueSetExpansionContainsComponent> contains;
3548
3549        private static final long serialVersionUID = -1370569439L;
3550
3551    /**
3552     * Constructor
3553     */
3554      public ValueSetExpansionContainsComponent() {
3555        super();
3556      }
3557
3558        /**
3559         * @return {@link #system} (An absolute URI which is the code system in which the code for this item in the expansion is defined.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
3560         */
3561        public UriType getSystemElement() { 
3562          if (this.system == null)
3563            if (Configuration.errorOnAutoCreate())
3564              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.system");
3565            else if (Configuration.doAutoCreate())
3566              this.system = new UriType(); // bb
3567          return this.system;
3568        }
3569
3570        public boolean hasSystemElement() { 
3571          return this.system != null && !this.system.isEmpty();
3572        }
3573
3574        public boolean hasSystem() { 
3575          return this.system != null && !this.system.isEmpty();
3576        }
3577
3578        /**
3579         * @param value {@link #system} (An absolute URI which is the code system in which the code for this item in the expansion is defined.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
3580         */
3581        public ValueSetExpansionContainsComponent setSystemElement(UriType value) { 
3582          this.system = value;
3583          return this;
3584        }
3585
3586        /**
3587         * @return An absolute URI which is the code system in which the code for this item in the expansion is defined.
3588         */
3589        public String getSystem() { 
3590          return this.system == null ? null : this.system.getValue();
3591        }
3592
3593        /**
3594         * @param value An absolute URI which is the code system in which the code for this item in the expansion is defined.
3595         */
3596        public ValueSetExpansionContainsComponent setSystem(String value) { 
3597          if (Utilities.noString(value))
3598            this.system = null;
3599          else {
3600            if (this.system == null)
3601              this.system = new UriType();
3602            this.system.setValue(value);
3603          }
3604          return this;
3605        }
3606
3607        /**
3608         * @return {@link #abstract_} (If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.). This is the underlying object with id, value and extensions. The accessor "getAbstract" gives direct access to the value
3609         */
3610        public BooleanType getAbstractElement() { 
3611          if (this.abstract_ == null)
3612            if (Configuration.errorOnAutoCreate())
3613              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.abstract_");
3614            else if (Configuration.doAutoCreate())
3615              this.abstract_ = new BooleanType(); // bb
3616          return this.abstract_;
3617        }
3618
3619        public boolean hasAbstractElement() { 
3620          return this.abstract_ != null && !this.abstract_.isEmpty();
3621        }
3622
3623        public boolean hasAbstract() { 
3624          return this.abstract_ != null && !this.abstract_.isEmpty();
3625        }
3626
3627        /**
3628         * @param value {@link #abstract_} (If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.). This is the underlying object with id, value and extensions. The accessor "getAbstract" gives direct access to the value
3629         */
3630        public ValueSetExpansionContainsComponent setAbstractElement(BooleanType value) { 
3631          this.abstract_ = value;
3632          return this;
3633        }
3634
3635        /**
3636         * @return If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
3637         */
3638        public boolean getAbstract() { 
3639          return this.abstract_ == null || this.abstract_.isEmpty() ? false : this.abstract_.getValue();
3640        }
3641
3642        /**
3643         * @param value If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
3644         */
3645        public ValueSetExpansionContainsComponent setAbstract(boolean value) { 
3646            if (this.abstract_ == null)
3647              this.abstract_ = new BooleanType();
3648            this.abstract_.setValue(value);
3649          return this;
3650        }
3651
3652        /**
3653         * @return {@link #inactive} (If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
3654         */
3655        public BooleanType getInactiveElement() { 
3656          if (this.inactive == null)
3657            if (Configuration.errorOnAutoCreate())
3658              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.inactive");
3659            else if (Configuration.doAutoCreate())
3660              this.inactive = new BooleanType(); // bb
3661          return this.inactive;
3662        }
3663
3664        public boolean hasInactiveElement() { 
3665          return this.inactive != null && !this.inactive.isEmpty();
3666        }
3667
3668        public boolean hasInactive() { 
3669          return this.inactive != null && !this.inactive.isEmpty();
3670        }
3671
3672        /**
3673         * @param value {@link #inactive} (If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
3674         */
3675        public ValueSetExpansionContainsComponent setInactiveElement(BooleanType value) { 
3676          this.inactive = value;
3677          return this;
3678        }
3679
3680        /**
3681         * @return If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).
3682         */
3683        public boolean getInactive() { 
3684          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
3685        }
3686
3687        /**
3688         * @param value If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).
3689         */
3690        public ValueSetExpansionContainsComponent setInactive(boolean value) { 
3691            if (this.inactive == null)
3692              this.inactive = new BooleanType();
3693            this.inactive.setValue(value);
3694          return this;
3695        }
3696
3697        /**
3698         * @return {@link #version} (The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
3699         */
3700        public StringType getVersionElement() { 
3701          if (this.version == null)
3702            if (Configuration.errorOnAutoCreate())
3703              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.version");
3704            else if (Configuration.doAutoCreate())
3705              this.version = new StringType(); // bb
3706          return this.version;
3707        }
3708
3709        public boolean hasVersionElement() { 
3710          return this.version != null && !this.version.isEmpty();
3711        }
3712
3713        public boolean hasVersion() { 
3714          return this.version != null && !this.version.isEmpty();
3715        }
3716
3717        /**
3718         * @param value {@link #version} (The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
3719         */
3720        public ValueSetExpansionContainsComponent setVersionElement(StringType value) { 
3721          this.version = value;
3722          return this;
3723        }
3724
3725        /**
3726         * @return The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.
3727         */
3728        public String getVersion() { 
3729          return this.version == null ? null : this.version.getValue();
3730        }
3731
3732        /**
3733         * @param value The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.
3734         */
3735        public ValueSetExpansionContainsComponent setVersion(String value) { 
3736          if (Utilities.noString(value))
3737            this.version = null;
3738          else {
3739            if (this.version == null)
3740              this.version = new StringType();
3741            this.version.setValue(value);
3742          }
3743          return this;
3744        }
3745
3746        /**
3747         * @return {@link #code} (The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3748         */
3749        public CodeType getCodeElement() { 
3750          if (this.code == null)
3751            if (Configuration.errorOnAutoCreate())
3752              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.code");
3753            else if (Configuration.doAutoCreate())
3754              this.code = new CodeType(); // bb
3755          return this.code;
3756        }
3757
3758        public boolean hasCodeElement() { 
3759          return this.code != null && !this.code.isEmpty();
3760        }
3761
3762        public boolean hasCode() { 
3763          return this.code != null && !this.code.isEmpty();
3764        }
3765
3766        /**
3767         * @param value {@link #code} (The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
3768         */
3769        public ValueSetExpansionContainsComponent setCodeElement(CodeType value) { 
3770          this.code = value;
3771          return this;
3772        }
3773
3774        /**
3775         * @return The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.
3776         */
3777        public String getCode() { 
3778          return this.code == null ? null : this.code.getValue();
3779        }
3780
3781        /**
3782         * @param value The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.
3783         */
3784        public ValueSetExpansionContainsComponent setCode(String value) { 
3785          if (Utilities.noString(value))
3786            this.code = null;
3787          else {
3788            if (this.code == null)
3789              this.code = new CodeType();
3790            this.code.setValue(value);
3791          }
3792          return this;
3793        }
3794
3795        /**
3796         * @return {@link #display} (The recommended display for this item in the expansion.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
3797         */
3798        public StringType getDisplayElement() { 
3799          if (this.display == null)
3800            if (Configuration.errorOnAutoCreate())
3801              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.display");
3802            else if (Configuration.doAutoCreate())
3803              this.display = new StringType(); // bb
3804          return this.display;
3805        }
3806
3807        public boolean hasDisplayElement() { 
3808          return this.display != null && !this.display.isEmpty();
3809        }
3810
3811        public boolean hasDisplay() { 
3812          return this.display != null && !this.display.isEmpty();
3813        }
3814
3815        /**
3816         * @param value {@link #display} (The recommended display for this item in the expansion.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
3817         */
3818        public ValueSetExpansionContainsComponent setDisplayElement(StringType value) { 
3819          this.display = value;
3820          return this;
3821        }
3822
3823        /**
3824         * @return The recommended display for this item in the expansion.
3825         */
3826        public String getDisplay() { 
3827          return this.display == null ? null : this.display.getValue();
3828        }
3829
3830        /**
3831         * @param value The recommended display for this item in the expansion.
3832         */
3833        public ValueSetExpansionContainsComponent setDisplay(String value) { 
3834          if (Utilities.noString(value))
3835            this.display = null;
3836          else {
3837            if (this.display == null)
3838              this.display = new StringType();
3839            this.display.setValue(value);
3840          }
3841          return this;
3842        }
3843
3844        /**
3845         * @return {@link #designation} (Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.)
3846         */
3847        public List<ConceptReferenceDesignationComponent> getDesignation() { 
3848          if (this.designation == null)
3849            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3850          return this.designation;
3851        }
3852
3853        /**
3854         * @return Returns a reference to <code>this</code> for easy method chaining
3855         */
3856        public ValueSetExpansionContainsComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
3857          this.designation = theDesignation;
3858          return this;
3859        }
3860
3861        public boolean hasDesignation() { 
3862          if (this.designation == null)
3863            return false;
3864          for (ConceptReferenceDesignationComponent item : this.designation)
3865            if (!item.isEmpty())
3866              return true;
3867          return false;
3868        }
3869
3870        public ConceptReferenceDesignationComponent addDesignation() { //3
3871          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
3872          if (this.designation == null)
3873            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3874          this.designation.add(t);
3875          return t;
3876        }
3877
3878        public ValueSetExpansionContainsComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
3879          if (t == null)
3880            return this;
3881          if (this.designation == null)
3882            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3883          this.designation.add(t);
3884          return this;
3885        }
3886
3887        /**
3888         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
3889         */
3890        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
3891          if (getDesignation().isEmpty()) {
3892            addDesignation();
3893          }
3894          return getDesignation().get(0);
3895        }
3896
3897        /**
3898         * @return {@link #property} (A property value for this concept.)
3899         */
3900        public List<ConceptPropertyComponent> getProperty() { 
3901          if (this.property == null)
3902            this.property = new ArrayList<ConceptPropertyComponent>();
3903          return this.property;
3904        }
3905
3906        /**
3907         * @return Returns a reference to <code>this</code> for easy method chaining
3908         */
3909        public ValueSetExpansionContainsComponent setProperty(List<ConceptPropertyComponent> theProperty) { 
3910          this.property = theProperty;
3911          return this;
3912        }
3913
3914        public boolean hasProperty() { 
3915          if (this.property == null)
3916            return false;
3917          for (ConceptPropertyComponent item : this.property)
3918            if (!item.isEmpty())
3919              return true;
3920          return false;
3921        }
3922
3923        public ConceptPropertyComponent addProperty() { //3
3924          ConceptPropertyComponent t = new ConceptPropertyComponent();
3925          if (this.property == null)
3926            this.property = new ArrayList<ConceptPropertyComponent>();
3927          this.property.add(t);
3928          return t;
3929        }
3930
3931        public ValueSetExpansionContainsComponent addProperty(ConceptPropertyComponent t) { //3
3932          if (t == null)
3933            return this;
3934          if (this.property == null)
3935            this.property = new ArrayList<ConceptPropertyComponent>();
3936          this.property.add(t);
3937          return this;
3938        }
3939
3940        /**
3941         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
3942         */
3943        public ConceptPropertyComponent getPropertyFirstRep() { 
3944          if (getProperty().isEmpty()) {
3945            addProperty();
3946          }
3947          return getProperty().get(0);
3948        }
3949
3950        /**
3951         * @return {@link #contains} (Other codes and entries contained under this entry in the hierarchy.)
3952         */
3953        public List<ValueSetExpansionContainsComponent> getContains() { 
3954          if (this.contains == null)
3955            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3956          return this.contains;
3957        }
3958
3959        /**
3960         * @return Returns a reference to <code>this</code> for easy method chaining
3961         */
3962        public ValueSetExpansionContainsComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
3963          this.contains = theContains;
3964          return this;
3965        }
3966
3967        public boolean hasContains() { 
3968          if (this.contains == null)
3969            return false;
3970          for (ValueSetExpansionContainsComponent item : this.contains)
3971            if (!item.isEmpty())
3972              return true;
3973          return false;
3974        }
3975
3976        public ValueSetExpansionContainsComponent addContains() { //3
3977          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
3978          if (this.contains == null)
3979            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3980          this.contains.add(t);
3981          return t;
3982        }
3983
3984        public ValueSetExpansionContainsComponent addContains(ValueSetExpansionContainsComponent t) { //3
3985          if (t == null)
3986            return this;
3987          if (this.contains == null)
3988            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3989          this.contains.add(t);
3990          return this;
3991        }
3992
3993        /**
3994         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
3995         */
3996        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
3997          if (getContains().isEmpty()) {
3998            addContains();
3999          }
4000          return getContains().get(0);
4001        }
4002
4003        protected void listChildren(List<Property> children) {
4004          super.listChildren(children);
4005          children.add(new Property("system", "uri", "An absolute URI which is the code system in which the code for this item in the expansion is defined.", 0, 1, system));
4006          children.add(new Property("abstract", "boolean", "If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.", 0, 1, abstract_));
4007          children.add(new Property("inactive", "boolean", "If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).", 0, 1, inactive));
4008          children.add(new Property("version", "string", "The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", 0, 1, version));
4009          children.add(new Property("code", "code", "The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.", 0, 1, code));
4010          children.add(new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display));
4011          children.add(new Property("designation", "@ValueSet.compose.include.concept.designation", "Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.", 0, java.lang.Integer.MAX_VALUE, designation));
4012          children.add(new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property));
4013          children.add(new Property("contains", "@ValueSet.expansion.contains", "Other codes and entries contained under this entry in the hierarchy.", 0, java.lang.Integer.MAX_VALUE, contains));
4014        }
4015
4016        @Override
4017        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4018          switch (_hash) {
4019          case -887328209: /*system*/  return new Property("system", "uri", "An absolute URI which is the code system in which the code for this item in the expansion is defined.", 0, 1, system);
4020          case 1732898850: /*abstract*/  return new Property("abstract", "boolean", "If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.", 0, 1, abstract_);
4021          case 24665195: /*inactive*/  return new Property("inactive", "boolean", "If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether a concept is inactive (and it may depend on the context of use).", 0, 1, inactive);
4022          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", 0, 1, version);
4023          case 3059181: /*code*/  return new Property("code", "code", "The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.", 0, 1, code);
4024          case 1671764162: /*display*/  return new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display);
4025          case -900931593: /*designation*/  return new Property("designation", "@ValueSet.compose.include.concept.designation", "Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.", 0, java.lang.Integer.MAX_VALUE, designation);
4026          case -993141291: /*property*/  return new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property);
4027          case -567445985: /*contains*/  return new Property("contains", "@ValueSet.expansion.contains", "Other codes and entries contained under this entry in the hierarchy.", 0, java.lang.Integer.MAX_VALUE, contains);
4028          default: return super.getNamedProperty(_hash, _name, _checkValid);
4029          }
4030
4031        }
4032
4033      @Override
4034      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4035        switch (hash) {
4036        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
4037        case 1732898850: /*abstract*/ return this.abstract_ == null ? new Base[0] : new Base[] {this.abstract_}; // BooleanType
4038        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
4039        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
4040        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4041        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
4042        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
4043        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ConceptPropertyComponent
4044        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
4045        default: return super.getProperty(hash, name, checkValid);
4046        }
4047
4048      }
4049
4050      @Override
4051      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4052        switch (hash) {
4053        case -887328209: // system
4054          this.system = TypeConvertor.castToUri(value); // UriType
4055          return value;
4056        case 1732898850: // abstract
4057          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
4058          return value;
4059        case 24665195: // inactive
4060          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
4061          return value;
4062        case 351608024: // version
4063          this.version = TypeConvertor.castToString(value); // StringType
4064          return value;
4065        case 3059181: // code
4066          this.code = TypeConvertor.castToCode(value); // CodeType
4067          return value;
4068        case 1671764162: // display
4069          this.display = TypeConvertor.castToString(value); // StringType
4070          return value;
4071        case -900931593: // designation
4072          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
4073          return value;
4074        case -993141291: // property
4075          this.getProperty().add((ConceptPropertyComponent) value); // ConceptPropertyComponent
4076          return value;
4077        case -567445985: // contains
4078          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
4079          return value;
4080        default: return super.setProperty(hash, name, value);
4081        }
4082
4083      }
4084
4085      @Override
4086      public Base setProperty(String name, Base value) throws FHIRException {
4087        if (name.equals("system")) {
4088          this.system = TypeConvertor.castToUri(value); // UriType
4089        } else if (name.equals("abstract")) {
4090          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
4091        } else if (name.equals("inactive")) {
4092          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
4093        } else if (name.equals("version")) {
4094          this.version = TypeConvertor.castToString(value); // StringType
4095        } else if (name.equals("code")) {
4096          this.code = TypeConvertor.castToCode(value); // CodeType
4097        } else if (name.equals("display")) {
4098          this.display = TypeConvertor.castToString(value); // StringType
4099        } else if (name.equals("designation")) {
4100          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
4101        } else if (name.equals("property")) {
4102          this.getProperty().add((ConceptPropertyComponent) value);
4103        } else if (name.equals("contains")) {
4104          this.getContains().add((ValueSetExpansionContainsComponent) value);
4105        } else
4106          return super.setProperty(name, value);
4107        return value;
4108      }
4109
4110      @Override
4111      public Base makeProperty(int hash, String name) throws FHIRException {
4112        switch (hash) {
4113        case -887328209:  return getSystemElement();
4114        case 1732898850:  return getAbstractElement();
4115        case 24665195:  return getInactiveElement();
4116        case 351608024:  return getVersionElement();
4117        case 3059181:  return getCodeElement();
4118        case 1671764162:  return getDisplayElement();
4119        case -900931593:  return addDesignation(); 
4120        case -993141291:  return addProperty(); 
4121        case -567445985:  return addContains(); 
4122        default: return super.makeProperty(hash, name);
4123        }
4124
4125      }
4126
4127      @Override
4128      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4129        switch (hash) {
4130        case -887328209: /*system*/ return new String[] {"uri"};
4131        case 1732898850: /*abstract*/ return new String[] {"boolean"};
4132        case 24665195: /*inactive*/ return new String[] {"boolean"};
4133        case 351608024: /*version*/ return new String[] {"string"};
4134        case 3059181: /*code*/ return new String[] {"code"};
4135        case 1671764162: /*display*/ return new String[] {"string"};
4136        case -900931593: /*designation*/ return new String[] {"@ValueSet.compose.include.concept.designation"};
4137        case -993141291: /*property*/ return new String[] {};
4138        case -567445985: /*contains*/ return new String[] {"@ValueSet.expansion.contains"};
4139        default: return super.getTypesForProperty(hash, name);
4140        }
4141
4142      }
4143
4144      @Override
4145      public Base addChild(String name) throws FHIRException {
4146        if (name.equals("system")) {
4147          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.system");
4148        }
4149        else if (name.equals("abstract")) {
4150          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.abstract");
4151        }
4152        else if (name.equals("inactive")) {
4153          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.inactive");
4154        }
4155        else if (name.equals("version")) {
4156          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.version");
4157        }
4158        else if (name.equals("code")) {
4159          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.code");
4160        }
4161        else if (name.equals("display")) {
4162          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.display");
4163        }
4164        else if (name.equals("designation")) {
4165          return addDesignation();
4166        }
4167        else if (name.equals("property")) {
4168          return addProperty();
4169        }
4170        else if (name.equals("contains")) {
4171          return addContains();
4172        }
4173        else
4174          return super.addChild(name);
4175      }
4176
4177      public ValueSetExpansionContainsComponent copy() {
4178        ValueSetExpansionContainsComponent dst = new ValueSetExpansionContainsComponent();
4179        copyValues(dst);
4180        return dst;
4181      }
4182
4183      public void copyValues(ValueSetExpansionContainsComponent dst) {
4184        super.copyValues(dst);
4185        dst.system = system == null ? null : system.copy();
4186        dst.abstract_ = abstract_ == null ? null : abstract_.copy();
4187        dst.inactive = inactive == null ? null : inactive.copy();
4188        dst.version = version == null ? null : version.copy();
4189        dst.code = code == null ? null : code.copy();
4190        dst.display = display == null ? null : display.copy();
4191        if (designation != null) {
4192          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
4193          for (ConceptReferenceDesignationComponent i : designation)
4194            dst.designation.add(i.copy());
4195        };
4196        if (property != null) {
4197          dst.property = new ArrayList<ConceptPropertyComponent>();
4198          for (ConceptPropertyComponent i : property)
4199            dst.property.add(i.copy());
4200        };
4201        if (contains != null) {
4202          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4203          for (ValueSetExpansionContainsComponent i : contains)
4204            dst.contains.add(i.copy());
4205        };
4206      }
4207
4208      @Override
4209      public boolean equalsDeep(Base other_) {
4210        if (!super.equalsDeep(other_))
4211          return false;
4212        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4213          return false;
4214        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4215        return compareDeep(system, o.system, true) && compareDeep(abstract_, o.abstract_, true) && compareDeep(inactive, o.inactive, true)
4216           && compareDeep(version, o.version, true) && compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
4217           && compareDeep(designation, o.designation, true) && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true)
4218          ;
4219      }
4220
4221      @Override
4222      public boolean equalsShallow(Base other_) {
4223        if (!super.equalsShallow(other_))
4224          return false;
4225        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4226          return false;
4227        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4228        return compareValues(system, o.system, true) && compareValues(abstract_, o.abstract_, true) && compareValues(inactive, o.inactive, true)
4229           && compareValues(version, o.version, true) && compareValues(code, o.code, true) && compareValues(display, o.display, true)
4230          ;
4231      }
4232
4233      public boolean isEmpty() {
4234        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, abstract_, inactive
4235          , version, code, display, designation, property, contains);
4236      }
4237
4238  public String fhirType() {
4239    return "ValueSet.expansion.contains";
4240
4241  }
4242
4243  }
4244
4245    @Block()
4246    public static class ConceptPropertyComponent extends BackboneElement implements IBaseBackboneElement {
4247        /**
4248         * A code that is a reference to ValueSet.expansion.property.code.
4249         */
4250        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4251        @Description(shortDefinition="Reference to ValueSet.expansion.property.code", formalDefinition="A code that is a reference to ValueSet.expansion.property.code." )
4252        protected CodeType code;
4253
4254        /**
4255         * The value of this property.
4256         */
4257        @Child(name = "value", type = {CodeType.class, Coding.class, StringType.class, IntegerType.class, BooleanType.class, DateTimeType.class, DecimalType.class}, order=2, min=1, max=1, modifier=false, summary=false)
4258        @Description(shortDefinition="Value of the property for this concept", formalDefinition="The value of this property." )
4259        protected DataType value;
4260
4261        /**
4262         * A subproperty value for this concept.
4263         */
4264        @Child(name = "subProperty", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
4265        @Description(shortDefinition="SubProperty value for the concept", formalDefinition="A subproperty value for this concept." )
4266        protected List<ConceptSubPropertyComponent> subProperty;
4267
4268        private static final long serialVersionUID = -948620650L;
4269
4270    /**
4271     * Constructor
4272     */
4273      public ConceptPropertyComponent() {
4274        super();
4275      }
4276
4277    /**
4278     * Constructor
4279     */
4280      public ConceptPropertyComponent(String code, DataType value) {
4281        super();
4282        this.setCode(code);
4283        this.setValue(value);
4284      }
4285
4286        /**
4287         * @return {@link #code} (A code that is a reference to ValueSet.expansion.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
4288         */
4289        public CodeType getCodeElement() { 
4290          if (this.code == null)
4291            if (Configuration.errorOnAutoCreate())
4292              throw new Error("Attempt to auto-create ConceptPropertyComponent.code");
4293            else if (Configuration.doAutoCreate())
4294              this.code = new CodeType(); // bb
4295          return this.code;
4296        }
4297
4298        public boolean hasCodeElement() { 
4299          return this.code != null && !this.code.isEmpty();
4300        }
4301
4302        public boolean hasCode() { 
4303          return this.code != null && !this.code.isEmpty();
4304        }
4305
4306        /**
4307         * @param value {@link #code} (A code that is a reference to ValueSet.expansion.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
4308         */
4309        public ConceptPropertyComponent setCodeElement(CodeType value) { 
4310          this.code = value;
4311          return this;
4312        }
4313
4314        /**
4315         * @return A code that is a reference to ValueSet.expansion.property.code.
4316         */
4317        public String getCode() { 
4318          return this.code == null ? null : this.code.getValue();
4319        }
4320
4321        /**
4322         * @param value A code that is a reference to ValueSet.expansion.property.code.
4323         */
4324        public ConceptPropertyComponent setCode(String value) { 
4325            if (this.code == null)
4326              this.code = new CodeType();
4327            this.code.setValue(value);
4328          return this;
4329        }
4330
4331        /**
4332         * @return {@link #value} (The value of this property.)
4333         */
4334        public DataType getValue() { 
4335          return this.value;
4336        }
4337
4338        /**
4339         * @return {@link #value} (The value of this property.)
4340         */
4341        public CodeType getValueCodeType() throws FHIRException { 
4342          if (this.value == null)
4343            this.value = new CodeType();
4344          if (!(this.value instanceof CodeType))
4345            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
4346          return (CodeType) this.value;
4347        }
4348
4349        public boolean hasValueCodeType() { 
4350          return this != null && this.value instanceof CodeType;
4351        }
4352
4353        /**
4354         * @return {@link #value} (The value of this property.)
4355         */
4356        public Coding getValueCoding() throws FHIRException { 
4357          if (this.value == null)
4358            this.value = new Coding();
4359          if (!(this.value instanceof Coding))
4360            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
4361          return (Coding) this.value;
4362        }
4363
4364        public boolean hasValueCoding() { 
4365          return this != null && this.value instanceof Coding;
4366        }
4367
4368        /**
4369         * @return {@link #value} (The value of this property.)
4370         */
4371        public StringType getValueStringType() throws FHIRException { 
4372          if (this.value == null)
4373            this.value = new StringType();
4374          if (!(this.value instanceof StringType))
4375            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
4376          return (StringType) this.value;
4377        }
4378
4379        public boolean hasValueStringType() { 
4380          return this != null && this.value instanceof StringType;
4381        }
4382
4383        /**
4384         * @return {@link #value} (The value of this property.)
4385         */
4386        public IntegerType getValueIntegerType() throws FHIRException { 
4387          if (this.value == null)
4388            this.value = new IntegerType();
4389          if (!(this.value instanceof IntegerType))
4390            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
4391          return (IntegerType) this.value;
4392        }
4393
4394        public boolean hasValueIntegerType() { 
4395          return this != null && this.value instanceof IntegerType;
4396        }
4397
4398        /**
4399         * @return {@link #value} (The value of this property.)
4400         */
4401        public BooleanType getValueBooleanType() throws FHIRException { 
4402          if (this.value == null)
4403            this.value = new BooleanType();
4404          if (!(this.value instanceof BooleanType))
4405            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
4406          return (BooleanType) this.value;
4407        }
4408
4409        public boolean hasValueBooleanType() { 
4410          return this != null && this.value instanceof BooleanType;
4411        }
4412
4413        /**
4414         * @return {@link #value} (The value of this property.)
4415         */
4416        public DateTimeType getValueDateTimeType() throws FHIRException { 
4417          if (this.value == null)
4418            this.value = new DateTimeType();
4419          if (!(this.value instanceof DateTimeType))
4420            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
4421          return (DateTimeType) this.value;
4422        }
4423
4424        public boolean hasValueDateTimeType() { 
4425          return this != null && this.value instanceof DateTimeType;
4426        }
4427
4428        /**
4429         * @return {@link #value} (The value of this property.)
4430         */
4431        public DecimalType getValueDecimalType() throws FHIRException { 
4432          if (this.value == null)
4433            this.value = new DecimalType();
4434          if (!(this.value instanceof DecimalType))
4435            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
4436          return (DecimalType) this.value;
4437        }
4438
4439        public boolean hasValueDecimalType() { 
4440          return this != null && this.value instanceof DecimalType;
4441        }
4442
4443        public boolean hasValue() { 
4444          return this.value != null && !this.value.isEmpty();
4445        }
4446
4447        /**
4448         * @param value {@link #value} (The value of this property.)
4449         */
4450        public ConceptPropertyComponent setValue(DataType value) { 
4451          if (value != null && !(value instanceof CodeType || value instanceof Coding || value instanceof StringType || value instanceof IntegerType || value instanceof BooleanType || value instanceof DateTimeType || value instanceof DecimalType))
4452            throw new FHIRException("Not the right type for ValueSet.expansion.contains.property.value[x]: "+value.fhirType());
4453          this.value = value;
4454          return this;
4455        }
4456
4457        /**
4458         * @return {@link #subProperty} (A subproperty value for this concept.)
4459         */
4460        public List<ConceptSubPropertyComponent> getSubProperty() { 
4461          if (this.subProperty == null)
4462            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4463          return this.subProperty;
4464        }
4465
4466        /**
4467         * @return Returns a reference to <code>this</code> for easy method chaining
4468         */
4469        public ConceptPropertyComponent setSubProperty(List<ConceptSubPropertyComponent> theSubProperty) { 
4470          this.subProperty = theSubProperty;
4471          return this;
4472        }
4473
4474        public boolean hasSubProperty() { 
4475          if (this.subProperty == null)
4476            return false;
4477          for (ConceptSubPropertyComponent item : this.subProperty)
4478            if (!item.isEmpty())
4479              return true;
4480          return false;
4481        }
4482
4483        public ConceptSubPropertyComponent addSubProperty() { //3
4484          ConceptSubPropertyComponent t = new ConceptSubPropertyComponent();
4485          if (this.subProperty == null)
4486            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4487          this.subProperty.add(t);
4488          return t;
4489        }
4490
4491        public ConceptPropertyComponent addSubProperty(ConceptSubPropertyComponent t) { //3
4492          if (t == null)
4493            return this;
4494          if (this.subProperty == null)
4495            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4496          this.subProperty.add(t);
4497          return this;
4498        }
4499
4500        /**
4501         * @return The first repetition of repeating field {@link #subProperty}, creating it if it does not already exist {3}
4502         */
4503        public ConceptSubPropertyComponent getSubPropertyFirstRep() { 
4504          if (getSubProperty().isEmpty()) {
4505            addSubProperty();
4506          }
4507          return getSubProperty().get(0);
4508        }
4509
4510        protected void listChildren(List<Property> children) {
4511          super.listChildren(children);
4512          children.add(new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code));
4513          children.add(new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value));
4514          children.add(new Property("subProperty", "", "A subproperty value for this concept.", 0, java.lang.Integer.MAX_VALUE, subProperty));
4515        }
4516
4517        @Override
4518        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4519          switch (_hash) {
4520          case 3059181: /*code*/  return new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code);
4521          case -1410166417: /*value[x]*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4522          case 111972721: /*value*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4523          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of this property.", 0, 1, value);
4524          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of this property.", 0, 1, value);
4525          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of this property.", 0, 1, value);
4526          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of this property.", 0, 1, value);
4527          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of this property.", 0, 1, value);
4528          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of this property.", 0, 1, value);
4529          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of this property.", 0, 1, value);
4530          case 321372213: /*subProperty*/  return new Property("subProperty", "", "A subproperty value for this concept.", 0, java.lang.Integer.MAX_VALUE, subProperty);
4531          default: return super.getNamedProperty(_hash, _name, _checkValid);
4532          }
4533
4534        }
4535
4536      @Override
4537      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4538        switch (hash) {
4539        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4540        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
4541        case 321372213: /*subProperty*/ return this.subProperty == null ? new Base[0] : this.subProperty.toArray(new Base[this.subProperty.size()]); // ConceptSubPropertyComponent
4542        default: return super.getProperty(hash, name, checkValid);
4543        }
4544
4545      }
4546
4547      @Override
4548      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4549        switch (hash) {
4550        case 3059181: // code
4551          this.code = TypeConvertor.castToCode(value); // CodeType
4552          return value;
4553        case 111972721: // value
4554          this.value = TypeConvertor.castToType(value); // DataType
4555          return value;
4556        case 321372213: // subProperty
4557          this.getSubProperty().add((ConceptSubPropertyComponent) value); // ConceptSubPropertyComponent
4558          return value;
4559        default: return super.setProperty(hash, name, value);
4560        }
4561
4562      }
4563
4564      @Override
4565      public Base setProperty(String name, Base value) throws FHIRException {
4566        if (name.equals("code")) {
4567          this.code = TypeConvertor.castToCode(value); // CodeType
4568        } else if (name.equals("value[x]")) {
4569          this.value = TypeConvertor.castToType(value); // DataType
4570        } else if (name.equals("subProperty")) {
4571          this.getSubProperty().add((ConceptSubPropertyComponent) value);
4572        } else
4573          return super.setProperty(name, value);
4574        return value;
4575      }
4576
4577      @Override
4578      public Base makeProperty(int hash, String name) throws FHIRException {
4579        switch (hash) {
4580        case 3059181:  return getCodeElement();
4581        case -1410166417:  return getValue();
4582        case 111972721:  return getValue();
4583        case 321372213:  return addSubProperty(); 
4584        default: return super.makeProperty(hash, name);
4585        }
4586
4587      }
4588
4589      @Override
4590      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4591        switch (hash) {
4592        case 3059181: /*code*/ return new String[] {"code"};
4593        case 111972721: /*value*/ return new String[] {"code", "Coding", "string", "integer", "boolean", "dateTime", "decimal"};
4594        case 321372213: /*subProperty*/ return new String[] {};
4595        default: return super.getTypesForProperty(hash, name);
4596        }
4597
4598      }
4599
4600      @Override
4601      public Base addChild(String name) throws FHIRException {
4602        if (name.equals("code")) {
4603          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.property.code");
4604        }
4605        else if (name.equals("valueCode")) {
4606          this.value = new CodeType();
4607          return this.value;
4608        }
4609        else if (name.equals("valueCoding")) {
4610          this.value = new Coding();
4611          return this.value;
4612        }
4613        else if (name.equals("valueString")) {
4614          this.value = new StringType();
4615          return this.value;
4616        }
4617        else if (name.equals("valueInteger")) {
4618          this.value = new IntegerType();
4619          return this.value;
4620        }
4621        else if (name.equals("valueBoolean")) {
4622          this.value = new BooleanType();
4623          return this.value;
4624        }
4625        else if (name.equals("valueDateTime")) {
4626          this.value = new DateTimeType();
4627          return this.value;
4628        }
4629        else if (name.equals("valueDecimal")) {
4630          this.value = new DecimalType();
4631          return this.value;
4632        }
4633        else if (name.equals("subProperty")) {
4634          return addSubProperty();
4635        }
4636        else
4637          return super.addChild(name);
4638      }
4639
4640      public ConceptPropertyComponent copy() {
4641        ConceptPropertyComponent dst = new ConceptPropertyComponent();
4642        copyValues(dst);
4643        return dst;
4644      }
4645
4646      public void copyValues(ConceptPropertyComponent dst) {
4647        super.copyValues(dst);
4648        dst.code = code == null ? null : code.copy();
4649        dst.value = value == null ? null : value.copy();
4650        if (subProperty != null) {
4651          dst.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4652          for (ConceptSubPropertyComponent i : subProperty)
4653            dst.subProperty.add(i.copy());
4654        };
4655      }
4656
4657      @Override
4658      public boolean equalsDeep(Base other_) {
4659        if (!super.equalsDeep(other_))
4660          return false;
4661        if (!(other_ instanceof ConceptPropertyComponent))
4662          return false;
4663        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4664        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(subProperty, o.subProperty, true)
4665          ;
4666      }
4667
4668      @Override
4669      public boolean equalsShallow(Base other_) {
4670        if (!super.equalsShallow(other_))
4671          return false;
4672        if (!(other_ instanceof ConceptPropertyComponent))
4673          return false;
4674        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4675        return compareValues(code, o.code, true);
4676      }
4677
4678      public boolean isEmpty() {
4679        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, subProperty
4680          );
4681      }
4682
4683  public String fhirType() {
4684    return "ValueSet.expansion.contains.property";
4685
4686  }
4687
4688  }
4689
4690    @Block()
4691    public static class ConceptSubPropertyComponent extends BackboneElement implements IBaseBackboneElement {
4692        /**
4693         * A code that is a reference to ValueSet.expansion.property.code.
4694         */
4695        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4696        @Description(shortDefinition="Reference to ValueSet.expansion.property.code", formalDefinition="A code that is a reference to ValueSet.expansion.property.code." )
4697        protected CodeType code;
4698
4699        /**
4700         * The value of this subproperty.
4701         */
4702        @Child(name = "value", type = {CodeType.class, Coding.class, StringType.class, IntegerType.class, BooleanType.class, DateTimeType.class, DecimalType.class}, order=2, min=1, max=1, modifier=false, summary=false)
4703        @Description(shortDefinition="Value of the subproperty for this concept", formalDefinition="The value of this subproperty." )
4704        protected DataType value;
4705
4706        private static final long serialVersionUID = -422546419L;
4707
4708    /**
4709     * Constructor
4710     */
4711      public ConceptSubPropertyComponent() {
4712        super();
4713      }
4714
4715    /**
4716     * Constructor
4717     */
4718      public ConceptSubPropertyComponent(String code, DataType value) {
4719        super();
4720        this.setCode(code);
4721        this.setValue(value);
4722      }
4723
4724        /**
4725         * @return {@link #code} (A code that is a reference to ValueSet.expansion.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
4726         */
4727        public CodeType getCodeElement() { 
4728          if (this.code == null)
4729            if (Configuration.errorOnAutoCreate())
4730              throw new Error("Attempt to auto-create ConceptSubPropertyComponent.code");
4731            else if (Configuration.doAutoCreate())
4732              this.code = new CodeType(); // bb
4733          return this.code;
4734        }
4735
4736        public boolean hasCodeElement() { 
4737          return this.code != null && !this.code.isEmpty();
4738        }
4739
4740        public boolean hasCode() { 
4741          return this.code != null && !this.code.isEmpty();
4742        }
4743
4744        /**
4745         * @param value {@link #code} (A code that is a reference to ValueSet.expansion.property.code.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
4746         */
4747        public ConceptSubPropertyComponent setCodeElement(CodeType value) { 
4748          this.code = value;
4749          return this;
4750        }
4751
4752        /**
4753         * @return A code that is a reference to ValueSet.expansion.property.code.
4754         */
4755        public String getCode() { 
4756          return this.code == null ? null : this.code.getValue();
4757        }
4758
4759        /**
4760         * @param value A code that is a reference to ValueSet.expansion.property.code.
4761         */
4762        public ConceptSubPropertyComponent setCode(String value) { 
4763            if (this.code == null)
4764              this.code = new CodeType();
4765            this.code.setValue(value);
4766          return this;
4767        }
4768
4769        /**
4770         * @return {@link #value} (The value of this subproperty.)
4771         */
4772        public DataType getValue() { 
4773          return this.value;
4774        }
4775
4776        /**
4777         * @return {@link #value} (The value of this subproperty.)
4778         */
4779        public CodeType getValueCodeType() throws FHIRException { 
4780          if (this.value == null)
4781            this.value = new CodeType();
4782          if (!(this.value instanceof CodeType))
4783            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
4784          return (CodeType) this.value;
4785        }
4786
4787        public boolean hasValueCodeType() { 
4788          return this != null && this.value instanceof CodeType;
4789        }
4790
4791        /**
4792         * @return {@link #value} (The value of this subproperty.)
4793         */
4794        public Coding getValueCoding() throws FHIRException { 
4795          if (this.value == null)
4796            this.value = new Coding();
4797          if (!(this.value instanceof Coding))
4798            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
4799          return (Coding) this.value;
4800        }
4801
4802        public boolean hasValueCoding() { 
4803          return this != null && this.value instanceof Coding;
4804        }
4805
4806        /**
4807         * @return {@link #value} (The value of this subproperty.)
4808         */
4809        public StringType getValueStringType() throws FHIRException { 
4810          if (this.value == null)
4811            this.value = new StringType();
4812          if (!(this.value instanceof StringType))
4813            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
4814          return (StringType) this.value;
4815        }
4816
4817        public boolean hasValueStringType() { 
4818          return this != null && this.value instanceof StringType;
4819        }
4820
4821        /**
4822         * @return {@link #value} (The value of this subproperty.)
4823         */
4824        public IntegerType getValueIntegerType() throws FHIRException { 
4825          if (this.value == null)
4826            this.value = new IntegerType();
4827          if (!(this.value instanceof IntegerType))
4828            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
4829          return (IntegerType) this.value;
4830        }
4831
4832        public boolean hasValueIntegerType() { 
4833          return this != null && this.value instanceof IntegerType;
4834        }
4835
4836        /**
4837         * @return {@link #value} (The value of this subproperty.)
4838         */
4839        public BooleanType getValueBooleanType() throws FHIRException { 
4840          if (this.value == null)
4841            this.value = new BooleanType();
4842          if (!(this.value instanceof BooleanType))
4843            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
4844          return (BooleanType) this.value;
4845        }
4846
4847        public boolean hasValueBooleanType() { 
4848          return this != null && this.value instanceof BooleanType;
4849        }
4850
4851        /**
4852         * @return {@link #value} (The value of this subproperty.)
4853         */
4854        public DateTimeType getValueDateTimeType() throws FHIRException { 
4855          if (this.value == null)
4856            this.value = new DateTimeType();
4857          if (!(this.value instanceof DateTimeType))
4858            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
4859          return (DateTimeType) this.value;
4860        }
4861
4862        public boolean hasValueDateTimeType() { 
4863          return this != null && this.value instanceof DateTimeType;
4864        }
4865
4866        /**
4867         * @return {@link #value} (The value of this subproperty.)
4868         */
4869        public DecimalType getValueDecimalType() throws FHIRException { 
4870          if (this.value == null)
4871            this.value = new DecimalType();
4872          if (!(this.value instanceof DecimalType))
4873            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
4874          return (DecimalType) this.value;
4875        }
4876
4877        public boolean hasValueDecimalType() { 
4878          return this != null && this.value instanceof DecimalType;
4879        }
4880
4881        public boolean hasValue() { 
4882          return this.value != null && !this.value.isEmpty();
4883        }
4884
4885        /**
4886         * @param value {@link #value} (The value of this subproperty.)
4887         */
4888        public ConceptSubPropertyComponent setValue(DataType value) { 
4889          if (value != null && !(value instanceof CodeType || value instanceof Coding || value instanceof StringType || value instanceof IntegerType || value instanceof BooleanType || value instanceof DateTimeType || value instanceof DecimalType))
4890            throw new FHIRException("Not the right type for ValueSet.expansion.contains.property.subProperty.value[x]: "+value.fhirType());
4891          this.value = value;
4892          return this;
4893        }
4894
4895        protected void listChildren(List<Property> children) {
4896          super.listChildren(children);
4897          children.add(new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code));
4898          children.add(new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value));
4899        }
4900
4901        @Override
4902        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4903          switch (_hash) {
4904          case 3059181: /*code*/  return new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code);
4905          case -1410166417: /*value[x]*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value);
4906          case 111972721: /*value*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value);
4907          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of this subproperty.", 0, 1, value);
4908          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of this subproperty.", 0, 1, value);
4909          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of this subproperty.", 0, 1, value);
4910          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of this subproperty.", 0, 1, value);
4911          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of this subproperty.", 0, 1, value);
4912          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of this subproperty.", 0, 1, value);
4913          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of this subproperty.", 0, 1, value);
4914          default: return super.getNamedProperty(_hash, _name, _checkValid);
4915          }
4916
4917        }
4918
4919      @Override
4920      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4921        switch (hash) {
4922        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4923        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
4924        default: return super.getProperty(hash, name, checkValid);
4925        }
4926
4927      }
4928
4929      @Override
4930      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4931        switch (hash) {
4932        case 3059181: // code
4933          this.code = TypeConvertor.castToCode(value); // CodeType
4934          return value;
4935        case 111972721: // value
4936          this.value = TypeConvertor.castToType(value); // DataType
4937          return value;
4938        default: return super.setProperty(hash, name, value);
4939        }
4940
4941      }
4942
4943      @Override
4944      public Base setProperty(String name, Base value) throws FHIRException {
4945        if (name.equals("code")) {
4946          this.code = TypeConvertor.castToCode(value); // CodeType
4947        } else if (name.equals("value[x]")) {
4948          this.value = TypeConvertor.castToType(value); // DataType
4949        } else
4950          return super.setProperty(name, value);
4951        return value;
4952      }
4953
4954      @Override
4955      public Base makeProperty(int hash, String name) throws FHIRException {
4956        switch (hash) {
4957        case 3059181:  return getCodeElement();
4958        case -1410166417:  return getValue();
4959        case 111972721:  return getValue();
4960        default: return super.makeProperty(hash, name);
4961        }
4962
4963      }
4964
4965      @Override
4966      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4967        switch (hash) {
4968        case 3059181: /*code*/ return new String[] {"code"};
4969        case 111972721: /*value*/ return new String[] {"code", "Coding", "string", "integer", "boolean", "dateTime", "decimal"};
4970        default: return super.getTypesForProperty(hash, name);
4971        }
4972
4973      }
4974
4975      @Override
4976      public Base addChild(String name) throws FHIRException {
4977        if (name.equals("code")) {
4978          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.property.subProperty.code");
4979        }
4980        else if (name.equals("valueCode")) {
4981          this.value = new CodeType();
4982          return this.value;
4983        }
4984        else if (name.equals("valueCoding")) {
4985          this.value = new Coding();
4986          return this.value;
4987        }
4988        else if (name.equals("valueString")) {
4989          this.value = new StringType();
4990          return this.value;
4991        }
4992        else if (name.equals("valueInteger")) {
4993          this.value = new IntegerType();
4994          return this.value;
4995        }
4996        else if (name.equals("valueBoolean")) {
4997          this.value = new BooleanType();
4998          return this.value;
4999        }
5000        else if (name.equals("valueDateTime")) {
5001          this.value = new DateTimeType();
5002          return this.value;
5003        }
5004        else if (name.equals("valueDecimal")) {
5005          this.value = new DecimalType();
5006          return this.value;
5007        }
5008        else
5009          return super.addChild(name);
5010      }
5011
5012      public ConceptSubPropertyComponent copy() {
5013        ConceptSubPropertyComponent dst = new ConceptSubPropertyComponent();
5014        copyValues(dst);
5015        return dst;
5016      }
5017
5018      public void copyValues(ConceptSubPropertyComponent dst) {
5019        super.copyValues(dst);
5020        dst.code = code == null ? null : code.copy();
5021        dst.value = value == null ? null : value.copy();
5022      }
5023
5024      @Override
5025      public boolean equalsDeep(Base other_) {
5026        if (!super.equalsDeep(other_))
5027          return false;
5028        if (!(other_ instanceof ConceptSubPropertyComponent))
5029          return false;
5030        ConceptSubPropertyComponent o = (ConceptSubPropertyComponent) other_;
5031        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true);
5032      }
5033
5034      @Override
5035      public boolean equalsShallow(Base other_) {
5036        if (!super.equalsShallow(other_))
5037          return false;
5038        if (!(other_ instanceof ConceptSubPropertyComponent))
5039          return false;
5040        ConceptSubPropertyComponent o = (ConceptSubPropertyComponent) other_;
5041        return compareValues(code, o.code, true);
5042      }
5043
5044      public boolean isEmpty() {
5045        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value);
5046      }
5047
5048  public String fhirType() {
5049    return "ValueSet.expansion.contains.property.subProperty";
5050
5051  }
5052
5053  }
5054
5055    @Block()
5056    public static class ValueSetScopeComponent extends BackboneElement implements IBaseBackboneElement {
5057        /**
5058         * Criteria describing which concepts or codes should be included and why.
5059         */
5060        @Child(name = "inclusionCriteria", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
5061        @Description(shortDefinition="Criteria describing which concepts or codes should be included and why", formalDefinition="Criteria describing which concepts or codes should be included and why." )
5062        protected StringType inclusionCriteria;
5063
5064        /**
5065         * Criteria describing which concepts or codes should be excluded and why.
5066         */
5067        @Child(name = "exclusionCriteria", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
5068        @Description(shortDefinition="Criteria describing which concepts or codes should be excluded and why", formalDefinition="Criteria describing which concepts or codes should be excluded and why." )
5069        protected StringType exclusionCriteria;
5070
5071        private static final long serialVersionUID = -641434610L;
5072
5073    /**
5074     * Constructor
5075     */
5076      public ValueSetScopeComponent() {
5077        super();
5078      }
5079
5080        /**
5081         * @return {@link #inclusionCriteria} (Criteria describing which concepts or codes should be included and why.). This is the underlying object with id, value and extensions. The accessor "getInclusionCriteria" gives direct access to the value
5082         */
5083        public StringType getInclusionCriteriaElement() { 
5084          if (this.inclusionCriteria == null)
5085            if (Configuration.errorOnAutoCreate())
5086              throw new Error("Attempt to auto-create ValueSetScopeComponent.inclusionCriteria");
5087            else if (Configuration.doAutoCreate())
5088              this.inclusionCriteria = new StringType(); // bb
5089          return this.inclusionCriteria;
5090        }
5091
5092        public boolean hasInclusionCriteriaElement() { 
5093          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
5094        }
5095
5096        public boolean hasInclusionCriteria() { 
5097          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
5098        }
5099
5100        /**
5101         * @param value {@link #inclusionCriteria} (Criteria describing which concepts or codes should be included and why.). This is the underlying object with id, value and extensions. The accessor "getInclusionCriteria" gives direct access to the value
5102         */
5103        public ValueSetScopeComponent setInclusionCriteriaElement(StringType value) { 
5104          this.inclusionCriteria = value;
5105          return this;
5106        }
5107
5108        /**
5109         * @return Criteria describing which concepts or codes should be included and why.
5110         */
5111        public String getInclusionCriteria() { 
5112          return this.inclusionCriteria == null ? null : this.inclusionCriteria.getValue();
5113        }
5114
5115        /**
5116         * @param value Criteria describing which concepts or codes should be included and why.
5117         */
5118        public ValueSetScopeComponent setInclusionCriteria(String value) { 
5119          if (Utilities.noString(value))
5120            this.inclusionCriteria = null;
5121          else {
5122            if (this.inclusionCriteria == null)
5123              this.inclusionCriteria = new StringType();
5124            this.inclusionCriteria.setValue(value);
5125          }
5126          return this;
5127        }
5128
5129        /**
5130         * @return {@link #exclusionCriteria} (Criteria describing which concepts or codes should be excluded and why.). This is the underlying object with id, value and extensions. The accessor "getExclusionCriteria" gives direct access to the value
5131         */
5132        public StringType getExclusionCriteriaElement() { 
5133          if (this.exclusionCriteria == null)
5134            if (Configuration.errorOnAutoCreate())
5135              throw new Error("Attempt to auto-create ValueSetScopeComponent.exclusionCriteria");
5136            else if (Configuration.doAutoCreate())
5137              this.exclusionCriteria = new StringType(); // bb
5138          return this.exclusionCriteria;
5139        }
5140
5141        public boolean hasExclusionCriteriaElement() { 
5142          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
5143        }
5144
5145        public boolean hasExclusionCriteria() { 
5146          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
5147        }
5148
5149        /**
5150         * @param value {@link #exclusionCriteria} (Criteria describing which concepts or codes should be excluded and why.). This is the underlying object with id, value and extensions. The accessor "getExclusionCriteria" gives direct access to the value
5151         */
5152        public ValueSetScopeComponent setExclusionCriteriaElement(StringType value) { 
5153          this.exclusionCriteria = value;
5154          return this;
5155        }
5156
5157        /**
5158         * @return Criteria describing which concepts or codes should be excluded and why.
5159         */
5160        public String getExclusionCriteria() { 
5161          return this.exclusionCriteria == null ? null : this.exclusionCriteria.getValue();
5162        }
5163
5164        /**
5165         * @param value Criteria describing which concepts or codes should be excluded and why.
5166         */
5167        public ValueSetScopeComponent setExclusionCriteria(String value) { 
5168          if (Utilities.noString(value))
5169            this.exclusionCriteria = null;
5170          else {
5171            if (this.exclusionCriteria == null)
5172              this.exclusionCriteria = new StringType();
5173            this.exclusionCriteria.setValue(value);
5174          }
5175          return this;
5176        }
5177
5178        protected void listChildren(List<Property> children) {
5179          super.listChildren(children);
5180          children.add(new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria));
5181          children.add(new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria));
5182        }
5183
5184        @Override
5185        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5186          switch (_hash) {
5187          case -1380638565: /*inclusionCriteria*/  return new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria);
5188          case 985682765: /*exclusionCriteria*/  return new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria);
5189          default: return super.getNamedProperty(_hash, _name, _checkValid);
5190          }
5191
5192        }
5193
5194      @Override
5195      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5196        switch (hash) {
5197        case -1380638565: /*inclusionCriteria*/ return this.inclusionCriteria == null ? new Base[0] : new Base[] {this.inclusionCriteria}; // StringType
5198        case 985682765: /*exclusionCriteria*/ return this.exclusionCriteria == null ? new Base[0] : new Base[] {this.exclusionCriteria}; // StringType
5199        default: return super.getProperty(hash, name, checkValid);
5200        }
5201
5202      }
5203
5204      @Override
5205      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5206        switch (hash) {
5207        case -1380638565: // inclusionCriteria
5208          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
5209          return value;
5210        case 985682765: // exclusionCriteria
5211          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
5212          return value;
5213        default: return super.setProperty(hash, name, value);
5214        }
5215
5216      }
5217
5218      @Override
5219      public Base setProperty(String name, Base value) throws FHIRException {
5220        if (name.equals("inclusionCriteria")) {
5221          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
5222        } else if (name.equals("exclusionCriteria")) {
5223          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
5224        } else
5225          return super.setProperty(name, value);
5226        return value;
5227      }
5228
5229      @Override
5230      public Base makeProperty(int hash, String name) throws FHIRException {
5231        switch (hash) {
5232        case -1380638565:  return getInclusionCriteriaElement();
5233        case 985682765:  return getExclusionCriteriaElement();
5234        default: return super.makeProperty(hash, name);
5235        }
5236
5237      }
5238
5239      @Override
5240      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5241        switch (hash) {
5242        case -1380638565: /*inclusionCriteria*/ return new String[] {"string"};
5243        case 985682765: /*exclusionCriteria*/ return new String[] {"string"};
5244        default: return super.getTypesForProperty(hash, name);
5245        }
5246
5247      }
5248
5249      @Override
5250      public Base addChild(String name) throws FHIRException {
5251        if (name.equals("inclusionCriteria")) {
5252          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.scope.inclusionCriteria");
5253        }
5254        else if (name.equals("exclusionCriteria")) {
5255          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.scope.exclusionCriteria");
5256        }
5257        else
5258          return super.addChild(name);
5259      }
5260
5261      public ValueSetScopeComponent copy() {
5262        ValueSetScopeComponent dst = new ValueSetScopeComponent();
5263        copyValues(dst);
5264        return dst;
5265      }
5266
5267      public void copyValues(ValueSetScopeComponent dst) {
5268        super.copyValues(dst);
5269        dst.inclusionCriteria = inclusionCriteria == null ? null : inclusionCriteria.copy();
5270        dst.exclusionCriteria = exclusionCriteria == null ? null : exclusionCriteria.copy();
5271      }
5272
5273      @Override
5274      public boolean equalsDeep(Base other_) {
5275        if (!super.equalsDeep(other_))
5276          return false;
5277        if (!(other_ instanceof ValueSetScopeComponent))
5278          return false;
5279        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
5280        return compareDeep(inclusionCriteria, o.inclusionCriteria, true) && compareDeep(exclusionCriteria, o.exclusionCriteria, true)
5281          ;
5282      }
5283
5284      @Override
5285      public boolean equalsShallow(Base other_) {
5286        if (!super.equalsShallow(other_))
5287          return false;
5288        if (!(other_ instanceof ValueSetScopeComponent))
5289          return false;
5290        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
5291        return compareValues(inclusionCriteria, o.inclusionCriteria, true) && compareValues(exclusionCriteria, o.exclusionCriteria, true)
5292          ;
5293      }
5294
5295      public boolean isEmpty() {
5296        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(inclusionCriteria, exclusionCriteria
5297          );
5298      }
5299
5300  public String fhirType() {
5301    return "ValueSet.scope";
5302
5303  }
5304
5305  }
5306
5307    /**
5308     * An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.
5309     */
5310    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
5311    @Description(shortDefinition="Canonical identifier for this value set, represented as a URI (globally unique)", formalDefinition="An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers." )
5312    protected UriType url;
5313
5314    /**
5315     * A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.
5316     */
5317    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5318    @Description(shortDefinition="Additional identifier for the value set (business identifier)", formalDefinition="A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance." )
5319    protected List<Identifier> identifier;
5320
5321    /**
5322     * The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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.
5323     */
5324    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
5325    @Description(shortDefinition="Business version of the value set", formalDefinition="The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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." )
5326    protected StringType version;
5327
5328    /**
5329     * Indicates the mechanism used to compare versions to determine which ValueSet is more current.
5330     */
5331    @Child(name = "versionAlgorithm", type = {StringType.class, Coding.class}, order=3, min=0, max=1, modifier=false, summary=true)
5332    @Description(shortDefinition="How to compare versions", formalDefinition="Indicates the mechanism used to compare versions to determine which ValueSet is more current." )
5333    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/version-algorithm")
5334    protected DataType versionAlgorithm;
5335
5336    /**
5337     * A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.
5338     */
5339    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
5340    @Description(shortDefinition="Name for this value set (computer friendly)", formalDefinition="A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation." )
5341    protected StringType name;
5342
5343    /**
5344     * A short, descriptive, user-friendly title for the value set.
5345     */
5346    @Child(name = "title", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
5347    @Description(shortDefinition="Name for this value set (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the value set." )
5348    protected StringType title;
5349
5350    /**
5351     * The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.
5352     */
5353    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
5354    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state." )
5355    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
5356    protected Enumeration<PublicationStatus> status;
5357
5358    /**
5359     * A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
5360     */
5361    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
5362    @Description(shortDefinition="For testing purposes, not real usage", formalDefinition="A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage." )
5363    protected BooleanType experimental;
5364
5365    /**
5366     * The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5367     */
5368    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
5369    @Description(shortDefinition="Date last changed", formalDefinition="The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised." )
5370    protected DateTimeType date;
5371
5372    /**
5373     * The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
5374     */
5375    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
5376    @Description(shortDefinition="Name of the publisher/steward (organization or individual)", formalDefinition="The name of the organization or individual responsible for the release and ongoing maintenance of the value set." )
5377    protected StringType publisher;
5378
5379    /**
5380     * Contact details to assist a user in finding and communicating with the publisher.
5381     */
5382    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5383    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
5384    protected List<ContactDetail> contact;
5385
5386    /**
5387     * A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.
5388     */
5389    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
5390    @Description(shortDefinition="Natural language description of the value set", formalDefinition="A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set." )
5391    protected MarkdownType description;
5392
5393    /**
5394     * 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 value set instances.
5395     */
5396    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5397    @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 value set instances." )
5398    protected List<UsageContext> useContext;
5399
5400    /**
5401     * A legal or geographic region in which the value set is intended to be used.
5402     */
5403    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5404    @Description(shortDefinition="Intended jurisdiction for value set (if applicable)", formalDefinition="A legal or geographic region in which the value set is intended to be used." )
5405    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
5406    protected List<CodeableConcept> jurisdiction;
5407
5408    /**
5409     * If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
5410     */
5411    @Child(name = "immutable", type = {BooleanType.class}, order=14, min=0, max=1, modifier=false, summary=true)
5412    @Description(shortDefinition="Indicates whether or not any change to the content logical definition may occur", formalDefinition="If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change." )
5413    protected BooleanType immutable;
5414
5415    /**
5416     * Explanation of why this value set is needed and why it has been designed as it has.
5417     */
5418    @Child(name = "purpose", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
5419    @Description(shortDefinition="Why this value set is defined", formalDefinition="Explanation of why this value set is needed and why it has been designed as it has." )
5420    protected MarkdownType purpose;
5421
5422    /**
5423     * A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.
5424     */
5425    @Child(name = "copyright", type = {MarkdownType.class}, order=16, min=0, max=1, modifier=false, summary=false)
5426    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set." )
5427    protected MarkdownType copyright;
5428
5429    /**
5430     * A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
5431     */
5432    @Child(name = "copyrightLabel", type = {StringType.class}, order=17, min=0, max=1, modifier=false, summary=false)
5433    @Description(shortDefinition="Copyright holder and year(s)", formalDefinition="A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')." )
5434    protected StringType copyrightLabel;
5435
5436    /**
5437     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
5438     */
5439    @Child(name = "approvalDate", type = {DateType.class}, order=18, min=0, max=1, modifier=false, summary=false)
5440    @Description(shortDefinition="When the ValueSet 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." )
5441    protected DateType approvalDate;
5442
5443    /**
5444     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
5445     */
5446    @Child(name = "lastReviewDate", type = {DateType.class}, order=19, min=0, max=1, modifier=false, summary=false)
5447    @Description(shortDefinition="When the ValueSet was last reviewed by the publisher", formalDefinition="The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date." )
5448    protected DateType lastReviewDate;
5449
5450    /**
5451     * The period during which the ValueSet content was or is planned to be in active use.
5452     */
5453    @Child(name = "effectivePeriod", type = {Period.class}, order=20, min=0, max=1, modifier=false, summary=true)
5454    @Description(shortDefinition="When the ValueSet is expected to be used", formalDefinition="The period during which the ValueSet content was or is planned to be in active use." )
5455    protected Period effectivePeriod;
5456
5457    /**
5458     * Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching.
5459     */
5460    @Child(name = "topic", type = {CodeableConcept.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5461    @Description(shortDefinition="E.g. Education, Treatment, Assessment, etc", formalDefinition="Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching." )
5462    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/definition-topic")
5463    protected List<CodeableConcept> topic;
5464
5465    /**
5466     * An individiual or organization primarily involved in the creation and maintenance of the ValueSet.
5467     */
5468    @Child(name = "author", type = {ContactDetail.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5469    @Description(shortDefinition="Who authored the ValueSet", formalDefinition="An individiual or organization primarily involved in the creation and maintenance of the ValueSet." )
5470    protected List<ContactDetail> author;
5471
5472    /**
5473     * An individual or organization primarily responsible for internal coherence of the ValueSet.
5474     */
5475    @Child(name = "editor", type = {ContactDetail.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5476    @Description(shortDefinition="Who edited the ValueSet", formalDefinition="An individual or organization primarily responsible for internal coherence of the ValueSet." )
5477    protected List<ContactDetail> editor;
5478
5479    /**
5480     * An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.
5481     */
5482    @Child(name = "reviewer", type = {ContactDetail.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5483    @Description(shortDefinition="Who reviewed the ValueSet", formalDefinition="An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet." )
5484    protected List<ContactDetail> reviewer;
5485
5486    /**
5487     * An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.
5488     */
5489    @Child(name = "endorser", type = {ContactDetail.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5490    @Description(shortDefinition="Who endorsed the ValueSet", formalDefinition="An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting." )
5491    protected List<ContactDetail> endorser;
5492
5493    /**
5494     * Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.
5495     */
5496    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5497    @Description(shortDefinition="Additional documentation, citations, etc", formalDefinition="Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts." )
5498    protected List<RelatedArtifact> relatedArtifact;
5499
5500    /**
5501     * A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).
5502     */
5503    @Child(name = "compose", type = {}, order=27, min=0, max=1, modifier=false, summary=false)
5504    @Description(shortDefinition="Content logical definition of the value set (CLD)", formalDefinition="A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD)." )
5505    protected ValueSetComposeComponent compose;
5506
5507    /**
5508     * A value set can also be "expanded", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.
5509     */
5510    @Child(name = "expansion", type = {}, order=28, min=0, max=1, modifier=false, summary=false)
5511    @Description(shortDefinition="Used when the value set is \"expanded\"", formalDefinition="A value set can also be \"expanded\", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed." )
5512    protected ValueSetExpansionComponent expansion;
5513
5514    /**
5515     * Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.
5516     */
5517    @Child(name = "scope", type = {}, order=29, min=0, max=1, modifier=false, summary=false)
5518    @Description(shortDefinition="Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description", formalDefinition="Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description." )
5519    protected ValueSetScopeComponent scope;
5520
5521    private static final long serialVersionUID = -1050676231L;
5522
5523  /**
5524   * Constructor
5525   */
5526    public ValueSet() {
5527      super();
5528    }
5529
5530  /**
5531   * Constructor
5532   */
5533    public ValueSet(PublicationStatus status) {
5534      super();
5535      this.setStatus(status);
5536    }
5537
5538    /**
5539     * @return {@link #url} (An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
5540     */
5541    public UriType getUrlElement() { 
5542      if (this.url == null)
5543        if (Configuration.errorOnAutoCreate())
5544          throw new Error("Attempt to auto-create ValueSet.url");
5545        else if (Configuration.doAutoCreate())
5546          this.url = new UriType(); // bb
5547      return this.url;
5548    }
5549
5550    public boolean hasUrlElement() { 
5551      return this.url != null && !this.url.isEmpty();
5552    }
5553
5554    public boolean hasUrl() { 
5555      return this.url != null && !this.url.isEmpty();
5556    }
5557
5558    /**
5559     * @param value {@link #url} (An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
5560     */
5561    public ValueSet setUrlElement(UriType value) { 
5562      this.url = value;
5563      return this;
5564    }
5565
5566    /**
5567     * @return An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.
5568     */
5569    public String getUrl() { 
5570      return this.url == null ? null : this.url.getValue();
5571    }
5572
5573    /**
5574     * @param value An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.
5575     */
5576    public ValueSet setUrl(String value) { 
5577      if (Utilities.noString(value))
5578        this.url = null;
5579      else {
5580        if (this.url == null)
5581          this.url = new UriType();
5582        this.url.setValue(value);
5583      }
5584      return this;
5585    }
5586
5587    /**
5588     * @return {@link #identifier} (A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.)
5589     */
5590    public List<Identifier> getIdentifier() { 
5591      if (this.identifier == null)
5592        this.identifier = new ArrayList<Identifier>();
5593      return this.identifier;
5594    }
5595
5596    /**
5597     * @return Returns a reference to <code>this</code> for easy method chaining
5598     */
5599    public ValueSet setIdentifier(List<Identifier> theIdentifier) { 
5600      this.identifier = theIdentifier;
5601      return this;
5602    }
5603
5604    public boolean hasIdentifier() { 
5605      if (this.identifier == null)
5606        return false;
5607      for (Identifier item : this.identifier)
5608        if (!item.isEmpty())
5609          return true;
5610      return false;
5611    }
5612
5613    public Identifier addIdentifier() { //3
5614      Identifier t = new Identifier();
5615      if (this.identifier == null)
5616        this.identifier = new ArrayList<Identifier>();
5617      this.identifier.add(t);
5618      return t;
5619    }
5620
5621    public ValueSet addIdentifier(Identifier t) { //3
5622      if (t == null)
5623        return this;
5624      if (this.identifier == null)
5625        this.identifier = new ArrayList<Identifier>();
5626      this.identifier.add(t);
5627      return this;
5628    }
5629
5630    /**
5631     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
5632     */
5633    public Identifier getIdentifierFirstRep() { 
5634      if (getIdentifier().isEmpty()) {
5635        addIdentifier();
5636      }
5637      return getIdentifier().get(0);
5638    }
5639
5640    /**
5641     * @return {@link #version} (The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
5642     */
5643    public StringType getVersionElement() { 
5644      if (this.version == null)
5645        if (Configuration.errorOnAutoCreate())
5646          throw new Error("Attempt to auto-create ValueSet.version");
5647        else if (Configuration.doAutoCreate())
5648          this.version = new StringType(); // bb
5649      return this.version;
5650    }
5651
5652    public boolean hasVersionElement() { 
5653      return this.version != null && !this.version.isEmpty();
5654    }
5655
5656    public boolean hasVersion() { 
5657      return this.version != null && !this.version.isEmpty();
5658    }
5659
5660    /**
5661     * @param value {@link #version} (The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
5662     */
5663    public ValueSet setVersionElement(StringType value) { 
5664      this.version = value;
5665      return this;
5666    }
5667
5668    /**
5669     * @return The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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.
5670     */
5671    public String getVersion() { 
5672      return this.version == null ? null : this.version.getValue();
5673    }
5674
5675    /**
5676     * @param value The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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.
5677     */
5678    public ValueSet setVersion(String value) { 
5679      if (Utilities.noString(value))
5680        this.version = null;
5681      else {
5682        if (this.version == null)
5683          this.version = new StringType();
5684        this.version.setValue(value);
5685      }
5686      return this;
5687    }
5688
5689    /**
5690     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5691     */
5692    public DataType getVersionAlgorithm() { 
5693      return this.versionAlgorithm;
5694    }
5695
5696    /**
5697     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5698     */
5699    public StringType getVersionAlgorithmStringType() throws FHIRException { 
5700      if (this.versionAlgorithm == null)
5701        this.versionAlgorithm = new StringType();
5702      if (!(this.versionAlgorithm instanceof StringType))
5703        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
5704      return (StringType) this.versionAlgorithm;
5705    }
5706
5707    public boolean hasVersionAlgorithmStringType() { 
5708      return this != null && this.versionAlgorithm instanceof StringType;
5709    }
5710
5711    /**
5712     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5713     */
5714    public Coding getVersionAlgorithmCoding() throws FHIRException { 
5715      if (this.versionAlgorithm == null)
5716        this.versionAlgorithm = new Coding();
5717      if (!(this.versionAlgorithm instanceof Coding))
5718        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
5719      return (Coding) this.versionAlgorithm;
5720    }
5721
5722    public boolean hasVersionAlgorithmCoding() { 
5723      return this != null && this.versionAlgorithm instanceof Coding;
5724    }
5725
5726    public boolean hasVersionAlgorithm() { 
5727      return this.versionAlgorithm != null && !this.versionAlgorithm.isEmpty();
5728    }
5729
5730    /**
5731     * @param value {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5732     */
5733    public ValueSet setVersionAlgorithm(DataType value) { 
5734      if (value != null && !(value instanceof StringType || value instanceof Coding))
5735        throw new FHIRException("Not the right type for ValueSet.versionAlgorithm[x]: "+value.fhirType());
5736      this.versionAlgorithm = value;
5737      return this;
5738    }
5739
5740    /**
5741     * @return {@link #name} (A natural language name identifying the value set. 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
5742     */
5743    public StringType getNameElement() { 
5744      if (this.name == null)
5745        if (Configuration.errorOnAutoCreate())
5746          throw new Error("Attempt to auto-create ValueSet.name");
5747        else if (Configuration.doAutoCreate())
5748          this.name = new StringType(); // bb
5749      return this.name;
5750    }
5751
5752    public boolean hasNameElement() { 
5753      return this.name != null && !this.name.isEmpty();
5754    }
5755
5756    public boolean hasName() { 
5757      return this.name != null && !this.name.isEmpty();
5758    }
5759
5760    /**
5761     * @param value {@link #name} (A natural language name identifying the value set. 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
5762     */
5763    public ValueSet setNameElement(StringType value) { 
5764      this.name = value;
5765      return this;
5766    }
5767
5768    /**
5769     * @return A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.
5770     */
5771    public String getName() { 
5772      return this.name == null ? null : this.name.getValue();
5773    }
5774
5775    /**
5776     * @param value A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.
5777     */
5778    public ValueSet setName(String value) { 
5779      if (Utilities.noString(value))
5780        this.name = null;
5781      else {
5782        if (this.name == null)
5783          this.name = new StringType();
5784        this.name.setValue(value);
5785      }
5786      return this;
5787    }
5788
5789    /**
5790     * @return {@link #title} (A short, descriptive, user-friendly title for the value set.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
5791     */
5792    public StringType getTitleElement() { 
5793      if (this.title == null)
5794        if (Configuration.errorOnAutoCreate())
5795          throw new Error("Attempt to auto-create ValueSet.title");
5796        else if (Configuration.doAutoCreate())
5797          this.title = new StringType(); // bb
5798      return this.title;
5799    }
5800
5801    public boolean hasTitleElement() { 
5802      return this.title != null && !this.title.isEmpty();
5803    }
5804
5805    public boolean hasTitle() { 
5806      return this.title != null && !this.title.isEmpty();
5807    }
5808
5809    /**
5810     * @param value {@link #title} (A short, descriptive, user-friendly title for the value set.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
5811     */
5812    public ValueSet setTitleElement(StringType value) { 
5813      this.title = value;
5814      return this;
5815    }
5816
5817    /**
5818     * @return A short, descriptive, user-friendly title for the value set.
5819     */
5820    public String getTitle() { 
5821      return this.title == null ? null : this.title.getValue();
5822    }
5823
5824    /**
5825     * @param value A short, descriptive, user-friendly title for the value set.
5826     */
5827    public ValueSet setTitle(String value) { 
5828      if (Utilities.noString(value))
5829        this.title = null;
5830      else {
5831        if (this.title == null)
5832          this.title = new StringType();
5833        this.title.setValue(value);
5834      }
5835      return this;
5836    }
5837
5838    /**
5839     * @return {@link #status} (The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
5840     */
5841    public Enumeration<PublicationStatus> getStatusElement() { 
5842      if (this.status == null)
5843        if (Configuration.errorOnAutoCreate())
5844          throw new Error("Attempt to auto-create ValueSet.status");
5845        else if (Configuration.doAutoCreate())
5846          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
5847      return this.status;
5848    }
5849
5850    public boolean hasStatusElement() { 
5851      return this.status != null && !this.status.isEmpty();
5852    }
5853
5854    public boolean hasStatus() { 
5855      return this.status != null && !this.status.isEmpty();
5856    }
5857
5858    /**
5859     * @param value {@link #status} (The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
5860     */
5861    public ValueSet setStatusElement(Enumeration<PublicationStatus> value) { 
5862      this.status = value;
5863      return this;
5864    }
5865
5866    /**
5867     * @return The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.
5868     */
5869    public PublicationStatus getStatus() { 
5870      return this.status == null ? null : this.status.getValue();
5871    }
5872
5873    /**
5874     * @param value The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.
5875     */
5876    public ValueSet setStatus(PublicationStatus value) { 
5877        if (this.status == null)
5878          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
5879        this.status.setValue(value);
5880      return this;
5881    }
5882
5883    /**
5884     * @return {@link #experimental} (A Boolean value to indicate that this value set 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
5885     */
5886    public BooleanType getExperimentalElement() { 
5887      if (this.experimental == null)
5888        if (Configuration.errorOnAutoCreate())
5889          throw new Error("Attempt to auto-create ValueSet.experimental");
5890        else if (Configuration.doAutoCreate())
5891          this.experimental = new BooleanType(); // bb
5892      return this.experimental;
5893    }
5894
5895    public boolean hasExperimentalElement() { 
5896      return this.experimental != null && !this.experimental.isEmpty();
5897    }
5898
5899    public boolean hasExperimental() { 
5900      return this.experimental != null && !this.experimental.isEmpty();
5901    }
5902
5903    /**
5904     * @param value {@link #experimental} (A Boolean value to indicate that this value set 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
5905     */
5906    public ValueSet setExperimentalElement(BooleanType value) { 
5907      this.experimental = value;
5908      return this;
5909    }
5910
5911    /**
5912     * @return A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
5913     */
5914    public boolean getExperimental() { 
5915      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
5916    }
5917
5918    /**
5919     * @param value A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.
5920     */
5921    public ValueSet setExperimental(boolean value) { 
5922        if (this.experimental == null)
5923          this.experimental = new BooleanType();
5924        this.experimental.setValue(value);
5925      return this;
5926    }
5927
5928    /**
5929     * @return {@link #date} (The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
5930     */
5931    public DateTimeType getDateElement() { 
5932      if (this.date == null)
5933        if (Configuration.errorOnAutoCreate())
5934          throw new Error("Attempt to auto-create ValueSet.date");
5935        else if (Configuration.doAutoCreate())
5936          this.date = new DateTimeType(); // bb
5937      return this.date;
5938    }
5939
5940    public boolean hasDateElement() { 
5941      return this.date != null && !this.date.isEmpty();
5942    }
5943
5944    public boolean hasDate() { 
5945      return this.date != null && !this.date.isEmpty();
5946    }
5947
5948    /**
5949     * @param value {@link #date} (The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
5950     */
5951    public ValueSet setDateElement(DateTimeType value) { 
5952      this.date = value;
5953      return this;
5954    }
5955
5956    /**
5957     * @return The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5958     */
5959    public Date getDate() { 
5960      return this.date == null ? null : this.date.getValue();
5961    }
5962
5963    /**
5964     * @param value The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5965     */
5966    public ValueSet setDate(Date value) { 
5967      if (value == null)
5968        this.date = null;
5969      else {
5970        if (this.date == null)
5971          this.date = new DateTimeType();
5972        this.date.setValue(value);
5973      }
5974      return this;
5975    }
5976
5977    /**
5978     * @return {@link #publisher} (The name of the organization or individual responsible for the release and ongoing maintenance of the value set.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
5979     */
5980    public StringType getPublisherElement() { 
5981      if (this.publisher == null)
5982        if (Configuration.errorOnAutoCreate())
5983          throw new Error("Attempt to auto-create ValueSet.publisher");
5984        else if (Configuration.doAutoCreate())
5985          this.publisher = new StringType(); // bb
5986      return this.publisher;
5987    }
5988
5989    public boolean hasPublisherElement() { 
5990      return this.publisher != null && !this.publisher.isEmpty();
5991    }
5992
5993    public boolean hasPublisher() { 
5994      return this.publisher != null && !this.publisher.isEmpty();
5995    }
5996
5997    /**
5998     * @param value {@link #publisher} (The name of the organization or individual responsible for the release and ongoing maintenance of the value set.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
5999     */
6000    public ValueSet setPublisherElement(StringType value) { 
6001      this.publisher = value;
6002      return this;
6003    }
6004
6005    /**
6006     * @return The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
6007     */
6008    public String getPublisher() { 
6009      return this.publisher == null ? null : this.publisher.getValue();
6010    }
6011
6012    /**
6013     * @param value The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
6014     */
6015    public ValueSet setPublisher(String value) { 
6016      if (Utilities.noString(value))
6017        this.publisher = null;
6018      else {
6019        if (this.publisher == null)
6020          this.publisher = new StringType();
6021        this.publisher.setValue(value);
6022      }
6023      return this;
6024    }
6025
6026    /**
6027     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
6028     */
6029    public List<ContactDetail> getContact() { 
6030      if (this.contact == null)
6031        this.contact = new ArrayList<ContactDetail>();
6032      return this.contact;
6033    }
6034
6035    /**
6036     * @return Returns a reference to <code>this</code> for easy method chaining
6037     */
6038    public ValueSet setContact(List<ContactDetail> theContact) { 
6039      this.contact = theContact;
6040      return this;
6041    }
6042
6043    public boolean hasContact() { 
6044      if (this.contact == null)
6045        return false;
6046      for (ContactDetail item : this.contact)
6047        if (!item.isEmpty())
6048          return true;
6049      return false;
6050    }
6051
6052    public ContactDetail addContact() { //3
6053      ContactDetail t = new ContactDetail();
6054      if (this.contact == null)
6055        this.contact = new ArrayList<ContactDetail>();
6056      this.contact.add(t);
6057      return t;
6058    }
6059
6060    public ValueSet addContact(ContactDetail t) { //3
6061      if (t == null)
6062        return this;
6063      if (this.contact == null)
6064        this.contact = new ArrayList<ContactDetail>();
6065      this.contact.add(t);
6066      return this;
6067    }
6068
6069    /**
6070     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
6071     */
6072    public ContactDetail getContactFirstRep() { 
6073      if (getContact().isEmpty()) {
6074        addContact();
6075      }
6076      return getContact().get(0);
6077    }
6078
6079    /**
6080     * @return {@link #description} (A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
6081     */
6082    public MarkdownType getDescriptionElement() { 
6083      if (this.description == null)
6084        if (Configuration.errorOnAutoCreate())
6085          throw new Error("Attempt to auto-create ValueSet.description");
6086        else if (Configuration.doAutoCreate())
6087          this.description = new MarkdownType(); // bb
6088      return this.description;
6089    }
6090
6091    public boolean hasDescriptionElement() { 
6092      return this.description != null && !this.description.isEmpty();
6093    }
6094
6095    public boolean hasDescription() { 
6096      return this.description != null && !this.description.isEmpty();
6097    }
6098
6099    /**
6100     * @param value {@link #description} (A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
6101     */
6102    public ValueSet setDescriptionElement(MarkdownType value) { 
6103      this.description = value;
6104      return this;
6105    }
6106
6107    /**
6108     * @return A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.
6109     */
6110    public String getDescription() { 
6111      return this.description == null ? null : this.description.getValue();
6112    }
6113
6114    /**
6115     * @param value A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.
6116     */
6117    public ValueSet setDescription(String value) { 
6118      if (Utilities.noString(value))
6119        this.description = null;
6120      else {
6121        if (this.description == null)
6122          this.description = new MarkdownType();
6123        this.description.setValue(value);
6124      }
6125      return this;
6126    }
6127
6128    /**
6129     * @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 value set instances.)
6130     */
6131    public List<UsageContext> getUseContext() { 
6132      if (this.useContext == null)
6133        this.useContext = new ArrayList<UsageContext>();
6134      return this.useContext;
6135    }
6136
6137    /**
6138     * @return Returns a reference to <code>this</code> for easy method chaining
6139     */
6140    public ValueSet setUseContext(List<UsageContext> theUseContext) { 
6141      this.useContext = theUseContext;
6142      return this;
6143    }
6144
6145    public boolean hasUseContext() { 
6146      if (this.useContext == null)
6147        return false;
6148      for (UsageContext item : this.useContext)
6149        if (!item.isEmpty())
6150          return true;
6151      return false;
6152    }
6153
6154    public UsageContext addUseContext() { //3
6155      UsageContext t = new UsageContext();
6156      if (this.useContext == null)
6157        this.useContext = new ArrayList<UsageContext>();
6158      this.useContext.add(t);
6159      return t;
6160    }
6161
6162    public ValueSet addUseContext(UsageContext t) { //3
6163      if (t == null)
6164        return this;
6165      if (this.useContext == null)
6166        this.useContext = new ArrayList<UsageContext>();
6167      this.useContext.add(t);
6168      return this;
6169    }
6170
6171    /**
6172     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
6173     */
6174    public UsageContext getUseContextFirstRep() { 
6175      if (getUseContext().isEmpty()) {
6176        addUseContext();
6177      }
6178      return getUseContext().get(0);
6179    }
6180
6181    /**
6182     * @return {@link #jurisdiction} (A legal or geographic region in which the value set is intended to be used.)
6183     */
6184    public List<CodeableConcept> getJurisdiction() { 
6185      if (this.jurisdiction == null)
6186        this.jurisdiction = new ArrayList<CodeableConcept>();
6187      return this.jurisdiction;
6188    }
6189
6190    /**
6191     * @return Returns a reference to <code>this</code> for easy method chaining
6192     */
6193    public ValueSet setJurisdiction(List<CodeableConcept> theJurisdiction) { 
6194      this.jurisdiction = theJurisdiction;
6195      return this;
6196    }
6197
6198    public boolean hasJurisdiction() { 
6199      if (this.jurisdiction == null)
6200        return false;
6201      for (CodeableConcept item : this.jurisdiction)
6202        if (!item.isEmpty())
6203          return true;
6204      return false;
6205    }
6206
6207    public CodeableConcept addJurisdiction() { //3
6208      CodeableConcept t = new CodeableConcept();
6209      if (this.jurisdiction == null)
6210        this.jurisdiction = new ArrayList<CodeableConcept>();
6211      this.jurisdiction.add(t);
6212      return t;
6213    }
6214
6215    public ValueSet addJurisdiction(CodeableConcept t) { //3
6216      if (t == null)
6217        return this;
6218      if (this.jurisdiction == null)
6219        this.jurisdiction = new ArrayList<CodeableConcept>();
6220      this.jurisdiction.add(t);
6221      return this;
6222    }
6223
6224    /**
6225     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
6226     */
6227    public CodeableConcept getJurisdictionFirstRep() { 
6228      if (getJurisdiction().isEmpty()) {
6229        addJurisdiction();
6230      }
6231      return getJurisdiction().get(0);
6232    }
6233
6234    /**
6235     * @return {@link #immutable} (If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.). This is the underlying object with id, value and extensions. The accessor "getImmutable" gives direct access to the value
6236     */
6237    public BooleanType getImmutableElement() { 
6238      if (this.immutable == null)
6239        if (Configuration.errorOnAutoCreate())
6240          throw new Error("Attempt to auto-create ValueSet.immutable");
6241        else if (Configuration.doAutoCreate())
6242          this.immutable = new BooleanType(); // bb
6243      return this.immutable;
6244    }
6245
6246    public boolean hasImmutableElement() { 
6247      return this.immutable != null && !this.immutable.isEmpty();
6248    }
6249
6250    public boolean hasImmutable() { 
6251      return this.immutable != null && !this.immutable.isEmpty();
6252    }
6253
6254    /**
6255     * @param value {@link #immutable} (If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.). This is the underlying object with id, value and extensions. The accessor "getImmutable" gives direct access to the value
6256     */
6257    public ValueSet setImmutableElement(BooleanType value) { 
6258      this.immutable = value;
6259      return this;
6260    }
6261
6262    /**
6263     * @return If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
6264     */
6265    public boolean getImmutable() { 
6266      return this.immutable == null || this.immutable.isEmpty() ? false : this.immutable.getValue();
6267    }
6268
6269    /**
6270     * @param value If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
6271     */
6272    public ValueSet setImmutable(boolean value) { 
6273        if (this.immutable == null)
6274          this.immutable = new BooleanType();
6275        this.immutable.setValue(value);
6276      return this;
6277    }
6278
6279    /**
6280     * @return {@link #purpose} (Explanation of why this value set 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
6281     */
6282    public MarkdownType getPurposeElement() { 
6283      if (this.purpose == null)
6284        if (Configuration.errorOnAutoCreate())
6285          throw new Error("Attempt to auto-create ValueSet.purpose");
6286        else if (Configuration.doAutoCreate())
6287          this.purpose = new MarkdownType(); // bb
6288      return this.purpose;
6289    }
6290
6291    public boolean hasPurposeElement() { 
6292      return this.purpose != null && !this.purpose.isEmpty();
6293    }
6294
6295    public boolean hasPurpose() { 
6296      return this.purpose != null && !this.purpose.isEmpty();
6297    }
6298
6299    /**
6300     * @param value {@link #purpose} (Explanation of why this value set 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
6301     */
6302    public ValueSet setPurposeElement(MarkdownType value) { 
6303      this.purpose = value;
6304      return this;
6305    }
6306
6307    /**
6308     * @return Explanation of why this value set is needed and why it has been designed as it has.
6309     */
6310    public String getPurpose() { 
6311      return this.purpose == null ? null : this.purpose.getValue();
6312    }
6313
6314    /**
6315     * @param value Explanation of why this value set is needed and why it has been designed as it has.
6316     */
6317    public ValueSet setPurpose(String value) { 
6318      if (Utilities.noString(value))
6319        this.purpose = null;
6320      else {
6321        if (this.purpose == null)
6322          this.purpose = new MarkdownType();
6323        this.purpose.setValue(value);
6324      }
6325      return this;
6326    }
6327
6328    /**
6329     * @return {@link #copyright} (A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
6330     */
6331    public MarkdownType getCopyrightElement() { 
6332      if (this.copyright == null)
6333        if (Configuration.errorOnAutoCreate())
6334          throw new Error("Attempt to auto-create ValueSet.copyright");
6335        else if (Configuration.doAutoCreate())
6336          this.copyright = new MarkdownType(); // bb
6337      return this.copyright;
6338    }
6339
6340    public boolean hasCopyrightElement() { 
6341      return this.copyright != null && !this.copyright.isEmpty();
6342    }
6343
6344    public boolean hasCopyright() { 
6345      return this.copyright != null && !this.copyright.isEmpty();
6346    }
6347
6348    /**
6349     * @param value {@link #copyright} (A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
6350     */
6351    public ValueSet setCopyrightElement(MarkdownType value) { 
6352      this.copyright = value;
6353      return this;
6354    }
6355
6356    /**
6357     * @return A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.
6358     */
6359    public String getCopyright() { 
6360      return this.copyright == null ? null : this.copyright.getValue();
6361    }
6362
6363    /**
6364     * @param value A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.
6365     */
6366    public ValueSet setCopyright(String value) { 
6367      if (Utilities.noString(value))
6368        this.copyright = null;
6369      else {
6370        if (this.copyright == null)
6371          this.copyright = new MarkdownType();
6372        this.copyright.setValue(value);
6373      }
6374      return this;
6375    }
6376
6377    /**
6378     * @return {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
6379     */
6380    public StringType getCopyrightLabelElement() { 
6381      if (this.copyrightLabel == null)
6382        if (Configuration.errorOnAutoCreate())
6383          throw new Error("Attempt to auto-create ValueSet.copyrightLabel");
6384        else if (Configuration.doAutoCreate())
6385          this.copyrightLabel = new StringType(); // bb
6386      return this.copyrightLabel;
6387    }
6388
6389    public boolean hasCopyrightLabelElement() { 
6390      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
6391    }
6392
6393    public boolean hasCopyrightLabel() { 
6394      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
6395    }
6396
6397    /**
6398     * @param value {@link #copyrightLabel} (A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').). This is the underlying object with id, value and extensions. The accessor "getCopyrightLabel" gives direct access to the value
6399     */
6400    public ValueSet setCopyrightLabelElement(StringType value) { 
6401      this.copyrightLabel = value;
6402      return this;
6403    }
6404
6405    /**
6406     * @return A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
6407     */
6408    public String getCopyrightLabel() { 
6409      return this.copyrightLabel == null ? null : this.copyrightLabel.getValue();
6410    }
6411
6412    /**
6413     * @param value A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').
6414     */
6415    public ValueSet setCopyrightLabel(String value) { 
6416      if (Utilities.noString(value))
6417        this.copyrightLabel = null;
6418      else {
6419        if (this.copyrightLabel == null)
6420          this.copyrightLabel = new StringType();
6421        this.copyrightLabel.setValue(value);
6422      }
6423      return this;
6424    }
6425
6426    /**
6427     * @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
6428     */
6429    public DateType getApprovalDateElement() { 
6430      if (this.approvalDate == null)
6431        if (Configuration.errorOnAutoCreate())
6432          throw new Error("Attempt to auto-create ValueSet.approvalDate");
6433        else if (Configuration.doAutoCreate())
6434          this.approvalDate = new DateType(); // bb
6435      return this.approvalDate;
6436    }
6437
6438    public boolean hasApprovalDateElement() { 
6439      return this.approvalDate != null && !this.approvalDate.isEmpty();
6440    }
6441
6442    public boolean hasApprovalDate() { 
6443      return this.approvalDate != null && !this.approvalDate.isEmpty();
6444    }
6445
6446    /**
6447     * @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
6448     */
6449    public ValueSet setApprovalDateElement(DateType value) { 
6450      this.approvalDate = value;
6451      return this;
6452    }
6453
6454    /**
6455     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
6456     */
6457    public Date getApprovalDate() { 
6458      return this.approvalDate == null ? null : this.approvalDate.getValue();
6459    }
6460
6461    /**
6462     * @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.
6463     */
6464    public ValueSet setApprovalDate(Date value) { 
6465      if (value == null)
6466        this.approvalDate = null;
6467      else {
6468        if (this.approvalDate == null)
6469          this.approvalDate = new DateType();
6470        this.approvalDate.setValue(value);
6471      }
6472      return this;
6473    }
6474
6475    /**
6476     * @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
6477     */
6478    public DateType getLastReviewDateElement() { 
6479      if (this.lastReviewDate == null)
6480        if (Configuration.errorOnAutoCreate())
6481          throw new Error("Attempt to auto-create ValueSet.lastReviewDate");
6482        else if (Configuration.doAutoCreate())
6483          this.lastReviewDate = new DateType(); // bb
6484      return this.lastReviewDate;
6485    }
6486
6487    public boolean hasLastReviewDateElement() { 
6488      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
6489    }
6490
6491    public boolean hasLastReviewDate() { 
6492      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
6493    }
6494
6495    /**
6496     * @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
6497     */
6498    public ValueSet setLastReviewDateElement(DateType value) { 
6499      this.lastReviewDate = value;
6500      return this;
6501    }
6502
6503    /**
6504     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
6505     */
6506    public Date getLastReviewDate() { 
6507      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
6508    }
6509
6510    /**
6511     * @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.
6512     */
6513    public ValueSet setLastReviewDate(Date value) { 
6514      if (value == null)
6515        this.lastReviewDate = null;
6516      else {
6517        if (this.lastReviewDate == null)
6518          this.lastReviewDate = new DateType();
6519        this.lastReviewDate.setValue(value);
6520      }
6521      return this;
6522    }
6523
6524    /**
6525     * @return {@link #effectivePeriod} (The period during which the ValueSet content was or is planned to be in active use.)
6526     */
6527    public Period getEffectivePeriod() { 
6528      if (this.effectivePeriod == null)
6529        if (Configuration.errorOnAutoCreate())
6530          throw new Error("Attempt to auto-create ValueSet.effectivePeriod");
6531        else if (Configuration.doAutoCreate())
6532          this.effectivePeriod = new Period(); // cc
6533      return this.effectivePeriod;
6534    }
6535
6536    public boolean hasEffectivePeriod() { 
6537      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
6538    }
6539
6540    /**
6541     * @param value {@link #effectivePeriod} (The period during which the ValueSet content was or is planned to be in active use.)
6542     */
6543    public ValueSet setEffectivePeriod(Period value) { 
6544      this.effectivePeriod = value;
6545      return this;
6546    }
6547
6548    /**
6549     * @return {@link #topic} (Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching.)
6550     */
6551    public List<CodeableConcept> getTopic() { 
6552      if (this.topic == null)
6553        this.topic = new ArrayList<CodeableConcept>();
6554      return this.topic;
6555    }
6556
6557    /**
6558     * @return Returns a reference to <code>this</code> for easy method chaining
6559     */
6560    public ValueSet setTopic(List<CodeableConcept> theTopic) { 
6561      this.topic = theTopic;
6562      return this;
6563    }
6564
6565    public boolean hasTopic() { 
6566      if (this.topic == null)
6567        return false;
6568      for (CodeableConcept item : this.topic)
6569        if (!item.isEmpty())
6570          return true;
6571      return false;
6572    }
6573
6574    public CodeableConcept addTopic() { //3
6575      CodeableConcept t = new CodeableConcept();
6576      if (this.topic == null)
6577        this.topic = new ArrayList<CodeableConcept>();
6578      this.topic.add(t);
6579      return t;
6580    }
6581
6582    public ValueSet addTopic(CodeableConcept t) { //3
6583      if (t == null)
6584        return this;
6585      if (this.topic == null)
6586        this.topic = new ArrayList<CodeableConcept>();
6587      this.topic.add(t);
6588      return this;
6589    }
6590
6591    /**
6592     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist {3}
6593     */
6594    public CodeableConcept getTopicFirstRep() { 
6595      if (getTopic().isEmpty()) {
6596        addTopic();
6597      }
6598      return getTopic().get(0);
6599    }
6600
6601    /**
6602     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the ValueSet.)
6603     */
6604    public List<ContactDetail> getAuthor() { 
6605      if (this.author == null)
6606        this.author = new ArrayList<ContactDetail>();
6607      return this.author;
6608    }
6609
6610    /**
6611     * @return Returns a reference to <code>this</code> for easy method chaining
6612     */
6613    public ValueSet setAuthor(List<ContactDetail> theAuthor) { 
6614      this.author = theAuthor;
6615      return this;
6616    }
6617
6618    public boolean hasAuthor() { 
6619      if (this.author == null)
6620        return false;
6621      for (ContactDetail item : this.author)
6622        if (!item.isEmpty())
6623          return true;
6624      return false;
6625    }
6626
6627    public ContactDetail addAuthor() { //3
6628      ContactDetail t = new ContactDetail();
6629      if (this.author == null)
6630        this.author = new ArrayList<ContactDetail>();
6631      this.author.add(t);
6632      return t;
6633    }
6634
6635    public ValueSet addAuthor(ContactDetail t) { //3
6636      if (t == null)
6637        return this;
6638      if (this.author == null)
6639        this.author = new ArrayList<ContactDetail>();
6640      this.author.add(t);
6641      return this;
6642    }
6643
6644    /**
6645     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
6646     */
6647    public ContactDetail getAuthorFirstRep() { 
6648      if (getAuthor().isEmpty()) {
6649        addAuthor();
6650      }
6651      return getAuthor().get(0);
6652    }
6653
6654    /**
6655     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the ValueSet.)
6656     */
6657    public List<ContactDetail> getEditor() { 
6658      if (this.editor == null)
6659        this.editor = new ArrayList<ContactDetail>();
6660      return this.editor;
6661    }
6662
6663    /**
6664     * @return Returns a reference to <code>this</code> for easy method chaining
6665     */
6666    public ValueSet setEditor(List<ContactDetail> theEditor) { 
6667      this.editor = theEditor;
6668      return this;
6669    }
6670
6671    public boolean hasEditor() { 
6672      if (this.editor == null)
6673        return false;
6674      for (ContactDetail item : this.editor)
6675        if (!item.isEmpty())
6676          return true;
6677      return false;
6678    }
6679
6680    public ContactDetail addEditor() { //3
6681      ContactDetail t = new ContactDetail();
6682      if (this.editor == null)
6683        this.editor = new ArrayList<ContactDetail>();
6684      this.editor.add(t);
6685      return t;
6686    }
6687
6688    public ValueSet addEditor(ContactDetail t) { //3
6689      if (t == null)
6690        return this;
6691      if (this.editor == null)
6692        this.editor = new ArrayList<ContactDetail>();
6693      this.editor.add(t);
6694      return this;
6695    }
6696
6697    /**
6698     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {3}
6699     */
6700    public ContactDetail getEditorFirstRep() { 
6701      if (getEditor().isEmpty()) {
6702        addEditor();
6703      }
6704      return getEditor().get(0);
6705    }
6706
6707    /**
6708     * @return {@link #reviewer} (An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.)
6709     */
6710    public List<ContactDetail> getReviewer() { 
6711      if (this.reviewer == null)
6712        this.reviewer = new ArrayList<ContactDetail>();
6713      return this.reviewer;
6714    }
6715
6716    /**
6717     * @return Returns a reference to <code>this</code> for easy method chaining
6718     */
6719    public ValueSet setReviewer(List<ContactDetail> theReviewer) { 
6720      this.reviewer = theReviewer;
6721      return this;
6722    }
6723
6724    public boolean hasReviewer() { 
6725      if (this.reviewer == null)
6726        return false;
6727      for (ContactDetail item : this.reviewer)
6728        if (!item.isEmpty())
6729          return true;
6730      return false;
6731    }
6732
6733    public ContactDetail addReviewer() { //3
6734      ContactDetail t = new ContactDetail();
6735      if (this.reviewer == null)
6736        this.reviewer = new ArrayList<ContactDetail>();
6737      this.reviewer.add(t);
6738      return t;
6739    }
6740
6741    public ValueSet addReviewer(ContactDetail t) { //3
6742      if (t == null)
6743        return this;
6744      if (this.reviewer == null)
6745        this.reviewer = new ArrayList<ContactDetail>();
6746      this.reviewer.add(t);
6747      return this;
6748    }
6749
6750    /**
6751     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {3}
6752     */
6753    public ContactDetail getReviewerFirstRep() { 
6754      if (getReviewer().isEmpty()) {
6755        addReviewer();
6756      }
6757      return getReviewer().get(0);
6758    }
6759
6760    /**
6761     * @return {@link #endorser} (An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.)
6762     */
6763    public List<ContactDetail> getEndorser() { 
6764      if (this.endorser == null)
6765        this.endorser = new ArrayList<ContactDetail>();
6766      return this.endorser;
6767    }
6768
6769    /**
6770     * @return Returns a reference to <code>this</code> for easy method chaining
6771     */
6772    public ValueSet setEndorser(List<ContactDetail> theEndorser) { 
6773      this.endorser = theEndorser;
6774      return this;
6775    }
6776
6777    public boolean hasEndorser() { 
6778      if (this.endorser == null)
6779        return false;
6780      for (ContactDetail item : this.endorser)
6781        if (!item.isEmpty())
6782          return true;
6783      return false;
6784    }
6785
6786    public ContactDetail addEndorser() { //3
6787      ContactDetail t = new ContactDetail();
6788      if (this.endorser == null)
6789        this.endorser = new ArrayList<ContactDetail>();
6790      this.endorser.add(t);
6791      return t;
6792    }
6793
6794    public ValueSet addEndorser(ContactDetail t) { //3
6795      if (t == null)
6796        return this;
6797      if (this.endorser == null)
6798        this.endorser = new ArrayList<ContactDetail>();
6799      this.endorser.add(t);
6800      return this;
6801    }
6802
6803    /**
6804     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {3}
6805     */
6806    public ContactDetail getEndorserFirstRep() { 
6807      if (getEndorser().isEmpty()) {
6808        addEndorser();
6809      }
6810      return getEndorser().get(0);
6811    }
6812
6813    /**
6814     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.)
6815     */
6816    public List<RelatedArtifact> getRelatedArtifact() { 
6817      if (this.relatedArtifact == null)
6818        this.relatedArtifact = new ArrayList<RelatedArtifact>();
6819      return this.relatedArtifact;
6820    }
6821
6822    /**
6823     * @return Returns a reference to <code>this</code> for easy method chaining
6824     */
6825    public ValueSet setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
6826      this.relatedArtifact = theRelatedArtifact;
6827      return this;
6828    }
6829
6830    public boolean hasRelatedArtifact() { 
6831      if (this.relatedArtifact == null)
6832        return false;
6833      for (RelatedArtifact item : this.relatedArtifact)
6834        if (!item.isEmpty())
6835          return true;
6836      return false;
6837    }
6838
6839    public RelatedArtifact addRelatedArtifact() { //3
6840      RelatedArtifact t = new RelatedArtifact();
6841      if (this.relatedArtifact == null)
6842        this.relatedArtifact = new ArrayList<RelatedArtifact>();
6843      this.relatedArtifact.add(t);
6844      return t;
6845    }
6846
6847    public ValueSet addRelatedArtifact(RelatedArtifact t) { //3
6848      if (t == null)
6849        return this;
6850      if (this.relatedArtifact == null)
6851        this.relatedArtifact = new ArrayList<RelatedArtifact>();
6852      this.relatedArtifact.add(t);
6853      return this;
6854    }
6855
6856    /**
6857     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
6858     */
6859    public RelatedArtifact getRelatedArtifactFirstRep() { 
6860      if (getRelatedArtifact().isEmpty()) {
6861        addRelatedArtifact();
6862      }
6863      return getRelatedArtifact().get(0);
6864    }
6865
6866    /**
6867     * @return {@link #compose} (A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).)
6868     */
6869    public ValueSetComposeComponent getCompose() { 
6870      if (this.compose == null)
6871        if (Configuration.errorOnAutoCreate())
6872          throw new Error("Attempt to auto-create ValueSet.compose");
6873        else if (Configuration.doAutoCreate())
6874          this.compose = new ValueSetComposeComponent(); // cc
6875      return this.compose;
6876    }
6877
6878    public boolean hasCompose() { 
6879      return this.compose != null && !this.compose.isEmpty();
6880    }
6881
6882    /**
6883     * @param value {@link #compose} (A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).)
6884     */
6885    public ValueSet setCompose(ValueSetComposeComponent value) { 
6886      this.compose = value;
6887      return this;
6888    }
6889
6890    /**
6891     * @return {@link #expansion} (A value set can also be "expanded", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.)
6892     */
6893    public ValueSetExpansionComponent getExpansion() { 
6894      if (this.expansion == null)
6895        if (Configuration.errorOnAutoCreate())
6896          throw new Error("Attempt to auto-create ValueSet.expansion");
6897        else if (Configuration.doAutoCreate())
6898          this.expansion = new ValueSetExpansionComponent(); // cc
6899      return this.expansion;
6900    }
6901
6902    public boolean hasExpansion() { 
6903      return this.expansion != null && !this.expansion.isEmpty();
6904    }
6905
6906    /**
6907     * @param value {@link #expansion} (A value set can also be "expanded", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.)
6908     */
6909    public ValueSet setExpansion(ValueSetExpansionComponent value) { 
6910      this.expansion = value;
6911      return this;
6912    }
6913
6914    /**
6915     * @return {@link #scope} (Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.)
6916     */
6917    public ValueSetScopeComponent getScope() { 
6918      if (this.scope == null)
6919        if (Configuration.errorOnAutoCreate())
6920          throw new Error("Attempt to auto-create ValueSet.scope");
6921        else if (Configuration.doAutoCreate())
6922          this.scope = new ValueSetScopeComponent(); // cc
6923      return this.scope;
6924    }
6925
6926    public boolean hasScope() { 
6927      return this.scope != null && !this.scope.isEmpty();
6928    }
6929
6930    /**
6931     * @param value {@link #scope} (Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.)
6932     */
6933    public ValueSet setScope(ValueSetScopeComponent value) { 
6934      this.scope = value;
6935      return this;
6936    }
6937
6938      protected void listChildren(List<Property> children) {
6939        super.listChildren(children);
6940        children.add(new Property("url", "uri", "An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.", 0, 1, url));
6941        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier));
6942        children.add(new Property("version", "string", "The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version));
6943        children.add(new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which ValueSet is more current.", 0, 1, versionAlgorithm));
6944        children.add(new Property("name", "string", "A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
6945        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title));
6946        children.add(new Property("status", "code", "The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.", 0, 1, status));
6947        children.add(new Property("experimental", "boolean", "A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental));
6948        children.add(new Property("date", "dateTime", "The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.", 0, 1, date));
6949        children.add(new Property("publisher", "string", "The name of the organization or individual responsible for the release and ongoing maintenance of the value set.", 0, 1, publisher));
6950        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));
6951        children.add(new Property("description", "markdown", "A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.", 0, 1, description));
6952        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 value set instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
6953        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the value set is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
6954        children.add(new Property("immutable", "boolean", "If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.", 0, 1, immutable));
6955        children.add(new Property("purpose", "markdown", "Explanation of why this value set is needed and why it has been designed as it has.", 0, 1, purpose));
6956        children.add(new Property("copyright", "markdown", "A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.", 0, 1, copyright));
6957        children.add(new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel));
6958        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));
6959        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));
6960        children.add(new Property("effectivePeriod", "Period", "The period during which the ValueSet content was or is planned to be in active use.", 0, 1, effectivePeriod));
6961        children.add(new Property("topic", "CodeableConcept", "Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching.", 0, java.lang.Integer.MAX_VALUE, topic));
6962        children.add(new Property("author", "ContactDetail", "An individiual or organization primarily involved in the creation and maintenance of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, author));
6963        children.add(new Property("editor", "ContactDetail", "An individual or organization primarily responsible for internal coherence of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, editor));
6964        children.add(new Property("reviewer", "ContactDetail", "An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, reviewer));
6965        children.add(new Property("endorser", "ContactDetail", "An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser));
6966        children.add(new Property("relatedArtifact", "RelatedArtifact", "Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact));
6967        children.add(new Property("compose", "", "A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).", 0, 1, compose));
6968        children.add(new Property("expansion", "", "A value set can also be \"expanded\", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.", 0, 1, expansion));
6969        children.add(new Property("scope", "", "Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.", 0, 1, scope));
6970      }
6971
6972      @Override
6973      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6974        switch (_hash) {
6975        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this value set 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 an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.", 0, 1, url);
6976        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, java.lang.Integer.MAX_VALUE, identifier);
6977        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", 0, 1, version);
6978        case -115699031: /*versionAlgorithm[x]*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which ValueSet is more current.", 0, 1, versionAlgorithm);
6979        case 1508158071: /*versionAlgorithm*/  return new Property("versionAlgorithm[x]", "string|Coding", "Indicates the mechanism used to compare versions to determine which ValueSet is more current.", 0, 1, versionAlgorithm);
6980        case 1836908904: /*versionAlgorithmString*/  return new Property("versionAlgorithm[x]", "string", "Indicates the mechanism used to compare versions to determine which ValueSet is more current.", 0, 1, versionAlgorithm);
6981        case 1373807809: /*versionAlgorithmCoding*/  return new Property("versionAlgorithm[x]", "Coding", "Indicates the mechanism used to compare versions to determine which ValueSet is more current.", 0, 1, versionAlgorithm);
6982        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
6983        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title);
6984        case -892481550: /*status*/  return new Property("status", "code", "The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.", 0, 1, status);
6985        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", 0, 1, experimental);
6986        case 3076014: /*date*/  return new Property("date", "dateTime", "The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.", 0, 1, date);
6987        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual responsible for the release and ongoing maintenance of the value set.", 0, 1, publisher);
6988        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);
6989        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.", 0, 1, description);
6990        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 value set instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
6991        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the value set is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
6992        case 1596987778: /*immutable*/  return new Property("immutable", "boolean", "If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.", 0, 1, immutable);
6993        case -220463842: /*purpose*/  return new Property("purpose", "markdown", "Explanation of why this value set is needed and why it has been designed as it has.", 0, 1, purpose);
6994        case 1522889671: /*copyright*/  return new Property("copyright", "markdown", "A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.", 0, 1, copyright);
6995        case 765157229: /*copyrightLabel*/  return new Property("copyrightLabel", "string", "A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved').", 0, 1, copyrightLabel);
6996        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);
6997        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);
6998        case -403934648: /*effectivePeriod*/  return new Property("effectivePeriod", "Period", "The period during which the ValueSet content was or is planned to be in active use.", 0, 1, effectivePeriod);
6999        case 110546223: /*topic*/  return new Property("topic", "CodeableConcept", "Descriptions related to the content of the ValueSet. Topics provide a high-level categorization as well as keywords for the ValueSet that can be useful for filtering and searching.", 0, java.lang.Integer.MAX_VALUE, topic);
7000        case -1406328437: /*author*/  return new Property("author", "ContactDetail", "An individiual or organization primarily involved in the creation and maintenance of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, author);
7001        case -1307827859: /*editor*/  return new Property("editor", "ContactDetail", "An individual or organization primarily responsible for internal coherence of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, editor);
7002        case -261190139: /*reviewer*/  return new Property("reviewer", "ContactDetail", "An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.", 0, java.lang.Integer.MAX_VALUE, reviewer);
7003        case 1740277666: /*endorser*/  return new Property("endorser", "ContactDetail", "An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.", 0, java.lang.Integer.MAX_VALUE, endorser);
7004        case 666807069: /*relatedArtifact*/  return new Property("relatedArtifact", "RelatedArtifact", "Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.", 0, java.lang.Integer.MAX_VALUE, relatedArtifact);
7005        case 950497682: /*compose*/  return new Property("compose", "", "A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).", 0, 1, compose);
7006        case 17878207: /*expansion*/  return new Property("expansion", "", "A value set can also be \"expanded\", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.", 0, 1, expansion);
7007        case 109264468: /*scope*/  return new Property("scope", "", "Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.", 0, 1, scope);
7008        default: return super.getNamedProperty(_hash, _name, _checkValid);
7009        }
7010
7011      }
7012
7013      @Override
7014      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
7015        switch (hash) {
7016        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
7017        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
7018        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
7019        case 1508158071: /*versionAlgorithm*/ return this.versionAlgorithm == null ? new Base[0] : new Base[] {this.versionAlgorithm}; // DataType
7020        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
7021        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
7022        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
7023        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
7024        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
7025        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
7026        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
7027        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
7028        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
7029        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
7030        case 1596987778: /*immutable*/ return this.immutable == null ? new Base[0] : new Base[] {this.immutable}; // BooleanType
7031        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
7032        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
7033        case 765157229: /*copyrightLabel*/ return this.copyrightLabel == null ? new Base[0] : new Base[] {this.copyrightLabel}; // StringType
7034        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
7035        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
7036        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
7037        case 110546223: /*topic*/ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
7038        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
7039        case -1307827859: /*editor*/ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
7040        case -261190139: /*reviewer*/ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
7041        case 1740277666: /*endorser*/ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
7042        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
7043        case 950497682: /*compose*/ return this.compose == null ? new Base[0] : new Base[] {this.compose}; // ValueSetComposeComponent
7044        case 17878207: /*expansion*/ return this.expansion == null ? new Base[0] : new Base[] {this.expansion}; // ValueSetExpansionComponent
7045        case 109264468: /*scope*/ return this.scope == null ? new Base[0] : new Base[] {this.scope}; // ValueSetScopeComponent
7046        default: return super.getProperty(hash, name, checkValid);
7047        }
7048
7049      }
7050
7051      @Override
7052      public Base setProperty(int hash, String name, Base value) throws FHIRException {
7053        switch (hash) {
7054        case 116079: // url
7055          this.url = TypeConvertor.castToUri(value); // UriType
7056          return value;
7057        case -1618432855: // identifier
7058          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
7059          return value;
7060        case 351608024: // version
7061          this.version = TypeConvertor.castToString(value); // StringType
7062          return value;
7063        case 1508158071: // versionAlgorithm
7064          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
7065          return value;
7066        case 3373707: // name
7067          this.name = TypeConvertor.castToString(value); // StringType
7068          return value;
7069        case 110371416: // title
7070          this.title = TypeConvertor.castToString(value); // StringType
7071          return value;
7072        case -892481550: // status
7073          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
7074          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
7075          return value;
7076        case -404562712: // experimental
7077          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
7078          return value;
7079        case 3076014: // date
7080          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
7081          return value;
7082        case 1447404028: // publisher
7083          this.publisher = TypeConvertor.castToString(value); // StringType
7084          return value;
7085        case 951526432: // contact
7086          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7087          return value;
7088        case -1724546052: // description
7089          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
7090          return value;
7091        case -669707736: // useContext
7092          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
7093          return value;
7094        case -507075711: // jurisdiction
7095          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
7096          return value;
7097        case 1596987778: // immutable
7098          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
7099          return value;
7100        case -220463842: // purpose
7101          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
7102          return value;
7103        case 1522889671: // copyright
7104          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
7105          return value;
7106        case 765157229: // copyrightLabel
7107          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
7108          return value;
7109        case 223539345: // approvalDate
7110          this.approvalDate = TypeConvertor.castToDate(value); // DateType
7111          return value;
7112        case -1687512484: // lastReviewDate
7113          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
7114          return value;
7115        case -403934648: // effectivePeriod
7116          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
7117          return value;
7118        case 110546223: // topic
7119          this.getTopic().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
7120          return value;
7121        case -1406328437: // author
7122          this.getAuthor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7123          return value;
7124        case -1307827859: // editor
7125          this.getEditor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7126          return value;
7127        case -261190139: // reviewer
7128          this.getReviewer().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7129          return value;
7130        case 1740277666: // endorser
7131          this.getEndorser().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7132          return value;
7133        case 666807069: // relatedArtifact
7134          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
7135          return value;
7136        case 950497682: // compose
7137          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
7138          return value;
7139        case 17878207: // expansion
7140          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
7141          return value;
7142        case 109264468: // scope
7143          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
7144          return value;
7145        default: return super.setProperty(hash, name, value);
7146        }
7147
7148      }
7149
7150      @Override
7151      public Base setProperty(String name, Base value) throws FHIRException {
7152        if (name.equals("url")) {
7153          this.url = TypeConvertor.castToUri(value); // UriType
7154        } else if (name.equals("identifier")) {
7155          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
7156        } else if (name.equals("version")) {
7157          this.version = TypeConvertor.castToString(value); // StringType
7158        } else if (name.equals("versionAlgorithm[x]")) {
7159          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
7160        } else if (name.equals("name")) {
7161          this.name = TypeConvertor.castToString(value); // StringType
7162        } else if (name.equals("title")) {
7163          this.title = TypeConvertor.castToString(value); // StringType
7164        } else if (name.equals("status")) {
7165          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
7166          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
7167        } else if (name.equals("experimental")) {
7168          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
7169        } else if (name.equals("date")) {
7170          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
7171        } else if (name.equals("publisher")) {
7172          this.publisher = TypeConvertor.castToString(value); // StringType
7173        } else if (name.equals("contact")) {
7174          this.getContact().add(TypeConvertor.castToContactDetail(value));
7175        } else if (name.equals("description")) {
7176          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
7177        } else if (name.equals("useContext")) {
7178          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
7179        } else if (name.equals("jurisdiction")) {
7180          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
7181        } else if (name.equals("immutable")) {
7182          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
7183        } else if (name.equals("purpose")) {
7184          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
7185        } else if (name.equals("copyright")) {
7186          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
7187        } else if (name.equals("copyrightLabel")) {
7188          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
7189        } else if (name.equals("approvalDate")) {
7190          this.approvalDate = TypeConvertor.castToDate(value); // DateType
7191        } else if (name.equals("lastReviewDate")) {
7192          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
7193        } else if (name.equals("effectivePeriod")) {
7194          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
7195        } else if (name.equals("topic")) {
7196          this.getTopic().add(TypeConvertor.castToCodeableConcept(value));
7197        } else if (name.equals("author")) {
7198          this.getAuthor().add(TypeConvertor.castToContactDetail(value));
7199        } else if (name.equals("editor")) {
7200          this.getEditor().add(TypeConvertor.castToContactDetail(value));
7201        } else if (name.equals("reviewer")) {
7202          this.getReviewer().add(TypeConvertor.castToContactDetail(value));
7203        } else if (name.equals("endorser")) {
7204          this.getEndorser().add(TypeConvertor.castToContactDetail(value));
7205        } else if (name.equals("relatedArtifact")) {
7206          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
7207        } else if (name.equals("compose")) {
7208          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
7209        } else if (name.equals("expansion")) {
7210          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
7211        } else if (name.equals("scope")) {
7212          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
7213        } else
7214          return super.setProperty(name, value);
7215        return value;
7216      }
7217
7218      @Override
7219      public Base makeProperty(int hash, String name) throws FHIRException {
7220        switch (hash) {
7221        case 116079:  return getUrlElement();
7222        case -1618432855:  return addIdentifier(); 
7223        case 351608024:  return getVersionElement();
7224        case -115699031:  return getVersionAlgorithm();
7225        case 1508158071:  return getVersionAlgorithm();
7226        case 3373707:  return getNameElement();
7227        case 110371416:  return getTitleElement();
7228        case -892481550:  return getStatusElement();
7229        case -404562712:  return getExperimentalElement();
7230        case 3076014:  return getDateElement();
7231        case 1447404028:  return getPublisherElement();
7232        case 951526432:  return addContact(); 
7233        case -1724546052:  return getDescriptionElement();
7234        case -669707736:  return addUseContext(); 
7235        case -507075711:  return addJurisdiction(); 
7236        case 1596987778:  return getImmutableElement();
7237        case -220463842:  return getPurposeElement();
7238        case 1522889671:  return getCopyrightElement();
7239        case 765157229:  return getCopyrightLabelElement();
7240        case 223539345:  return getApprovalDateElement();
7241        case -1687512484:  return getLastReviewDateElement();
7242        case -403934648:  return getEffectivePeriod();
7243        case 110546223:  return addTopic(); 
7244        case -1406328437:  return addAuthor(); 
7245        case -1307827859:  return addEditor(); 
7246        case -261190139:  return addReviewer(); 
7247        case 1740277666:  return addEndorser(); 
7248        case 666807069:  return addRelatedArtifact(); 
7249        case 950497682:  return getCompose();
7250        case 17878207:  return getExpansion();
7251        case 109264468:  return getScope();
7252        default: return super.makeProperty(hash, name);
7253        }
7254
7255      }
7256
7257      @Override
7258      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
7259        switch (hash) {
7260        case 116079: /*url*/ return new String[] {"uri"};
7261        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
7262        case 351608024: /*version*/ return new String[] {"string"};
7263        case 1508158071: /*versionAlgorithm*/ return new String[] {"string", "Coding"};
7264        case 3373707: /*name*/ return new String[] {"string"};
7265        case 110371416: /*title*/ return new String[] {"string"};
7266        case -892481550: /*status*/ return new String[] {"code"};
7267        case -404562712: /*experimental*/ return new String[] {"boolean"};
7268        case 3076014: /*date*/ return new String[] {"dateTime"};
7269        case 1447404028: /*publisher*/ return new String[] {"string"};
7270        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
7271        case -1724546052: /*description*/ return new String[] {"markdown"};
7272        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
7273        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
7274        case 1596987778: /*immutable*/ return new String[] {"boolean"};
7275        case -220463842: /*purpose*/ return new String[] {"markdown"};
7276        case 1522889671: /*copyright*/ return new String[] {"markdown"};
7277        case 765157229: /*copyrightLabel*/ return new String[] {"string"};
7278        case 223539345: /*approvalDate*/ return new String[] {"date"};
7279        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
7280        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
7281        case 110546223: /*topic*/ return new String[] {"CodeableConcept"};
7282        case -1406328437: /*author*/ return new String[] {"ContactDetail"};
7283        case -1307827859: /*editor*/ return new String[] {"ContactDetail"};
7284        case -261190139: /*reviewer*/ return new String[] {"ContactDetail"};
7285        case 1740277666: /*endorser*/ return new String[] {"ContactDetail"};
7286        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
7287        case 950497682: /*compose*/ return new String[] {};
7288        case 17878207: /*expansion*/ return new String[] {};
7289        case 109264468: /*scope*/ return new String[] {};
7290        default: return super.getTypesForProperty(hash, name);
7291        }
7292
7293      }
7294
7295      @Override
7296      public Base addChild(String name) throws FHIRException {
7297        if (name.equals("url")) {
7298          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.url");
7299        }
7300        else if (name.equals("identifier")) {
7301          return addIdentifier();
7302        }
7303        else if (name.equals("version")) {
7304          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.version");
7305        }
7306        else if (name.equals("versionAlgorithmString")) {
7307          this.versionAlgorithm = new StringType();
7308          return this.versionAlgorithm;
7309        }
7310        else if (name.equals("versionAlgorithmCoding")) {
7311          this.versionAlgorithm = new Coding();
7312          return this.versionAlgorithm;
7313        }
7314        else if (name.equals("name")) {
7315          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.name");
7316        }
7317        else if (name.equals("title")) {
7318          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.title");
7319        }
7320        else if (name.equals("status")) {
7321          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.status");
7322        }
7323        else if (name.equals("experimental")) {
7324          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.experimental");
7325        }
7326        else if (name.equals("date")) {
7327          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.date");
7328        }
7329        else if (name.equals("publisher")) {
7330          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.publisher");
7331        }
7332        else if (name.equals("contact")) {
7333          return addContact();
7334        }
7335        else if (name.equals("description")) {
7336          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.description");
7337        }
7338        else if (name.equals("useContext")) {
7339          return addUseContext();
7340        }
7341        else if (name.equals("jurisdiction")) {
7342          return addJurisdiction();
7343        }
7344        else if (name.equals("immutable")) {
7345          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.immutable");
7346        }
7347        else if (name.equals("purpose")) {
7348          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.purpose");
7349        }
7350        else if (name.equals("copyright")) {
7351          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.copyright");
7352        }
7353        else if (name.equals("copyrightLabel")) {
7354          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.copyrightLabel");
7355        }
7356        else if (name.equals("approvalDate")) {
7357          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.approvalDate");
7358        }
7359        else if (name.equals("lastReviewDate")) {
7360          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.lastReviewDate");
7361        }
7362        else if (name.equals("effectivePeriod")) {
7363          this.effectivePeriod = new Period();
7364          return this.effectivePeriod;
7365        }
7366        else if (name.equals("topic")) {
7367          return addTopic();
7368        }
7369        else if (name.equals("author")) {
7370          return addAuthor();
7371        }
7372        else if (name.equals("editor")) {
7373          return addEditor();
7374        }
7375        else if (name.equals("reviewer")) {
7376          return addReviewer();
7377        }
7378        else if (name.equals("endorser")) {
7379          return addEndorser();
7380        }
7381        else if (name.equals("relatedArtifact")) {
7382          return addRelatedArtifact();
7383        }
7384        else if (name.equals("compose")) {
7385          this.compose = new ValueSetComposeComponent();
7386          return this.compose;
7387        }
7388        else if (name.equals("expansion")) {
7389          this.expansion = new ValueSetExpansionComponent();
7390          return this.expansion;
7391        }
7392        else if (name.equals("scope")) {
7393          this.scope = new ValueSetScopeComponent();
7394          return this.scope;
7395        }
7396        else
7397          return super.addChild(name);
7398      }
7399
7400  public String fhirType() {
7401    return "ValueSet";
7402
7403  }
7404
7405      public ValueSet copy() {
7406        ValueSet dst = new ValueSet();
7407        copyValues(dst);
7408        return dst;
7409      }
7410
7411      public void copyValues(ValueSet dst) {
7412        super.copyValues(dst);
7413        dst.url = url == null ? null : url.copy();
7414        if (identifier != null) {
7415          dst.identifier = new ArrayList<Identifier>();
7416          for (Identifier i : identifier)
7417            dst.identifier.add(i.copy());
7418        };
7419        dst.version = version == null ? null : version.copy();
7420        dst.versionAlgorithm = versionAlgorithm == null ? null : versionAlgorithm.copy();
7421        dst.name = name == null ? null : name.copy();
7422        dst.title = title == null ? null : title.copy();
7423        dst.status = status == null ? null : status.copy();
7424        dst.experimental = experimental == null ? null : experimental.copy();
7425        dst.date = date == null ? null : date.copy();
7426        dst.publisher = publisher == null ? null : publisher.copy();
7427        if (contact != null) {
7428          dst.contact = new ArrayList<ContactDetail>();
7429          for (ContactDetail i : contact)
7430            dst.contact.add(i.copy());
7431        };
7432        dst.description = description == null ? null : description.copy();
7433        if (useContext != null) {
7434          dst.useContext = new ArrayList<UsageContext>();
7435          for (UsageContext i : useContext)
7436            dst.useContext.add(i.copy());
7437        };
7438        if (jurisdiction != null) {
7439          dst.jurisdiction = new ArrayList<CodeableConcept>();
7440          for (CodeableConcept i : jurisdiction)
7441            dst.jurisdiction.add(i.copy());
7442        };
7443        dst.immutable = immutable == null ? null : immutable.copy();
7444        dst.purpose = purpose == null ? null : purpose.copy();
7445        dst.copyright = copyright == null ? null : copyright.copy();
7446        dst.copyrightLabel = copyrightLabel == null ? null : copyrightLabel.copy();
7447        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
7448        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
7449        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
7450        if (topic != null) {
7451          dst.topic = new ArrayList<CodeableConcept>();
7452          for (CodeableConcept i : topic)
7453            dst.topic.add(i.copy());
7454        };
7455        if (author != null) {
7456          dst.author = new ArrayList<ContactDetail>();
7457          for (ContactDetail i : author)
7458            dst.author.add(i.copy());
7459        };
7460        if (editor != null) {
7461          dst.editor = new ArrayList<ContactDetail>();
7462          for (ContactDetail i : editor)
7463            dst.editor.add(i.copy());
7464        };
7465        if (reviewer != null) {
7466          dst.reviewer = new ArrayList<ContactDetail>();
7467          for (ContactDetail i : reviewer)
7468            dst.reviewer.add(i.copy());
7469        };
7470        if (endorser != null) {
7471          dst.endorser = new ArrayList<ContactDetail>();
7472          for (ContactDetail i : endorser)
7473            dst.endorser.add(i.copy());
7474        };
7475        if (relatedArtifact != null) {
7476          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
7477          for (RelatedArtifact i : relatedArtifact)
7478            dst.relatedArtifact.add(i.copy());
7479        };
7480        dst.compose = compose == null ? null : compose.copy();
7481        dst.expansion = expansion == null ? null : expansion.copy();
7482        dst.scope = scope == null ? null : scope.copy();
7483      }
7484
7485      protected ValueSet typedCopy() {
7486        return copy();
7487      }
7488
7489      @Override
7490      public boolean equalsDeep(Base other_) {
7491        if (!super.equalsDeep(other_))
7492          return false;
7493        if (!(other_ instanceof ValueSet))
7494          return false;
7495        ValueSet o = (ValueSet) other_;
7496        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
7497           && compareDeep(versionAlgorithm, o.versionAlgorithm, true) && compareDeep(name, o.name, true) && compareDeep(title, o.title, true)
7498           && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true)
7499           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true)
7500           && compareDeep(useContext, o.useContext, true) && compareDeep(jurisdiction, o.jurisdiction, true)
7501           && compareDeep(immutable, o.immutable, true) && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
7502           && compareDeep(copyrightLabel, o.copyrightLabel, true) && compareDeep(approvalDate, o.approvalDate, true)
7503           && compareDeep(lastReviewDate, o.lastReviewDate, true) && compareDeep(effectivePeriod, o.effectivePeriod, true)
7504           && compareDeep(topic, o.topic, true) && compareDeep(author, o.author, true) && compareDeep(editor, o.editor, true)
7505           && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
7506           && compareDeep(compose, o.compose, true) && compareDeep(expansion, o.expansion, true) && compareDeep(scope, o.scope, true)
7507          ;
7508      }
7509
7510      @Override
7511      public boolean equalsShallow(Base other_) {
7512        if (!super.equalsShallow(other_))
7513          return false;
7514        if (!(other_ instanceof ValueSet))
7515          return false;
7516        ValueSet o = (ValueSet) other_;
7517        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
7518           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
7519           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
7520           && compareValues(immutable, o.immutable, true) && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
7521           && compareValues(copyrightLabel, o.copyrightLabel, true) && compareValues(approvalDate, o.approvalDate, true)
7522           && compareValues(lastReviewDate, o.lastReviewDate, true);
7523      }
7524
7525      public boolean isEmpty() {
7526        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
7527          , versionAlgorithm, name, title, status, experimental, date, publisher, contact
7528          , description, useContext, jurisdiction, immutable, purpose, copyright, copyrightLabel
7529          , approvalDate, lastReviewDate, effectivePeriod, topic, author, editor, reviewer
7530          , endorser, relatedArtifact, compose, expansion, scope);
7531      }
7532
7533  @Override
7534  public ResourceType getResourceType() {
7535    return ResourceType.ValueSet;
7536   }
7537
7538 /**
7539   * Search parameter: <b>context-quantity</b>
7540   * <p>
7541   * Description: <b>Multiple Resources: 
7542
7543* [ActivityDefinition](activitydefinition.html): A quantity- or range-valued use context assigned to the activity definition
7544* [ActorDefinition](actordefinition.html): A quantity- or range-valued use context assigned to the Actor Definition
7545* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
7546* [ChargeItemDefinition](chargeitemdefinition.html): A quantity- or range-valued use context assigned to the charge item definition
7547* [Citation](citation.html): A quantity- or range-valued use context assigned to the citation
7548* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
7549* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
7550* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
7551* [ConditionDefinition](conditiondefinition.html): A quantity- or range-valued use context assigned to the condition definition
7552* [EventDefinition](eventdefinition.html): A quantity- or range-valued use context assigned to the event definition
7553* [Evidence](evidence.html): A quantity- or range-valued use context assigned to the evidence
7554* [EvidenceReport](evidencereport.html): A quantity- or range-valued use context assigned to the evidence report
7555* [EvidenceVariable](evidencevariable.html): A quantity- or range-valued use context assigned to the evidence variable
7556* [ExampleScenario](examplescenario.html): A quantity- or range-valued use context assigned to the example scenario
7557* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
7558* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
7559* [Library](library.html): A quantity- or range-valued use context assigned to the library
7560* [Measure](measure.html): A quantity- or range-valued use context assigned to the measure
7561* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
7562* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
7563* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
7564* [PlanDefinition](plandefinition.html): A quantity- or range-valued use context assigned to the plan definition
7565* [Questionnaire](questionnaire.html): A quantity- or range-valued use context assigned to the questionnaire
7566* [Requirements](requirements.html): A quantity- or range-valued use context assigned to the requirements
7567* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
7568* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
7569* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
7570* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
7571* [TestScript](testscript.html): A quantity- or range-valued use context assigned to the test script
7572* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
7573</b><br>
7574   * Type: <b>quantity</b><br>
7575   * Path: <b>(ActivityDefinition.useContext.value.ofType(Quantity)) | (ActivityDefinition.useContext.value.ofType(Range)) | (ActorDefinition.useContext.value.ofType(Quantity)) | (ActorDefinition.useContext.value.ofType(Range)) | (CapabilityStatement.useContext.value.ofType(Quantity)) | (CapabilityStatement.useContext.value.ofType(Range)) | (ChargeItemDefinition.useContext.value.ofType(Quantity)) | (ChargeItemDefinition.useContext.value.ofType(Range)) | (Citation.useContext.value.ofType(Quantity)) | (Citation.useContext.value.ofType(Range)) | (CodeSystem.useContext.value.ofType(Quantity)) | (CodeSystem.useContext.value.ofType(Range)) | (CompartmentDefinition.useContext.value.ofType(Quantity)) | (CompartmentDefinition.useContext.value.ofType(Range)) | (ConceptMap.useContext.value.ofType(Quantity)) | (ConceptMap.useContext.value.ofType(Range)) | (ConditionDefinition.useContext.value.ofType(Quantity)) | (ConditionDefinition.useContext.value.ofType(Range)) | (EventDefinition.useContext.value.ofType(Quantity)) | (EventDefinition.useContext.value.ofType(Range)) | (Evidence.useContext.value.ofType(Quantity)) | (Evidence.useContext.value.ofType(Range)) | (EvidenceReport.useContext.value.ofType(Quantity)) | (EvidenceReport.useContext.value.ofType(Range)) | (EvidenceVariable.useContext.value.ofType(Quantity)) | (EvidenceVariable.useContext.value.ofType(Range)) | (ExampleScenario.useContext.value.ofType(Quantity)) | (ExampleScenario.useContext.value.ofType(Range)) | (GraphDefinition.useContext.value.ofType(Quantity)) | (GraphDefinition.useContext.value.ofType(Range)) | (ImplementationGuide.useContext.value.ofType(Quantity)) | (ImplementationGuide.useContext.value.ofType(Range)) | (Library.useContext.value.ofType(Quantity)) | (Library.useContext.value.ofType(Range)) | (Measure.useContext.value.ofType(Quantity)) | (Measure.useContext.value.ofType(Range)) | (MessageDefinition.useContext.value.ofType(Quantity)) | (MessageDefinition.useContext.value.ofType(Range)) | (NamingSystem.useContext.value.ofType(Quantity)) | (NamingSystem.useContext.value.ofType(Range)) | (OperationDefinition.useContext.value.ofType(Quantity)) | (OperationDefinition.useContext.value.ofType(Range)) | (PlanDefinition.useContext.value.ofType(Quantity)) | (PlanDefinition.useContext.value.ofType(Range)) | (Questionnaire.useContext.value.ofType(Quantity)) | (Questionnaire.useContext.value.ofType(Range)) | (Requirements.useContext.value.ofType(Quantity)) | (Requirements.useContext.value.ofType(Range)) | (SearchParameter.useContext.value.ofType(Quantity)) | (SearchParameter.useContext.value.ofType(Range)) | (StructureDefinition.useContext.value.ofType(Quantity)) | (StructureDefinition.useContext.value.ofType(Range)) | (StructureMap.useContext.value.ofType(Quantity)) | (StructureMap.useContext.value.ofType(Range)) | (TerminologyCapabilities.useContext.value.ofType(Quantity)) | (TerminologyCapabilities.useContext.value.ofType(Range)) | (TestScript.useContext.value.ofType(Quantity)) | (TestScript.useContext.value.ofType(Range)) | (ValueSet.useContext.value.ofType(Quantity)) | (ValueSet.useContext.value.ofType(Range))</b><br>
7576   * </p>
7577   */
7578  @SearchParamDefinition(name="context-quantity", path="(ActivityDefinition.useContext.value.ofType(Quantity)) | (ActivityDefinition.useContext.value.ofType(Range)) | (ActorDefinition.useContext.value.ofType(Quantity)) | (ActorDefinition.useContext.value.ofType(Range)) | (CapabilityStatement.useContext.value.ofType(Quantity)) | (CapabilityStatement.useContext.value.ofType(Range)) | (ChargeItemDefinition.useContext.value.ofType(Quantity)) | (ChargeItemDefinition.useContext.value.ofType(Range)) | (Citation.useContext.value.ofType(Quantity)) | (Citation.useContext.value.ofType(Range)) | (CodeSystem.useContext.value.ofType(Quantity)) | (CodeSystem.useContext.value.ofType(Range)) | (CompartmentDefinition.useContext.value.ofType(Quantity)) | (CompartmentDefinition.useContext.value.ofType(Range)) | (ConceptMap.useContext.value.ofType(Quantity)) | (ConceptMap.useContext.value.ofType(Range)) | (ConditionDefinition.useContext.value.ofType(Quantity)) | (ConditionDefinition.useContext.value.ofType(Range)) | (EventDefinition.useContext.value.ofType(Quantity)) | (EventDefinition.useContext.value.ofType(Range)) | (Evidence.useContext.value.ofType(Quantity)) | (Evidence.useContext.value.ofType(Range)) | (EvidenceReport.useContext.value.ofType(Quantity)) | (EvidenceReport.useContext.value.ofType(Range)) | (EvidenceVariable.useContext.value.ofType(Quantity)) | (EvidenceVariable.useContext.value.ofType(Range)) | (ExampleScenario.useContext.value.ofType(Quantity)) | (ExampleScenario.useContext.value.ofType(Range)) | (GraphDefinition.useContext.value.ofType(Quantity)) | (GraphDefinition.useContext.value.ofType(Range)) | (ImplementationGuide.useContext.value.ofType(Quantity)) | (ImplementationGuide.useContext.value.ofType(Range)) | (Library.useContext.value.ofType(Quantity)) | (Library.useContext.value.ofType(Range)) | (Measure.useContext.value.ofType(Quantity)) | (Measure.useContext.value.ofType(Range)) | (MessageDefinition.useContext.value.ofType(Quantity)) | (MessageDefinition.useContext.value.ofType(Range)) | (NamingSystem.useContext.value.ofType(Quantity)) | (NamingSystem.useContext.value.ofType(Range)) | (OperationDefinition.useContext.value.ofType(Quantity)) | (OperationDefinition.useContext.value.ofType(Range)) | (PlanDefinition.useContext.value.ofType(Quantity)) | (PlanDefinition.useContext.value.ofType(Range)) | (Questionnaire.useContext.value.ofType(Quantity)) | (Questionnaire.useContext.value.ofType(Range)) | (Requirements.useContext.value.ofType(Quantity)) | (Requirements.useContext.value.ofType(Range)) | (SearchParameter.useContext.value.ofType(Quantity)) | (SearchParameter.useContext.value.ofType(Range)) | (StructureDefinition.useContext.value.ofType(Quantity)) | (StructureDefinition.useContext.value.ofType(Range)) | (StructureMap.useContext.value.ofType(Quantity)) | (StructureMap.useContext.value.ofType(Range)) | (TerminologyCapabilities.useContext.value.ofType(Quantity)) | (TerminologyCapabilities.useContext.value.ofType(Range)) | (TestScript.useContext.value.ofType(Quantity)) | (TestScript.useContext.value.ofType(Range)) | (ValueSet.useContext.value.ofType(Quantity)) | (ValueSet.useContext.value.ofType(Range))", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): A quantity- or range-valued use context assigned to the activity definition\r\n* [ActorDefinition](actordefinition.html): A quantity- or range-valued use context assigned to the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): A quantity- or range-valued use context assigned to the charge item definition\r\n* [Citation](citation.html): A quantity- or range-valued use context assigned to the citation\r\n* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map\r\n* [ConditionDefinition](conditiondefinition.html): A quantity- or range-valued use context assigned to the condition definition\r\n* [EventDefinition](eventdefinition.html): A quantity- or range-valued use context assigned to the event definition\r\n* [Evidence](evidence.html): A quantity- or range-valued use context assigned to the evidence\r\n* [EvidenceReport](evidencereport.html): A quantity- or range-valued use context assigned to the evidence report\r\n* [EvidenceVariable](evidencevariable.html): A quantity- or range-valued use context assigned to the evidence variable\r\n* [ExampleScenario](examplescenario.html): A quantity- or range-valued use context assigned to the example scenario\r\n* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide\r\n* [Library](library.html): A quantity- or range-valued use context assigned to the library\r\n* [Measure](measure.html): A quantity- or range-valued use context assigned to the measure\r\n* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition\r\n* [PlanDefinition](plandefinition.html): A quantity- or range-valued use context assigned to the plan definition\r\n* [Questionnaire](questionnaire.html): A quantity- or range-valued use context assigned to the questionnaire\r\n* [Requirements](requirements.html): A quantity- or range-valued use context assigned to the requirements\r\n* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities\r\n* [TestScript](testscript.html): A quantity- or range-valued use context assigned to the test script\r\n* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set\r\n", type="quantity" )
7579  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
7580 /**
7581   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
7582   * <p>
7583   * Description: <b>Multiple Resources: 
7584
7585* [ActivityDefinition](activitydefinition.html): A quantity- or range-valued use context assigned to the activity definition
7586* [ActorDefinition](actordefinition.html): A quantity- or range-valued use context assigned to the Actor Definition
7587* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
7588* [ChargeItemDefinition](chargeitemdefinition.html): A quantity- or range-valued use context assigned to the charge item definition
7589* [Citation](citation.html): A quantity- or range-valued use context assigned to the citation
7590* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
7591* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
7592* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
7593* [ConditionDefinition](conditiondefinition.html): A quantity- or range-valued use context assigned to the condition definition
7594* [EventDefinition](eventdefinition.html): A quantity- or range-valued use context assigned to the event definition
7595* [Evidence](evidence.html): A quantity- or range-valued use context assigned to the evidence
7596* [EvidenceReport](evidencereport.html): A quantity- or range-valued use context assigned to the evidence report
7597* [EvidenceVariable](evidencevariable.html): A quantity- or range-valued use context assigned to the evidence variable
7598* [ExampleScenario](examplescenario.html): A quantity- or range-valued use context assigned to the example scenario
7599* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
7600* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
7601* [Library](library.html): A quantity- or range-valued use context assigned to the library
7602* [Measure](measure.html): A quantity- or range-valued use context assigned to the measure
7603* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
7604* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
7605* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
7606* [PlanDefinition](plandefinition.html): A quantity- or range-valued use context assigned to the plan definition
7607* [Questionnaire](questionnaire.html): A quantity- or range-valued use context assigned to the questionnaire
7608* [Requirements](requirements.html): A quantity- or range-valued use context assigned to the requirements
7609* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
7610* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
7611* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
7612* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
7613* [TestScript](testscript.html): A quantity- or range-valued use context assigned to the test script
7614* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
7615</b><br>
7616   * Type: <b>quantity</b><br>
7617   * Path: <b>(ActivityDefinition.useContext.value.ofType(Quantity)) | (ActivityDefinition.useContext.value.ofType(Range)) | (ActorDefinition.useContext.value.ofType(Quantity)) | (ActorDefinition.useContext.value.ofType(Range)) | (CapabilityStatement.useContext.value.ofType(Quantity)) | (CapabilityStatement.useContext.value.ofType(Range)) | (ChargeItemDefinition.useContext.value.ofType(Quantity)) | (ChargeItemDefinition.useContext.value.ofType(Range)) | (Citation.useContext.value.ofType(Quantity)) | (Citation.useContext.value.ofType(Range)) | (CodeSystem.useContext.value.ofType(Quantity)) | (CodeSystem.useContext.value.ofType(Range)) | (CompartmentDefinition.useContext.value.ofType(Quantity)) | (CompartmentDefinition.useContext.value.ofType(Range)) | (ConceptMap.useContext.value.ofType(Quantity)) | (ConceptMap.useContext.value.ofType(Range)) | (ConditionDefinition.useContext.value.ofType(Quantity)) | (ConditionDefinition.useContext.value.ofType(Range)) | (EventDefinition.useContext.value.ofType(Quantity)) | (EventDefinition.useContext.value.ofType(Range)) | (Evidence.useContext.value.ofType(Quantity)) | (Evidence.useContext.value.ofType(Range)) | (EvidenceReport.useContext.value.ofType(Quantity)) | (EvidenceReport.useContext.value.ofType(Range)) | (EvidenceVariable.useContext.value.ofType(Quantity)) | (EvidenceVariable.useContext.value.ofType(Range)) | (ExampleScenario.useContext.value.ofType(Quantity)) | (ExampleScenario.useContext.value.ofType(Range)) | (GraphDefinition.useContext.value.ofType(Quantity)) | (GraphDefinition.useContext.value.ofType(Range)) | (ImplementationGuide.useContext.value.ofType(Quantity)) | (ImplementationGuide.useContext.value.ofType(Range)) | (Library.useContext.value.ofType(Quantity)) | (Library.useContext.value.ofType(Range)) | (Measure.useContext.value.ofType(Quantity)) | (Measure.useContext.value.ofType(Range)) | (MessageDefinition.useContext.value.ofType(Quantity)) | (MessageDefinition.useContext.value.ofType(Range)) | (NamingSystem.useContext.value.ofType(Quantity)) | (NamingSystem.useContext.value.ofType(Range)) | (OperationDefinition.useContext.value.ofType(Quantity)) | (OperationDefinition.useContext.value.ofType(Range)) | (PlanDefinition.useContext.value.ofType(Quantity)) | (PlanDefinition.useContext.value.ofType(Range)) | (Questionnaire.useContext.value.ofType(Quantity)) | (Questionnaire.useContext.value.ofType(Range)) | (Requirements.useContext.value.ofType(Quantity)) | (Requirements.useContext.value.ofType(Range)) | (SearchParameter.useContext.value.ofType(Quantity)) | (SearchParameter.useContext.value.ofType(Range)) | (StructureDefinition.useContext.value.ofType(Quantity)) | (StructureDefinition.useContext.value.ofType(Range)) | (StructureMap.useContext.value.ofType(Quantity)) | (StructureMap.useContext.value.ofType(Range)) | (TerminologyCapabilities.useContext.value.ofType(Quantity)) | (TerminologyCapabilities.useContext.value.ofType(Range)) | (TestScript.useContext.value.ofType(Quantity)) | (TestScript.useContext.value.ofType(Range)) | (ValueSet.useContext.value.ofType(Quantity)) | (ValueSet.useContext.value.ofType(Range))</b><br>
7618   * </p>
7619   */
7620  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
7621
7622 /**
7623   * Search parameter: <b>context-type-quantity</b>
7624   * <p>
7625   * Description: <b>Multiple Resources: 
7626
7627* [ActivityDefinition](activitydefinition.html): A use context type and quantity- or range-based value assigned to the activity definition
7628* [ActorDefinition](actordefinition.html): A use context type and quantity- or range-based value assigned to the Actor Definition
7629* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
7630* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and quantity- or range-based value assigned to the charge item definition
7631* [Citation](citation.html): A use context type and quantity- or range-based value assigned to the citation
7632* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
7633* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
7634* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
7635* [ConditionDefinition](conditiondefinition.html): A use context type and quantity- or range-based value assigned to the condition definition
7636* [EventDefinition](eventdefinition.html): A use context type and quantity- or range-based value assigned to the event definition
7637* [Evidence](evidence.html): A use context type and quantity- or range-based value assigned to the evidence
7638* [EvidenceReport](evidencereport.html): A use context type and quantity- or range-based value assigned to the evidence report
7639* [EvidenceVariable](evidencevariable.html): A use context type and quantity- or range-based value assigned to the evidence variable
7640* [ExampleScenario](examplescenario.html): A use context type and quantity- or range-based value assigned to the example scenario
7641* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
7642* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
7643* [Library](library.html): A use context type and quantity- or range-based value assigned to the library
7644* [Measure](measure.html): A use context type and quantity- or range-based value assigned to the measure
7645* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
7646* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
7647* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
7648* [PlanDefinition](plandefinition.html): A use context type and quantity- or range-based value assigned to the plan definition
7649* [Questionnaire](questionnaire.html): A use context type and quantity- or range-based value assigned to the questionnaire
7650* [Requirements](requirements.html): A use context type and quantity- or range-based value assigned to the requirements
7651* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
7652* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
7653* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
7654* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
7655* [TestScript](testscript.html): A use context type and quantity- or range-based value assigned to the test script
7656* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
7657</b><br>
7658   * Type: <b>composite</b><br>
7659   * Path: <b>ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext</b><br>
7660   * </p>
7661   */
7662  @SearchParamDefinition(name="context-type-quantity", path="ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): A use context type and quantity- or range-based value assigned to the activity definition\r\n* [ActorDefinition](actordefinition.html): A use context type and quantity- or range-based value assigned to the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and quantity- or range-based value assigned to the charge item definition\r\n* [Citation](citation.html): A use context type and quantity- or range-based value assigned to the citation\r\n* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map\r\n* [ConditionDefinition](conditiondefinition.html): A use context type and quantity- or range-based value assigned to the condition definition\r\n* [EventDefinition](eventdefinition.html): A use context type and quantity- or range-based value assigned to the event definition\r\n* [Evidence](evidence.html): A use context type and quantity- or range-based value assigned to the evidence\r\n* [EvidenceReport](evidencereport.html): A use context type and quantity- or range-based value assigned to the evidence report\r\n* [EvidenceVariable](evidencevariable.html): A use context type and quantity- or range-based value assigned to the evidence variable\r\n* [ExampleScenario](examplescenario.html): A use context type and quantity- or range-based value assigned to the example scenario\r\n* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide\r\n* [Library](library.html): A use context type and quantity- or range-based value assigned to the library\r\n* [Measure](measure.html): A use context type and quantity- or range-based value assigned to the measure\r\n* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition\r\n* [PlanDefinition](plandefinition.html): A use context type and quantity- or range-based value assigned to the plan definition\r\n* [Questionnaire](questionnaire.html): A use context type and quantity- or range-based value assigned to the questionnaire\r\n* [Requirements](requirements.html): A use context type and quantity- or range-based value assigned to the requirements\r\n* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities\r\n* [TestScript](testscript.html): A use context type and quantity- or range-based value assigned to the test script\r\n* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context-quantity"} )
7663  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
7664 /**
7665   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
7666   * <p>
7667   * Description: <b>Multiple Resources: 
7668
7669* [ActivityDefinition](activitydefinition.html): A use context type and quantity- or range-based value assigned to the activity definition
7670* [ActorDefinition](actordefinition.html): A use context type and quantity- or range-based value assigned to the Actor Definition
7671* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
7672* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and quantity- or range-based value assigned to the charge item definition
7673* [Citation](citation.html): A use context type and quantity- or range-based value assigned to the citation
7674* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
7675* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
7676* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
7677* [ConditionDefinition](conditiondefinition.html): A use context type and quantity- or range-based value assigned to the condition definition
7678* [EventDefinition](eventdefinition.html): A use context type and quantity- or range-based value assigned to the event definition
7679* [Evidence](evidence.html): A use context type and quantity- or range-based value assigned to the evidence
7680* [EvidenceReport](evidencereport.html): A use context type and quantity- or range-based value assigned to the evidence report
7681* [EvidenceVariable](evidencevariable.html): A use context type and quantity- or range-based value assigned to the evidence variable
7682* [ExampleScenario](examplescenario.html): A use context type and quantity- or range-based value assigned to the example scenario
7683* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
7684* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
7685* [Library](library.html): A use context type and quantity- or range-based value assigned to the library
7686* [Measure](measure.html): A use context type and quantity- or range-based value assigned to the measure
7687* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
7688* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
7689* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
7690* [PlanDefinition](plandefinition.html): A use context type and quantity- or range-based value assigned to the plan definition
7691* [Questionnaire](questionnaire.html): A use context type and quantity- or range-based value assigned to the questionnaire
7692* [Requirements](requirements.html): A use context type and quantity- or range-based value assigned to the requirements
7693* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
7694* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
7695* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
7696* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
7697* [TestScript](testscript.html): A use context type and quantity- or range-based value assigned to the test script
7698* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
7699</b><br>
7700   * Type: <b>composite</b><br>
7701   * Path: <b>ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext</b><br>
7702   * </p>
7703   */
7704  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);
7705
7706 /**
7707   * Search parameter: <b>context-type-value</b>
7708   * <p>
7709   * Description: <b>Multiple Resources: 
7710
7711* [ActivityDefinition](activitydefinition.html): A use context type and value assigned to the activity definition
7712* [ActorDefinition](actordefinition.html): A use context type and value assigned to the Actor Definition
7713* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
7714* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and value assigned to the charge item definition
7715* [Citation](citation.html): A use context type and value assigned to the citation
7716* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
7717* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
7718* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
7719* [ConditionDefinition](conditiondefinition.html): A use context type and value assigned to the condition definition
7720* [EventDefinition](eventdefinition.html): A use context type and value assigned to the event definition
7721* [Evidence](evidence.html): A use context type and value assigned to the evidence
7722* [EvidenceReport](evidencereport.html): A use context type and value assigned to the evidence report
7723* [EvidenceVariable](evidencevariable.html): A use context type and value assigned to the evidence variable
7724* [ExampleScenario](examplescenario.html): A use context type and value assigned to the example scenario
7725* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
7726* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
7727* [Library](library.html): A use context type and value assigned to the library
7728* [Measure](measure.html): A use context type and value assigned to the measure
7729* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
7730* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
7731* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
7732* [PlanDefinition](plandefinition.html): A use context type and value assigned to the plan definition
7733* [Questionnaire](questionnaire.html): A use context type and value assigned to the questionnaire
7734* [Requirements](requirements.html): A use context type and value assigned to the requirements
7735* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
7736* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
7737* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
7738* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
7739* [TestScript](testscript.html): A use context type and value assigned to the test script
7740* [ValueSet](valueset.html): A use context type and value assigned to the value set
7741</b><br>
7742   * Type: <b>composite</b><br>
7743   * Path: <b>ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext</b><br>
7744   * </p>
7745   */
7746  @SearchParamDefinition(name="context-type-value", path="ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): A use context type and value assigned to the activity definition\r\n* [ActorDefinition](actordefinition.html): A use context type and value assigned to the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and value assigned to the charge item definition\r\n* [Citation](citation.html): A use context type and value assigned to the citation\r\n* [CodeSystem](codesystem.html): A use context type and value assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map\r\n* [ConditionDefinition](conditiondefinition.html): A use context type and value assigned to the condition definition\r\n* [EventDefinition](eventdefinition.html): A use context type and value assigned to the event definition\r\n* [Evidence](evidence.html): A use context type and value assigned to the evidence\r\n* [EvidenceReport](evidencereport.html): A use context type and value assigned to the evidence report\r\n* [EvidenceVariable](evidencevariable.html): A use context type and value assigned to the evidence variable\r\n* [ExampleScenario](examplescenario.html): A use context type and value assigned to the example scenario\r\n* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide\r\n* [Library](library.html): A use context type and value assigned to the library\r\n* [Measure](measure.html): A use context type and value assigned to the measure\r\n* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition\r\n* [PlanDefinition](plandefinition.html): A use context type and value assigned to the plan definition\r\n* [Questionnaire](questionnaire.html): A use context type and value assigned to the questionnaire\r\n* [Requirements](requirements.html): A use context type and value assigned to the requirements\r\n* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context type and value assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities\r\n* [TestScript](testscript.html): A use context type and value assigned to the test script\r\n* [ValueSet](valueset.html): A use context type and value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context"} )
7747  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
7748 /**
7749   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
7750   * <p>
7751   * Description: <b>Multiple Resources: 
7752
7753* [ActivityDefinition](activitydefinition.html): A use context type and value assigned to the activity definition
7754* [ActorDefinition](actordefinition.html): A use context type and value assigned to the Actor Definition
7755* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
7756* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and value assigned to the charge item definition
7757* [Citation](citation.html): A use context type and value assigned to the citation
7758* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
7759* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
7760* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
7761* [ConditionDefinition](conditiondefinition.html): A use context type and value assigned to the condition definition
7762* [EventDefinition](eventdefinition.html): A use context type and value assigned to the event definition
7763* [Evidence](evidence.html): A use context type and value assigned to the evidence
7764* [EvidenceReport](evidencereport.html): A use context type and value assigned to the evidence report
7765* [EvidenceVariable](evidencevariable.html): A use context type and value assigned to the evidence variable
7766* [ExampleScenario](examplescenario.html): A use context type and value assigned to the example scenario
7767* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
7768* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
7769* [Library](library.html): A use context type and value assigned to the library
7770* [Measure](measure.html): A use context type and value assigned to the measure
7771* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
7772* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
7773* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
7774* [PlanDefinition](plandefinition.html): A use context type and value assigned to the plan definition
7775* [Questionnaire](questionnaire.html): A use context type and value assigned to the questionnaire
7776* [Requirements](requirements.html): A use context type and value assigned to the requirements
7777* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
7778* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
7779* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
7780* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
7781* [TestScript](testscript.html): A use context type and value assigned to the test script
7782* [ValueSet](valueset.html): A use context type and value assigned to the value set
7783</b><br>
7784   * Type: <b>composite</b><br>
7785   * Path: <b>ActivityDefinition.useContext | ActorDefinition.useContext | CapabilityStatement.useContext | ChargeItemDefinition.useContext | Citation.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | ConditionDefinition.useContext | EventDefinition.useContext | Evidence.useContext | EvidenceReport.useContext | EvidenceVariable.useContext | ExampleScenario.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | Library.useContext | Measure.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | PlanDefinition.useContext | Questionnaire.useContext | Requirements.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | TestScript.useContext | ValueSet.useContext</b><br>
7786   * </p>
7787   */
7788  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);
7789
7790 /**
7791   * Search parameter: <b>context-type</b>
7792   * <p>
7793   * Description: <b>Multiple Resources: 
7794
7795* [ActivityDefinition](activitydefinition.html): A type of use context assigned to the activity definition
7796* [ActorDefinition](actordefinition.html): A type of use context assigned to the Actor Definition
7797* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
7798* [ChargeItemDefinition](chargeitemdefinition.html): A type of use context assigned to the charge item definition
7799* [Citation](citation.html): A type of use context assigned to the citation
7800* [CodeSystem](codesystem.html): A type of use context assigned to the code system
7801* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
7802* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
7803* [ConditionDefinition](conditiondefinition.html): A type of use context assigned to the condition definition
7804* [EventDefinition](eventdefinition.html): A type of use context assigned to the event definition
7805* [Evidence](evidence.html): A type of use context assigned to the evidence
7806* [EvidenceReport](evidencereport.html): A type of use context assigned to the evidence report
7807* [EvidenceVariable](evidencevariable.html): A type of use context assigned to the evidence variable
7808* [ExampleScenario](examplescenario.html): A type of use context assigned to the example scenario
7809* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
7810* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
7811* [Library](library.html): A type of use context assigned to the library
7812* [Measure](measure.html): A type of use context assigned to the measure
7813* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
7814* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
7815* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
7816* [PlanDefinition](plandefinition.html): A type of use context assigned to the plan definition
7817* [Questionnaire](questionnaire.html): A type of use context assigned to the questionnaire
7818* [Requirements](requirements.html): A type of use context assigned to the requirements
7819* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
7820* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
7821* [StructureMap](structuremap.html): A type of use context assigned to the structure map
7822* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
7823* [TestScript](testscript.html): A type of use context assigned to the test script
7824* [ValueSet](valueset.html): A type of use context assigned to the value set
7825</b><br>
7826   * Type: <b>token</b><br>
7827   * Path: <b>ActivityDefinition.useContext.code | ActorDefinition.useContext.code | CapabilityStatement.useContext.code | ChargeItemDefinition.useContext.code | Citation.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | ConditionDefinition.useContext.code | EventDefinition.useContext.code | Evidence.useContext.code | EvidenceReport.useContext.code | EvidenceVariable.useContext.code | ExampleScenario.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | Library.useContext.code | Measure.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | PlanDefinition.useContext.code | Questionnaire.useContext.code | Requirements.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | TestScript.useContext.code | ValueSet.useContext.code</b><br>
7828   * </p>
7829   */
7830  @SearchParamDefinition(name="context-type", path="ActivityDefinition.useContext.code | ActorDefinition.useContext.code | CapabilityStatement.useContext.code | ChargeItemDefinition.useContext.code | Citation.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | ConditionDefinition.useContext.code | EventDefinition.useContext.code | Evidence.useContext.code | EvidenceReport.useContext.code | EvidenceVariable.useContext.code | ExampleScenario.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | Library.useContext.code | Measure.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | PlanDefinition.useContext.code | Questionnaire.useContext.code | Requirements.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | TestScript.useContext.code | ValueSet.useContext.code", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): A type of use context assigned to the activity definition\r\n* [ActorDefinition](actordefinition.html): A type of use context assigned to the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): A type of use context assigned to the charge item definition\r\n* [Citation](citation.html): A type of use context assigned to the citation\r\n* [CodeSystem](codesystem.html): A type of use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map\r\n* [ConditionDefinition](conditiondefinition.html): A type of use context assigned to the condition definition\r\n* [EventDefinition](eventdefinition.html): A type of use context assigned to the event definition\r\n* [Evidence](evidence.html): A type of use context assigned to the evidence\r\n* [EvidenceReport](evidencereport.html): A type of use context assigned to the evidence report\r\n* [EvidenceVariable](evidencevariable.html): A type of use context assigned to the evidence variable\r\n* [ExampleScenario](examplescenario.html): A type of use context assigned to the example scenario\r\n* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide\r\n* [Library](library.html): A type of use context assigned to the library\r\n* [Measure](measure.html): A type of use context assigned to the measure\r\n* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition\r\n* [PlanDefinition](plandefinition.html): A type of use context assigned to the plan definition\r\n* [Questionnaire](questionnaire.html): A type of use context assigned to the questionnaire\r\n* [Requirements](requirements.html): A type of use context assigned to the requirements\r\n* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A type of use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities\r\n* [TestScript](testscript.html): A type of use context assigned to the test script\r\n* [ValueSet](valueset.html): A type of use context assigned to the value set\r\n", type="token" )
7831  public static final String SP_CONTEXT_TYPE = "context-type";
7832 /**
7833   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
7834   * <p>
7835   * Description: <b>Multiple Resources: 
7836
7837* [ActivityDefinition](activitydefinition.html): A type of use context assigned to the activity definition
7838* [ActorDefinition](actordefinition.html): A type of use context assigned to the Actor Definition
7839* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
7840* [ChargeItemDefinition](chargeitemdefinition.html): A type of use context assigned to the charge item definition
7841* [Citation](citation.html): A type of use context assigned to the citation
7842* [CodeSystem](codesystem.html): A type of use context assigned to the code system
7843* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
7844* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
7845* [ConditionDefinition](conditiondefinition.html): A type of use context assigned to the condition definition
7846* [EventDefinition](eventdefinition.html): A type of use context assigned to the event definition
7847* [Evidence](evidence.html): A type of use context assigned to the evidence
7848* [EvidenceReport](evidencereport.html): A type of use context assigned to the evidence report
7849* [EvidenceVariable](evidencevariable.html): A type of use context assigned to the evidence variable
7850* [ExampleScenario](examplescenario.html): A type of use context assigned to the example scenario
7851* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
7852* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
7853* [Library](library.html): A type of use context assigned to the library
7854* [Measure](measure.html): A type of use context assigned to the measure
7855* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
7856* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
7857* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
7858* [PlanDefinition](plandefinition.html): A type of use context assigned to the plan definition
7859* [Questionnaire](questionnaire.html): A type of use context assigned to the questionnaire
7860* [Requirements](requirements.html): A type of use context assigned to the requirements
7861* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
7862* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
7863* [StructureMap](structuremap.html): A type of use context assigned to the structure map
7864* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
7865* [TestScript](testscript.html): A type of use context assigned to the test script
7866* [ValueSet](valueset.html): A type of use context assigned to the value set
7867</b><br>
7868   * Type: <b>token</b><br>
7869   * Path: <b>ActivityDefinition.useContext.code | ActorDefinition.useContext.code | CapabilityStatement.useContext.code | ChargeItemDefinition.useContext.code | Citation.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | ConditionDefinition.useContext.code | EventDefinition.useContext.code | Evidence.useContext.code | EvidenceReport.useContext.code | EvidenceVariable.useContext.code | ExampleScenario.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | Library.useContext.code | Measure.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | PlanDefinition.useContext.code | Questionnaire.useContext.code | Requirements.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | TestScript.useContext.code | ValueSet.useContext.code</b><br>
7870   * </p>
7871   */
7872  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
7873
7874 /**
7875   * Search parameter: <b>context</b>
7876   * <p>
7877   * Description: <b>Multiple Resources: 
7878
7879* [ActivityDefinition](activitydefinition.html): A use context assigned to the activity definition
7880* [ActorDefinition](actordefinition.html): A use context assigned to the Actor Definition
7881* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
7882* [ChargeItemDefinition](chargeitemdefinition.html): A use context assigned to the charge item definition
7883* [Citation](citation.html): A use context assigned to the citation
7884* [CodeSystem](codesystem.html): A use context assigned to the code system
7885* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
7886* [ConceptMap](conceptmap.html): A use context assigned to the concept map
7887* [ConditionDefinition](conditiondefinition.html): A use context assigned to the condition definition
7888* [EventDefinition](eventdefinition.html): A use context assigned to the event definition
7889* [Evidence](evidence.html): A use context assigned to the evidence
7890* [EvidenceReport](evidencereport.html): A use context assigned to the evidence report
7891* [EvidenceVariable](evidencevariable.html): A use context assigned to the evidence variable
7892* [ExampleScenario](examplescenario.html): A use context assigned to the example scenario
7893* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
7894* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
7895* [Library](library.html): A use context assigned to the library
7896* [Measure](measure.html): A use context assigned to the measure
7897* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
7898* [NamingSystem](namingsystem.html): A use context assigned to the naming system
7899* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
7900* [PlanDefinition](plandefinition.html): A use context assigned to the plan definition
7901* [Questionnaire](questionnaire.html): A use context assigned to the questionnaire
7902* [Requirements](requirements.html): A use context assigned to the requirements
7903* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
7904* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
7905* [StructureMap](structuremap.html): A use context assigned to the structure map
7906* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
7907* [TestScript](testscript.html): A use context assigned to the test script
7908* [ValueSet](valueset.html): A use context assigned to the value set
7909</b><br>
7910   * Type: <b>token</b><br>
7911   * Path: <b>(ActivityDefinition.useContext.value.ofType(CodeableConcept)) | (ActorDefinition.useContext.value.ofType(CodeableConcept)) | (CapabilityStatement.useContext.value.ofType(CodeableConcept)) | (ChargeItemDefinition.useContext.value.ofType(CodeableConcept)) | (Citation.useContext.value.ofType(CodeableConcept)) | (CodeSystem.useContext.value.ofType(CodeableConcept)) | (CompartmentDefinition.useContext.value.ofType(CodeableConcept)) | (ConceptMap.useContext.value.ofType(CodeableConcept)) | (ConditionDefinition.useContext.value.ofType(CodeableConcept)) | (EventDefinition.useContext.value.ofType(CodeableConcept)) | (Evidence.useContext.value.ofType(CodeableConcept)) | (EvidenceReport.useContext.value.ofType(CodeableConcept)) | (EvidenceVariable.useContext.value.ofType(CodeableConcept)) | (ExampleScenario.useContext.value.ofType(CodeableConcept)) | (GraphDefinition.useContext.value.ofType(CodeableConcept)) | (ImplementationGuide.useContext.value.ofType(CodeableConcept)) | (Library.useContext.value.ofType(CodeableConcept)) | (Measure.useContext.value.ofType(CodeableConcept)) | (MessageDefinition.useContext.value.ofType(CodeableConcept)) | (NamingSystem.useContext.value.ofType(CodeableConcept)) | (OperationDefinition.useContext.value.ofType(CodeableConcept)) | (PlanDefinition.useContext.value.ofType(CodeableConcept)) | (Questionnaire.useContext.value.ofType(CodeableConcept)) | (Requirements.useContext.value.ofType(CodeableConcept)) | (SearchParameter.useContext.value.ofType(CodeableConcept)) | (StructureDefinition.useContext.value.ofType(CodeableConcept)) | (StructureMap.useContext.value.ofType(CodeableConcept)) | (TerminologyCapabilities.useContext.value.ofType(CodeableConcept)) | (TestScript.useContext.value.ofType(CodeableConcept)) | (ValueSet.useContext.value.ofType(CodeableConcept))</b><br>
7912   * </p>
7913   */
7914  @SearchParamDefinition(name="context", path="(ActivityDefinition.useContext.value.ofType(CodeableConcept)) | (ActorDefinition.useContext.value.ofType(CodeableConcept)) | (CapabilityStatement.useContext.value.ofType(CodeableConcept)) | (ChargeItemDefinition.useContext.value.ofType(CodeableConcept)) | (Citation.useContext.value.ofType(CodeableConcept)) | (CodeSystem.useContext.value.ofType(CodeableConcept)) | (CompartmentDefinition.useContext.value.ofType(CodeableConcept)) | (ConceptMap.useContext.value.ofType(CodeableConcept)) | (ConditionDefinition.useContext.value.ofType(CodeableConcept)) | (EventDefinition.useContext.value.ofType(CodeableConcept)) | (Evidence.useContext.value.ofType(CodeableConcept)) | (EvidenceReport.useContext.value.ofType(CodeableConcept)) | (EvidenceVariable.useContext.value.ofType(CodeableConcept)) | (ExampleScenario.useContext.value.ofType(CodeableConcept)) | (GraphDefinition.useContext.value.ofType(CodeableConcept)) | (ImplementationGuide.useContext.value.ofType(CodeableConcept)) | (Library.useContext.value.ofType(CodeableConcept)) | (Measure.useContext.value.ofType(CodeableConcept)) | (MessageDefinition.useContext.value.ofType(CodeableConcept)) | (NamingSystem.useContext.value.ofType(CodeableConcept)) | (OperationDefinition.useContext.value.ofType(CodeableConcept)) | (PlanDefinition.useContext.value.ofType(CodeableConcept)) | (Questionnaire.useContext.value.ofType(CodeableConcept)) | (Requirements.useContext.value.ofType(CodeableConcept)) | (SearchParameter.useContext.value.ofType(CodeableConcept)) | (StructureDefinition.useContext.value.ofType(CodeableConcept)) | (StructureMap.useContext.value.ofType(CodeableConcept)) | (TerminologyCapabilities.useContext.value.ofType(CodeableConcept)) | (TestScript.useContext.value.ofType(CodeableConcept)) | (ValueSet.useContext.value.ofType(CodeableConcept))", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): A use context assigned to the activity definition\r\n* [ActorDefinition](actordefinition.html): A use context assigned to the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): A use context assigned to the charge item definition\r\n* [Citation](citation.html): A use context assigned to the citation\r\n* [CodeSystem](codesystem.html): A use context assigned to the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition\r\n* [ConceptMap](conceptmap.html): A use context assigned to the concept map\r\n* [ConditionDefinition](conditiondefinition.html): A use context assigned to the condition definition\r\n* [EventDefinition](eventdefinition.html): A use context assigned to the event definition\r\n* [Evidence](evidence.html): A use context assigned to the evidence\r\n* [EvidenceReport](evidencereport.html): A use context assigned to the evidence report\r\n* [EvidenceVariable](evidencevariable.html): A use context assigned to the evidence variable\r\n* [ExampleScenario](examplescenario.html): A use context assigned to the example scenario\r\n* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition\r\n* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide\r\n* [Library](library.html): A use context assigned to the library\r\n* [Measure](measure.html): A use context assigned to the measure\r\n* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition\r\n* [NamingSystem](namingsystem.html): A use context assigned to the naming system\r\n* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition\r\n* [PlanDefinition](plandefinition.html): A use context assigned to the plan definition\r\n* [Questionnaire](questionnaire.html): A use context assigned to the questionnaire\r\n* [Requirements](requirements.html): A use context assigned to the requirements\r\n* [SearchParameter](searchparameter.html): A use context assigned to the search parameter\r\n* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition\r\n* [StructureMap](structuremap.html): A use context assigned to the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities\r\n* [TestScript](testscript.html): A use context assigned to the test script\r\n* [ValueSet](valueset.html): A use context assigned to the value set\r\n", type="token" )
7915  public static final String SP_CONTEXT = "context";
7916 /**
7917   * <b>Fluent Client</b> search parameter constant for <b>context</b>
7918   * <p>
7919   * Description: <b>Multiple Resources: 
7920
7921* [ActivityDefinition](activitydefinition.html): A use context assigned to the activity definition
7922* [ActorDefinition](actordefinition.html): A use context assigned to the Actor Definition
7923* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
7924* [ChargeItemDefinition](chargeitemdefinition.html): A use context assigned to the charge item definition
7925* [Citation](citation.html): A use context assigned to the citation
7926* [CodeSystem](codesystem.html): A use context assigned to the code system
7927* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
7928* [ConceptMap](conceptmap.html): A use context assigned to the concept map
7929* [ConditionDefinition](conditiondefinition.html): A use context assigned to the condition definition
7930* [EventDefinition](eventdefinition.html): A use context assigned to the event definition
7931* [Evidence](evidence.html): A use context assigned to the evidence
7932* [EvidenceReport](evidencereport.html): A use context assigned to the evidence report
7933* [EvidenceVariable](evidencevariable.html): A use context assigned to the evidence variable
7934* [ExampleScenario](examplescenario.html): A use context assigned to the example scenario
7935* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
7936* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
7937* [Library](library.html): A use context assigned to the library
7938* [Measure](measure.html): A use context assigned to the measure
7939* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
7940* [NamingSystem](namingsystem.html): A use context assigned to the naming system
7941* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
7942* [PlanDefinition](plandefinition.html): A use context assigned to the plan definition
7943* [Questionnaire](questionnaire.html): A use context assigned to the questionnaire
7944* [Requirements](requirements.html): A use context assigned to the requirements
7945* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
7946* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
7947* [StructureMap](structuremap.html): A use context assigned to the structure map
7948* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
7949* [TestScript](testscript.html): A use context assigned to the test script
7950* [ValueSet](valueset.html): A use context assigned to the value set
7951</b><br>
7952   * Type: <b>token</b><br>
7953   * Path: <b>(ActivityDefinition.useContext.value.ofType(CodeableConcept)) | (ActorDefinition.useContext.value.ofType(CodeableConcept)) | (CapabilityStatement.useContext.value.ofType(CodeableConcept)) | (ChargeItemDefinition.useContext.value.ofType(CodeableConcept)) | (Citation.useContext.value.ofType(CodeableConcept)) | (CodeSystem.useContext.value.ofType(CodeableConcept)) | (CompartmentDefinition.useContext.value.ofType(CodeableConcept)) | (ConceptMap.useContext.value.ofType(CodeableConcept)) | (ConditionDefinition.useContext.value.ofType(CodeableConcept)) | (EventDefinition.useContext.value.ofType(CodeableConcept)) | (Evidence.useContext.value.ofType(CodeableConcept)) | (EvidenceReport.useContext.value.ofType(CodeableConcept)) | (EvidenceVariable.useContext.value.ofType(CodeableConcept)) | (ExampleScenario.useContext.value.ofType(CodeableConcept)) | (GraphDefinition.useContext.value.ofType(CodeableConcept)) | (ImplementationGuide.useContext.value.ofType(CodeableConcept)) | (Library.useContext.value.ofType(CodeableConcept)) | (Measure.useContext.value.ofType(CodeableConcept)) | (MessageDefinition.useContext.value.ofType(CodeableConcept)) | (NamingSystem.useContext.value.ofType(CodeableConcept)) | (OperationDefinition.useContext.value.ofType(CodeableConcept)) | (PlanDefinition.useContext.value.ofType(CodeableConcept)) | (Questionnaire.useContext.value.ofType(CodeableConcept)) | (Requirements.useContext.value.ofType(CodeableConcept)) | (SearchParameter.useContext.value.ofType(CodeableConcept)) | (StructureDefinition.useContext.value.ofType(CodeableConcept)) | (StructureMap.useContext.value.ofType(CodeableConcept)) | (TerminologyCapabilities.useContext.value.ofType(CodeableConcept)) | (TestScript.useContext.value.ofType(CodeableConcept)) | (ValueSet.useContext.value.ofType(CodeableConcept))</b><br>
7954   * </p>
7955   */
7956  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
7957
7958 /**
7959   * Search parameter: <b>date</b>
7960   * <p>
7961   * Description: <b>Multiple Resources: 
7962
7963* [ActivityDefinition](activitydefinition.html): The activity definition publication date
7964* [ActorDefinition](actordefinition.html): The Actor Definition publication date
7965* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
7966* [ChargeItemDefinition](chargeitemdefinition.html): The charge item definition publication date
7967* [Citation](citation.html): The citation publication date
7968* [CodeSystem](codesystem.html): The code system publication date
7969* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
7970* [ConceptMap](conceptmap.html): The concept map publication date
7971* [ConditionDefinition](conditiondefinition.html): The condition definition publication date
7972* [EventDefinition](eventdefinition.html): The event definition publication date
7973* [Evidence](evidence.html): The evidence publication date
7974* [EvidenceVariable](evidencevariable.html): The evidence variable publication date
7975* [ExampleScenario](examplescenario.html): The example scenario publication date
7976* [GraphDefinition](graphdefinition.html): The graph definition publication date
7977* [ImplementationGuide](implementationguide.html): The implementation guide publication date
7978* [Library](library.html): The library publication date
7979* [Measure](measure.html): The measure publication date
7980* [MessageDefinition](messagedefinition.html): The message definition publication date
7981* [NamingSystem](namingsystem.html): The naming system publication date
7982* [OperationDefinition](operationdefinition.html): The operation definition publication date
7983* [PlanDefinition](plandefinition.html): The plan definition publication date
7984* [Questionnaire](questionnaire.html): The questionnaire publication date
7985* [Requirements](requirements.html): The requirements publication date
7986* [SearchParameter](searchparameter.html): The search parameter publication date
7987* [StructureDefinition](structuredefinition.html): The structure definition publication date
7988* [StructureMap](structuremap.html): The structure map publication date
7989* [SubscriptionTopic](subscriptiontopic.html): Date status first applied
7990* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
7991* [TestScript](testscript.html): The test script publication date
7992* [ValueSet](valueset.html): The value set publication date
7993</b><br>
7994   * Type: <b>date</b><br>
7995   * Path: <b>ActivityDefinition.date | ActorDefinition.date | CapabilityStatement.date | ChargeItemDefinition.date | Citation.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | ConditionDefinition.date | EventDefinition.date | Evidence.date | EvidenceVariable.date | ExampleScenario.date | GraphDefinition.date | ImplementationGuide.date | Library.date | Measure.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | PlanDefinition.date | Questionnaire.date | Requirements.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | SubscriptionTopic.date | TerminologyCapabilities.date | TestScript.date | ValueSet.date</b><br>
7996   * </p>
7997   */
7998  @SearchParamDefinition(name="date", path="ActivityDefinition.date | ActorDefinition.date | CapabilityStatement.date | ChargeItemDefinition.date | Citation.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | ConditionDefinition.date | EventDefinition.date | Evidence.date | EvidenceVariable.date | ExampleScenario.date | GraphDefinition.date | ImplementationGuide.date | Library.date | Measure.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | PlanDefinition.date | Questionnaire.date | Requirements.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | SubscriptionTopic.date | TerminologyCapabilities.date | TestScript.date | ValueSet.date", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): The activity definition publication date\r\n* [ActorDefinition](actordefinition.html): The Actor Definition publication date\r\n* [CapabilityStatement](capabilitystatement.html): The capability statement publication date\r\n* [ChargeItemDefinition](chargeitemdefinition.html): The charge item definition publication date\r\n* [Citation](citation.html): The citation publication date\r\n* [CodeSystem](codesystem.html): The code system publication date\r\n* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date\r\n* [ConceptMap](conceptmap.html): The concept map publication date\r\n* [ConditionDefinition](conditiondefinition.html): The condition definition publication date\r\n* [EventDefinition](eventdefinition.html): The event definition publication date\r\n* [Evidence](evidence.html): The evidence publication date\r\n* [EvidenceVariable](evidencevariable.html): The evidence variable publication date\r\n* [ExampleScenario](examplescenario.html): The example scenario publication date\r\n* [GraphDefinition](graphdefinition.html): The graph definition publication date\r\n* [ImplementationGuide](implementationguide.html): The implementation guide publication date\r\n* [Library](library.html): The library publication date\r\n* [Measure](measure.html): The measure publication date\r\n* [MessageDefinition](messagedefinition.html): The message definition publication date\r\n* [NamingSystem](namingsystem.html): The naming system publication date\r\n* [OperationDefinition](operationdefinition.html): The operation definition publication date\r\n* [PlanDefinition](plandefinition.html): The plan definition publication date\r\n* [Questionnaire](questionnaire.html): The questionnaire publication date\r\n* [Requirements](requirements.html): The requirements publication date\r\n* [SearchParameter](searchparameter.html): The search parameter publication date\r\n* [StructureDefinition](structuredefinition.html): The structure definition publication date\r\n* [StructureMap](structuremap.html): The structure map publication date\r\n* [SubscriptionTopic](subscriptiontopic.html): Date status first applied\r\n* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date\r\n* [TestScript](testscript.html): The test script publication date\r\n* [ValueSet](valueset.html): The value set publication date\r\n", type="date" )
7999  public static final String SP_DATE = "date";
8000 /**
8001   * <b>Fluent Client</b> search parameter constant for <b>date</b>
8002   * <p>
8003   * Description: <b>Multiple Resources: 
8004
8005* [ActivityDefinition](activitydefinition.html): The activity definition publication date
8006* [ActorDefinition](actordefinition.html): The Actor Definition publication date
8007* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
8008* [ChargeItemDefinition](chargeitemdefinition.html): The charge item definition publication date
8009* [Citation](citation.html): The citation publication date
8010* [CodeSystem](codesystem.html): The code system publication date
8011* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
8012* [ConceptMap](conceptmap.html): The concept map publication date
8013* [ConditionDefinition](conditiondefinition.html): The condition definition publication date
8014* [EventDefinition](eventdefinition.html): The event definition publication date
8015* [Evidence](evidence.html): The evidence publication date
8016* [EvidenceVariable](evidencevariable.html): The evidence variable publication date
8017* [ExampleScenario](examplescenario.html): The example scenario publication date
8018* [GraphDefinition](graphdefinition.html): The graph definition publication date
8019* [ImplementationGuide](implementationguide.html): The implementation guide publication date
8020* [Library](library.html): The library publication date
8021* [Measure](measure.html): The measure publication date
8022* [MessageDefinition](messagedefinition.html): The message definition publication date
8023* [NamingSystem](namingsystem.html): The naming system publication date
8024* [OperationDefinition](operationdefinition.html): The operation definition publication date
8025* [PlanDefinition](plandefinition.html): The plan definition publication date
8026* [Questionnaire](questionnaire.html): The questionnaire publication date
8027* [Requirements](requirements.html): The requirements publication date
8028* [SearchParameter](searchparameter.html): The search parameter publication date
8029* [StructureDefinition](structuredefinition.html): The structure definition publication date
8030* [StructureMap](structuremap.html): The structure map publication date
8031* [SubscriptionTopic](subscriptiontopic.html): Date status first applied
8032* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
8033* [TestScript](testscript.html): The test script publication date
8034* [ValueSet](valueset.html): The value set publication date
8035</b><br>
8036   * Type: <b>date</b><br>
8037   * Path: <b>ActivityDefinition.date | ActorDefinition.date | CapabilityStatement.date | ChargeItemDefinition.date | Citation.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | ConditionDefinition.date | EventDefinition.date | Evidence.date | EvidenceVariable.date | ExampleScenario.date | GraphDefinition.date | ImplementationGuide.date | Library.date | Measure.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | PlanDefinition.date | Questionnaire.date | Requirements.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | SubscriptionTopic.date | TerminologyCapabilities.date | TestScript.date | ValueSet.date</b><br>
8038   * </p>
8039   */
8040  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
8041
8042 /**
8043   * Search parameter: <b>description</b>
8044   * <p>
8045   * Description: <b>Multiple Resources: 
8046
8047* [ActivityDefinition](activitydefinition.html): The description of the activity definition
8048* [ActorDefinition](actordefinition.html): The description of the Actor Definition
8049* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
8050* [ChargeItemDefinition](chargeitemdefinition.html): The description of the charge item definition
8051* [Citation](citation.html): The description of the citation
8052* [CodeSystem](codesystem.html): The description of the code system
8053* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
8054* [ConceptMap](conceptmap.html): The description of the concept map
8055* [ConditionDefinition](conditiondefinition.html): The description of the condition definition
8056* [EventDefinition](eventdefinition.html): The description of the event definition
8057* [Evidence](evidence.html): The description of the evidence
8058* [EvidenceVariable](evidencevariable.html): The description of the evidence variable
8059* [GraphDefinition](graphdefinition.html): The description of the graph definition
8060* [ImplementationGuide](implementationguide.html): The description of the implementation guide
8061* [Library](library.html): The description of the library
8062* [Measure](measure.html): The description of the measure
8063* [MessageDefinition](messagedefinition.html): The description of the message definition
8064* [NamingSystem](namingsystem.html): The description of the naming system
8065* [OperationDefinition](operationdefinition.html): The description of the operation definition
8066* [PlanDefinition](plandefinition.html): The description of the plan definition
8067* [Questionnaire](questionnaire.html): The description of the questionnaire
8068* [Requirements](requirements.html): The description of the requirements
8069* [SearchParameter](searchparameter.html): The description of the search parameter
8070* [StructureDefinition](structuredefinition.html): The description of the structure definition
8071* [StructureMap](structuremap.html): The description of the structure map
8072* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
8073* [TestScript](testscript.html): The description of the test script
8074* [ValueSet](valueset.html): The description of the value set
8075</b><br>
8076   * Type: <b>string</b><br>
8077   * Path: <b>ActivityDefinition.description | ActorDefinition.description | CapabilityStatement.description | ChargeItemDefinition.description | Citation.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | ConditionDefinition.description | EventDefinition.description | Evidence.description | EvidenceVariable.description | GraphDefinition.description | ImplementationGuide.description | Library.description | Measure.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | PlanDefinition.description | Questionnaire.description | Requirements.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | TestScript.description | ValueSet.description</b><br>
8078   * </p>
8079   */
8080  @SearchParamDefinition(name="description", path="ActivityDefinition.description | ActorDefinition.description | CapabilityStatement.description | ChargeItemDefinition.description | Citation.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | ConditionDefinition.description | EventDefinition.description | Evidence.description | EvidenceVariable.description | GraphDefinition.description | ImplementationGuide.description | Library.description | Measure.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | PlanDefinition.description | Questionnaire.description | Requirements.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | TestScript.description | ValueSet.description", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): The description of the activity definition\r\n* [ActorDefinition](actordefinition.html): The description of the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): The description of the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): The description of the charge item definition\r\n* [Citation](citation.html): The description of the citation\r\n* [CodeSystem](codesystem.html): The description of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition\r\n* [ConceptMap](conceptmap.html): The description of the concept map\r\n* [ConditionDefinition](conditiondefinition.html): The description of the condition definition\r\n* [EventDefinition](eventdefinition.html): The description of the event definition\r\n* [Evidence](evidence.html): The description of the evidence\r\n* [EvidenceVariable](evidencevariable.html): The description of the evidence variable\r\n* [GraphDefinition](graphdefinition.html): The description of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The description of the implementation guide\r\n* [Library](library.html): The description of the library\r\n* [Measure](measure.html): The description of the measure\r\n* [MessageDefinition](messagedefinition.html): The description of the message definition\r\n* [NamingSystem](namingsystem.html): The description of the naming system\r\n* [OperationDefinition](operationdefinition.html): The description of the operation definition\r\n* [PlanDefinition](plandefinition.html): The description of the plan definition\r\n* [Questionnaire](questionnaire.html): The description of the questionnaire\r\n* [Requirements](requirements.html): The description of the requirements\r\n* [SearchParameter](searchparameter.html): The description of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The description of the structure definition\r\n* [StructureMap](structuremap.html): The description of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities\r\n* [TestScript](testscript.html): The description of the test script\r\n* [ValueSet](valueset.html): The description of the value set\r\n", type="string" )
8081  public static final String SP_DESCRIPTION = "description";
8082 /**
8083   * <b>Fluent Client</b> search parameter constant for <b>description</b>
8084   * <p>
8085   * Description: <b>Multiple Resources: 
8086
8087* [ActivityDefinition](activitydefinition.html): The description of the activity definition
8088* [ActorDefinition](actordefinition.html): The description of the Actor Definition
8089* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
8090* [ChargeItemDefinition](chargeitemdefinition.html): The description of the charge item definition
8091* [Citation](citation.html): The description of the citation
8092* [CodeSystem](codesystem.html): The description of the code system
8093* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
8094* [ConceptMap](conceptmap.html): The description of the concept map
8095* [ConditionDefinition](conditiondefinition.html): The description of the condition definition
8096* [EventDefinition](eventdefinition.html): The description of the event definition
8097* [Evidence](evidence.html): The description of the evidence
8098* [EvidenceVariable](evidencevariable.html): The description of the evidence variable
8099* [GraphDefinition](graphdefinition.html): The description of the graph definition
8100* [ImplementationGuide](implementationguide.html): The description of the implementation guide
8101* [Library](library.html): The description of the library
8102* [Measure](measure.html): The description of the measure
8103* [MessageDefinition](messagedefinition.html): The description of the message definition
8104* [NamingSystem](namingsystem.html): The description of the naming system
8105* [OperationDefinition](operationdefinition.html): The description of the operation definition
8106* [PlanDefinition](plandefinition.html): The description of the plan definition
8107* [Questionnaire](questionnaire.html): The description of the questionnaire
8108* [Requirements](requirements.html): The description of the requirements
8109* [SearchParameter](searchparameter.html): The description of the search parameter
8110* [StructureDefinition](structuredefinition.html): The description of the structure definition
8111* [StructureMap](structuremap.html): The description of the structure map
8112* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
8113* [TestScript](testscript.html): The description of the test script
8114* [ValueSet](valueset.html): The description of the value set
8115</b><br>
8116   * Type: <b>string</b><br>
8117   * Path: <b>ActivityDefinition.description | ActorDefinition.description | CapabilityStatement.description | ChargeItemDefinition.description | Citation.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | ConditionDefinition.description | EventDefinition.description | Evidence.description | EvidenceVariable.description | GraphDefinition.description | ImplementationGuide.description | Library.description | Measure.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | PlanDefinition.description | Questionnaire.description | Requirements.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | TestScript.description | ValueSet.description</b><br>
8118   * </p>
8119   */
8120  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
8121
8122 /**
8123   * Search parameter: <b>identifier</b>
8124   * <p>
8125   * Description: <b>Multiple Resources: 
8126
8127* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition
8128* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition
8129* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement
8130* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition
8131* [Citation](citation.html): External identifier for the citation
8132* [CodeSystem](codesystem.html): External identifier for the code system
8133* [ConceptMap](conceptmap.html): External identifier for the concept map
8134* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition
8135* [EventDefinition](eventdefinition.html): External identifier for the event definition
8136* [Evidence](evidence.html): External identifier for the evidence
8137* [EvidenceReport](evidencereport.html): External identifier for the evidence report
8138* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable
8139* [ExampleScenario](examplescenario.html): External identifier for the example scenario
8140* [GraphDefinition](graphdefinition.html): External identifier for the graph definition
8141* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide
8142* [Library](library.html): External identifier for the library
8143* [Measure](measure.html): External identifier for the measure
8144* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication
8145* [MessageDefinition](messagedefinition.html): External identifier for the message definition
8146* [NamingSystem](namingsystem.html): External identifier for the naming system
8147* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition
8148* [OperationDefinition](operationdefinition.html): External identifier for the search parameter
8149* [PlanDefinition](plandefinition.html): External identifier for the plan definition
8150* [Questionnaire](questionnaire.html): External identifier for the questionnaire
8151* [Requirements](requirements.html): External identifier for the requirements
8152* [SearchParameter](searchparameter.html): External identifier for the search parameter
8153* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition
8154* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
8155* [StructureMap](structuremap.html): External identifier for the structure map
8156* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic
8157* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
8158* [TestPlan](testplan.html): An identifier for the test plan
8159* [TestScript](testscript.html): External identifier for the test script
8160* [ValueSet](valueset.html): External identifier for the value set
8161</b><br>
8162   * Type: <b>token</b><br>
8163   * Path: <b>ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier</b><br>
8164   * </p>
8165   */
8166  @SearchParamDefinition(name="identifier", path="ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier", description="Multiple Resources: \r\n\r\n* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition\r\n* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition\r\n* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement\r\n* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition\r\n* [Citation](citation.html): External identifier for the citation\r\n* [CodeSystem](codesystem.html): External identifier for the code system\r\n* [ConceptMap](conceptmap.html): External identifier for the concept map\r\n* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition\r\n* [EventDefinition](eventdefinition.html): External identifier for the event definition\r\n* [Evidence](evidence.html): External identifier for the evidence\r\n* [EvidenceReport](evidencereport.html): External identifier for the evidence report\r\n* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable\r\n* [ExampleScenario](examplescenario.html): External identifier for the example scenario\r\n* [GraphDefinition](graphdefinition.html): External identifier for the graph definition\r\n* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide\r\n* [Library](library.html): External identifier for the library\r\n* [Measure](measure.html): External identifier for the measure\r\n* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication\r\n* [MessageDefinition](messagedefinition.html): External identifier for the message definition\r\n* [NamingSystem](namingsystem.html): External identifier for the naming system\r\n* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition\r\n* [OperationDefinition](operationdefinition.html): External identifier for the search parameter\r\n* [PlanDefinition](plandefinition.html): External identifier for the plan definition\r\n* [Questionnaire](questionnaire.html): External identifier for the questionnaire\r\n* [Requirements](requirements.html): External identifier for the requirements\r\n* [SearchParameter](searchparameter.html): External identifier for the search parameter\r\n* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition\r\n* [StructureDefinition](structuredefinition.html): External identifier for the structure definition\r\n* [StructureMap](structuremap.html): External identifier for the structure map\r\n* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic\r\n* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities\r\n* [TestPlan](testplan.html): An identifier for the test plan\r\n* [TestScript](testscript.html): External identifier for the test script\r\n* [ValueSet](valueset.html): External identifier for the value set\r\n", type="token" )
8167  public static final String SP_IDENTIFIER = "identifier";
8168 /**
8169   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
8170   * <p>
8171   * Description: <b>Multiple Resources: 
8172
8173* [ActivityDefinition](activitydefinition.html): External identifier for the activity definition
8174* [ActorDefinition](actordefinition.html): External identifier for the Actor Definition
8175* [CapabilityStatement](capabilitystatement.html): External identifier for the capability statement
8176* [ChargeItemDefinition](chargeitemdefinition.html): External identifier for the charge item definition
8177* [Citation](citation.html): External identifier for the citation
8178* [CodeSystem](codesystem.html): External identifier for the code system
8179* [ConceptMap](conceptmap.html): External identifier for the concept map
8180* [ConditionDefinition](conditiondefinition.html): External identifier for the condition definition
8181* [EventDefinition](eventdefinition.html): External identifier for the event definition
8182* [Evidence](evidence.html): External identifier for the evidence
8183* [EvidenceReport](evidencereport.html): External identifier for the evidence report
8184* [EvidenceVariable](evidencevariable.html): External identifier for the evidence variable
8185* [ExampleScenario](examplescenario.html): External identifier for the example scenario
8186* [GraphDefinition](graphdefinition.html): External identifier for the graph definition
8187* [ImplementationGuide](implementationguide.html): External identifier for the implementation guide
8188* [Library](library.html): External identifier for the library
8189* [Measure](measure.html): External identifier for the measure
8190* [MedicationKnowledge](medicationknowledge.html): Business identifier for this medication
8191* [MessageDefinition](messagedefinition.html): External identifier for the message definition
8192* [NamingSystem](namingsystem.html): External identifier for the naming system
8193* [ObservationDefinition](observationdefinition.html): The unique identifier associated with the specimen definition
8194* [OperationDefinition](operationdefinition.html): External identifier for the search parameter
8195* [PlanDefinition](plandefinition.html): External identifier for the plan definition
8196* [Questionnaire](questionnaire.html): External identifier for the questionnaire
8197* [Requirements](requirements.html): External identifier for the requirements
8198* [SearchParameter](searchparameter.html): External identifier for the search parameter
8199* [SpecimenDefinition](specimendefinition.html): The unique identifier associated with the SpecimenDefinition
8200* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
8201* [StructureMap](structuremap.html): External identifier for the structure map
8202* [SubscriptionTopic](subscriptiontopic.html): Business Identifier for SubscriptionTopic
8203* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
8204* [TestPlan](testplan.html): An identifier for the test plan
8205* [TestScript](testscript.html): External identifier for the test script
8206* [ValueSet](valueset.html): External identifier for the value set
8207</b><br>
8208   * Type: <b>token</b><br>
8209   * Path: <b>ActivityDefinition.identifier | ActorDefinition.identifier | CapabilityStatement.identifier | ChargeItemDefinition.identifier | Citation.identifier | CodeSystem.identifier | ConceptMap.identifier | ConditionDefinition.identifier | EventDefinition.identifier | Evidence.identifier | EvidenceReport.identifier | EvidenceVariable.identifier | ExampleScenario.identifier | GraphDefinition.identifier | ImplementationGuide.identifier | Library.identifier | Measure.identifier | MedicationKnowledge.identifier | MessageDefinition.identifier | NamingSystem.identifier | ObservationDefinition.identifier | OperationDefinition.identifier | PlanDefinition.identifier | Questionnaire.identifier | Requirements.identifier | SearchParameter.identifier | SpecimenDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | SubscriptionTopic.identifier | TerminologyCapabilities.identifier | TestPlan.identifier | TestScript.identifier | ValueSet.identifier</b><br>
8210   * </p>
8211   */
8212  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
8213
8214 /**
8215   * Search parameter: <b>jurisdiction</b>
8216   * <p>
8217   * Description: <b>Multiple Resources: 
8218
8219* [ActivityDefinition](activitydefinition.html): Intended jurisdiction for the activity definition
8220* [ActorDefinition](actordefinition.html): Intended jurisdiction for the Actor Definition
8221* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
8222* [ChargeItemDefinition](chargeitemdefinition.html): Intended jurisdiction for the charge item definition
8223* [Citation](citation.html): Intended jurisdiction for the citation
8224* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
8225* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
8226