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 void removeChild(String name, Base value) throws FHIRException {
448        if (name.equals("lockedDate")) {
449          this.lockedDate = null;
450        } else if (name.equals("inactive")) {
451          this.inactive = null;
452        } else if (name.equals("include")) {
453          this.getInclude().remove((ConceptSetComponent) value);
454        } else if (name.equals("exclude")) {
455          this.getExclude().remove((ConceptSetComponent) value);
456        } else if (name.equals("property")) {
457          this.getProperty().remove(value);
458        } else
459          super.removeChild(name, value);
460        
461      }
462
463      @Override
464      public Base makeProperty(int hash, String name) throws FHIRException {
465        switch (hash) {
466        case 1391591896:  return getLockedDateElement();
467        case 24665195:  return getInactiveElement();
468        case 1942574248:  return addInclude(); 
469        case -1321148966:  return addExclude(); 
470        case -993141291:  return addPropertyElement();
471        default: return super.makeProperty(hash, name);
472        }
473
474      }
475
476      @Override
477      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
478        switch (hash) {
479        case 1391591896: /*lockedDate*/ return new String[] {"date"};
480        case 24665195: /*inactive*/ return new String[] {"boolean"};
481        case 1942574248: /*include*/ return new String[] {};
482        case -1321148966: /*exclude*/ return new String[] {"@ValueSet.compose.include"};
483        case -993141291: /*property*/ return new String[] {"string"};
484        default: return super.getTypesForProperty(hash, name);
485        }
486
487      }
488
489      @Override
490      public Base addChild(String name) throws FHIRException {
491        if (name.equals("lockedDate")) {
492          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.lockedDate");
493        }
494        else if (name.equals("inactive")) {
495          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.inactive");
496        }
497        else if (name.equals("include")) {
498          return addInclude();
499        }
500        else if (name.equals("exclude")) {
501          return addExclude();
502        }
503        else if (name.equals("property")) {
504          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.property");
505        }
506        else
507          return super.addChild(name);
508      }
509
510      public ValueSetComposeComponent copy() {
511        ValueSetComposeComponent dst = new ValueSetComposeComponent();
512        copyValues(dst);
513        return dst;
514      }
515
516      public void copyValues(ValueSetComposeComponent dst) {
517        super.copyValues(dst);
518        dst.lockedDate = lockedDate == null ? null : lockedDate.copy();
519        dst.inactive = inactive == null ? null : inactive.copy();
520        if (include != null) {
521          dst.include = new ArrayList<ConceptSetComponent>();
522          for (ConceptSetComponent i : include)
523            dst.include.add(i.copy());
524        };
525        if (exclude != null) {
526          dst.exclude = new ArrayList<ConceptSetComponent>();
527          for (ConceptSetComponent i : exclude)
528            dst.exclude.add(i.copy());
529        };
530        if (property != null) {
531          dst.property = new ArrayList<StringType>();
532          for (StringType i : property)
533            dst.property.add(i.copy());
534        };
535      }
536
537      @Override
538      public boolean equalsDeep(Base other_) {
539        if (!super.equalsDeep(other_))
540          return false;
541        if (!(other_ instanceof ValueSetComposeComponent))
542          return false;
543        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
544        return compareDeep(lockedDate, o.lockedDate, true) && compareDeep(inactive, o.inactive, true) && compareDeep(include, o.include, true)
545           && compareDeep(exclude, o.exclude, true) && compareDeep(property, o.property, true);
546      }
547
548      @Override
549      public boolean equalsShallow(Base other_) {
550        if (!super.equalsShallow(other_))
551          return false;
552        if (!(other_ instanceof ValueSetComposeComponent))
553          return false;
554        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
555        return compareValues(lockedDate, o.lockedDate, true) && compareValues(inactive, o.inactive, true) && compareValues(property, o.property, true)
556          ;
557      }
558
559      public boolean isEmpty() {
560        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(lockedDate, inactive, include
561          , exclude, property);
562      }
563
564  public String fhirType() {
565    return "ValueSet.compose";
566
567  }
568
569  }
570
571    @Block()
572    public static class ConceptSetComponent extends BackboneElement implements IBaseBackboneElement {
573        /**
574         * An absolute URI which is the code system from which the selected codes come from.
575         */
576        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=true)
577        @Description(shortDefinition="The system the codes come from", formalDefinition="An absolute URI which is the code system from which the selected codes come from." )
578        protected UriType system;
579
580        /**
581         * The version of the code system that the codes are selected from, or the special version '*' for all versions.
582         */
583        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
584        @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." )
585        protected StringType version;
586
587        /**
588         * Specifies a concept to be included or excluded.
589         */
590        @Child(name = "concept", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
591        @Description(shortDefinition="A concept defined in the system", formalDefinition="Specifies a concept to be included or excluded." )
592        protected List<ConceptReferenceComponent> concept;
593
594        /**
595         * 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.
596         */
597        @Child(name = "filter", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
598        @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." )
599        protected List<ConceptSetFilterComponent> filter;
600
601        /**
602         * 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.
603         */
604        @Child(name = "valueSet", type = {CanonicalType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
605        @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." )
606        protected List<CanonicalType> valueSet;
607
608        /**
609         * 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).
610         */
611        @Child(name = "copyright", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
612        @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)." )
613        protected StringType copyright;
614
615        private static final long serialVersionUID = -517139062L;
616
617    /**
618     * Constructor
619     */
620      public ConceptSetComponent() {
621        super();
622      }
623
624        /**
625         * @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
626         */
627        public UriType getSystemElement() { 
628          if (this.system == null)
629            if (Configuration.errorOnAutoCreate())
630              throw new Error("Attempt to auto-create ConceptSetComponent.system");
631            else if (Configuration.doAutoCreate())
632              this.system = new UriType(); // bb
633          return this.system;
634        }
635
636        public boolean hasSystemElement() { 
637          return this.system != null && !this.system.isEmpty();
638        }
639
640        public boolean hasSystem() { 
641          return this.system != null && !this.system.isEmpty();
642        }
643
644        /**
645         * @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
646         */
647        public ConceptSetComponent setSystemElement(UriType value) { 
648          this.system = value;
649          return this;
650        }
651
652        /**
653         * @return An absolute URI which is the code system from which the selected codes come from.
654         */
655        public String getSystem() { 
656          return this.system == null ? null : this.system.getValue();
657        }
658
659        /**
660         * @param value An absolute URI which is the code system from which the selected codes come from.
661         */
662        public ConceptSetComponent setSystem(String value) { 
663          if (Utilities.noString(value))
664            this.system = null;
665          else {
666            if (this.system == null)
667              this.system = new UriType();
668            this.system.setValue(value);
669          }
670          return this;
671        }
672
673        /**
674         * @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
675         */
676        public StringType getVersionElement() { 
677          if (this.version == null)
678            if (Configuration.errorOnAutoCreate())
679              throw new Error("Attempt to auto-create ConceptSetComponent.version");
680            else if (Configuration.doAutoCreate())
681              this.version = new StringType(); // bb
682          return this.version;
683        }
684
685        public boolean hasVersionElement() { 
686          return this.version != null && !this.version.isEmpty();
687        }
688
689        public boolean hasVersion() { 
690          return this.version != null && !this.version.isEmpty();
691        }
692
693        /**
694         * @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
695         */
696        public ConceptSetComponent setVersionElement(StringType value) { 
697          this.version = value;
698          return this;
699        }
700
701        /**
702         * @return The version of the code system that the codes are selected from, or the special version '*' for all versions.
703         */
704        public String getVersion() { 
705          return this.version == null ? null : this.version.getValue();
706        }
707
708        /**
709         * @param value The version of the code system that the codes are selected from, or the special version '*' for all versions.
710         */
711        public ConceptSetComponent setVersion(String value) { 
712          if (Utilities.noString(value))
713            this.version = null;
714          else {
715            if (this.version == null)
716              this.version = new StringType();
717            this.version.setValue(value);
718          }
719          return this;
720        }
721
722        /**
723         * @return {@link #concept} (Specifies a concept to be included or excluded.)
724         */
725        public List<ConceptReferenceComponent> getConcept() { 
726          if (this.concept == null)
727            this.concept = new ArrayList<ConceptReferenceComponent>();
728          return this.concept;
729        }
730
731        /**
732         * @return Returns a reference to <code>this</code> for easy method chaining
733         */
734        public ConceptSetComponent setConcept(List<ConceptReferenceComponent> theConcept) { 
735          this.concept = theConcept;
736          return this;
737        }
738
739        public boolean hasConcept() { 
740          if (this.concept == null)
741            return false;
742          for (ConceptReferenceComponent item : this.concept)
743            if (!item.isEmpty())
744              return true;
745          return false;
746        }
747
748        public ConceptReferenceComponent addConcept() { //3
749          ConceptReferenceComponent t = new ConceptReferenceComponent();
750          if (this.concept == null)
751            this.concept = new ArrayList<ConceptReferenceComponent>();
752          this.concept.add(t);
753          return t;
754        }
755
756        public ConceptSetComponent addConcept(ConceptReferenceComponent t) { //3
757          if (t == null)
758            return this;
759          if (this.concept == null)
760            this.concept = new ArrayList<ConceptReferenceComponent>();
761          this.concept.add(t);
762          return this;
763        }
764
765        /**
766         * @return The first repetition of repeating field {@link #concept}, creating it if it does not already exist {3}
767         */
768        public ConceptReferenceComponent getConceptFirstRep() { 
769          if (getConcept().isEmpty()) {
770            addConcept();
771          }
772          return getConcept().get(0);
773        }
774
775        /**
776         * @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.)
777         */
778        public List<ConceptSetFilterComponent> getFilter() { 
779          if (this.filter == null)
780            this.filter = new ArrayList<ConceptSetFilterComponent>();
781          return this.filter;
782        }
783
784        /**
785         * @return Returns a reference to <code>this</code> for easy method chaining
786         */
787        public ConceptSetComponent setFilter(List<ConceptSetFilterComponent> theFilter) { 
788          this.filter = theFilter;
789          return this;
790        }
791
792        public boolean hasFilter() { 
793          if (this.filter == null)
794            return false;
795          for (ConceptSetFilterComponent item : this.filter)
796            if (!item.isEmpty())
797              return true;
798          return false;
799        }
800
801        public ConceptSetFilterComponent addFilter() { //3
802          ConceptSetFilterComponent t = new ConceptSetFilterComponent();
803          if (this.filter == null)
804            this.filter = new ArrayList<ConceptSetFilterComponent>();
805          this.filter.add(t);
806          return t;
807        }
808
809        public ConceptSetComponent addFilter(ConceptSetFilterComponent t) { //3
810          if (t == null)
811            return this;
812          if (this.filter == null)
813            this.filter = new ArrayList<ConceptSetFilterComponent>();
814          this.filter.add(t);
815          return this;
816        }
817
818        /**
819         * @return The first repetition of repeating field {@link #filter}, creating it if it does not already exist {3}
820         */
821        public ConceptSetFilterComponent getFilterFirstRep() { 
822          if (getFilter().isEmpty()) {
823            addFilter();
824          }
825          return getFilter().get(0);
826        }
827
828        /**
829         * @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.)
830         */
831        public List<CanonicalType> getValueSet() { 
832          if (this.valueSet == null)
833            this.valueSet = new ArrayList<CanonicalType>();
834          return this.valueSet;
835        }
836
837        /**
838         * @return Returns a reference to <code>this</code> for easy method chaining
839         */
840        public ConceptSetComponent setValueSet(List<CanonicalType> theValueSet) { 
841          this.valueSet = theValueSet;
842          return this;
843        }
844
845        public boolean hasValueSet() { 
846          if (this.valueSet == null)
847            return false;
848          for (CanonicalType item : this.valueSet)
849            if (!item.isEmpty())
850              return true;
851          return false;
852        }
853
854        /**
855         * @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.)
856         */
857        public CanonicalType addValueSetElement() {//2 
858          CanonicalType t = new CanonicalType();
859          if (this.valueSet == null)
860            this.valueSet = new ArrayList<CanonicalType>();
861          this.valueSet.add(t);
862          return t;
863        }
864
865        /**
866         * @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.)
867         */
868        public ConceptSetComponent addValueSet(String value) { //1
869          CanonicalType t = new CanonicalType();
870          t.setValue(value);
871          if (this.valueSet == null)
872            this.valueSet = new ArrayList<CanonicalType>();
873          this.valueSet.add(t);
874          return this;
875        }
876
877        /**
878         * @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.)
879         */
880        public boolean hasValueSet(String value) { 
881          if (this.valueSet == null)
882            return false;
883          for (CanonicalType v : this.valueSet)
884            if (v.getValue().equals(value)) // canonical
885              return true;
886          return false;
887        }
888
889        /**
890         * @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
891         */
892        public StringType getCopyrightElement() { 
893          if (this.copyright == null)
894            if (Configuration.errorOnAutoCreate())
895              throw new Error("Attempt to auto-create ConceptSetComponent.copyright");
896            else if (Configuration.doAutoCreate())
897              this.copyright = new StringType(); // bb
898          return this.copyright;
899        }
900
901        public boolean hasCopyrightElement() { 
902          return this.copyright != null && !this.copyright.isEmpty();
903        }
904
905        public boolean hasCopyright() { 
906          return this.copyright != null && !this.copyright.isEmpty();
907        }
908
909        /**
910         * @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
911         */
912        public ConceptSetComponent setCopyrightElement(StringType value) { 
913          this.copyright = value;
914          return this;
915        }
916
917        /**
918         * @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).
919         */
920        public String getCopyright() { 
921          return this.copyright == null ? null : this.copyright.getValue();
922        }
923
924        /**
925         * @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).
926         */
927        public ConceptSetComponent setCopyright(String value) { 
928          if (Utilities.noString(value))
929            this.copyright = null;
930          else {
931            if (this.copyright == null)
932              this.copyright = new StringType();
933            this.copyright.setValue(value);
934          }
935          return this;
936        }
937
938        protected void listChildren(List<Property> children) {
939          super.listChildren(children);
940          children.add(new Property("system", "uri", "An absolute URI which is the code system from which the selected codes come from.", 0, 1, system));
941          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));
942          children.add(new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept));
943          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));
944          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));
945          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));
946        }
947
948        @Override
949        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
950          switch (_hash) {
951          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);
952          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);
953          case 951024232: /*concept*/  return new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept);
954          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);
955          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);
956          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);
957          default: return super.getNamedProperty(_hash, _name, _checkValid);
958          }
959
960        }
961
962      @Override
963      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
964        switch (hash) {
965        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
966        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
967        case 951024232: /*concept*/ return this.concept == null ? new Base[0] : this.concept.toArray(new Base[this.concept.size()]); // ConceptReferenceComponent
968        case -1274492040: /*filter*/ return this.filter == null ? new Base[0] : this.filter.toArray(new Base[this.filter.size()]); // ConceptSetFilterComponent
969        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : this.valueSet.toArray(new Base[this.valueSet.size()]); // CanonicalType
970        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // StringType
971        default: return super.getProperty(hash, name, checkValid);
972        }
973
974      }
975
976      @Override
977      public Base setProperty(int hash, String name, Base value) throws FHIRException {
978        switch (hash) {
979        case -887328209: // system
980          this.system = TypeConvertor.castToUri(value); // UriType
981          return value;
982        case 351608024: // version
983          this.version = TypeConvertor.castToString(value); // StringType
984          return value;
985        case 951024232: // concept
986          this.getConcept().add((ConceptReferenceComponent) value); // ConceptReferenceComponent
987          return value;
988        case -1274492040: // filter
989          this.getFilter().add((ConceptSetFilterComponent) value); // ConceptSetFilterComponent
990          return value;
991        case -1410174671: // valueSet
992          this.getValueSet().add(TypeConvertor.castToCanonical(value)); // CanonicalType
993          return value;
994        case 1522889671: // copyright
995          this.copyright = TypeConvertor.castToString(value); // StringType
996          return value;
997        default: return super.setProperty(hash, name, value);
998        }
999
1000      }
1001
1002      @Override
1003      public Base setProperty(String name, Base value) throws FHIRException {
1004        if (name.equals("system")) {
1005          this.system = TypeConvertor.castToUri(value); // UriType
1006        } else if (name.equals("version")) {
1007          this.version = TypeConvertor.castToString(value); // StringType
1008        } else if (name.equals("concept")) {
1009          this.getConcept().add((ConceptReferenceComponent) value);
1010        } else if (name.equals("filter")) {
1011          this.getFilter().add((ConceptSetFilterComponent) value);
1012        } else if (name.equals("valueSet")) {
1013          this.getValueSet().add(TypeConvertor.castToCanonical(value));
1014        } else if (name.equals("copyright")) {
1015          this.copyright = TypeConvertor.castToString(value); // StringType
1016        } else
1017          return super.setProperty(name, value);
1018        return value;
1019      }
1020
1021  @Override
1022  public void removeChild(String name, Base value) throws FHIRException {
1023        if (name.equals("system")) {
1024          this.system = null;
1025        } else if (name.equals("version")) {
1026          this.version = null;
1027        } else if (name.equals("concept")) {
1028          this.getConcept().remove((ConceptReferenceComponent) value);
1029        } else if (name.equals("filter")) {
1030          this.getFilter().remove((ConceptSetFilterComponent) value);
1031        } else if (name.equals("valueSet")) {
1032          this.getValueSet().remove(value);
1033        } else if (name.equals("copyright")) {
1034          this.copyright = null;
1035        } else
1036          super.removeChild(name, value);
1037        
1038      }
1039
1040      @Override
1041      public Base makeProperty(int hash, String name) throws FHIRException {
1042        switch (hash) {
1043        case -887328209:  return getSystemElement();
1044        case 351608024:  return getVersionElement();
1045        case 951024232:  return addConcept(); 
1046        case -1274492040:  return addFilter(); 
1047        case -1410174671:  return addValueSetElement();
1048        case 1522889671:  return getCopyrightElement();
1049        default: return super.makeProperty(hash, name);
1050        }
1051
1052      }
1053
1054      @Override
1055      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1056        switch (hash) {
1057        case -887328209: /*system*/ return new String[] {"uri"};
1058        case 351608024: /*version*/ return new String[] {"string"};
1059        case 951024232: /*concept*/ return new String[] {};
1060        case -1274492040: /*filter*/ return new String[] {};
1061        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
1062        case 1522889671: /*copyright*/ return new String[] {"string"};
1063        default: return super.getTypesForProperty(hash, name);
1064        }
1065
1066      }
1067
1068      @Override
1069      public Base addChild(String name) throws FHIRException {
1070        if (name.equals("system")) {
1071          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.system");
1072        }
1073        else if (name.equals("version")) {
1074          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.version");
1075        }
1076        else if (name.equals("concept")) {
1077          return addConcept();
1078        }
1079        else if (name.equals("filter")) {
1080          return addFilter();
1081        }
1082        else if (name.equals("valueSet")) {
1083          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.valueSet");
1084        }
1085        else if (name.equals("copyright")) {
1086          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.copyright");
1087        }
1088        else
1089          return super.addChild(name);
1090      }
1091
1092      public ConceptSetComponent copy() {
1093        ConceptSetComponent dst = new ConceptSetComponent();
1094        copyValues(dst);
1095        return dst;
1096      }
1097
1098      public void copyValues(ConceptSetComponent dst) {
1099        super.copyValues(dst);
1100        dst.system = system == null ? null : system.copy();
1101        dst.version = version == null ? null : version.copy();
1102        if (concept != null) {
1103          dst.concept = new ArrayList<ConceptReferenceComponent>();
1104          for (ConceptReferenceComponent i : concept)
1105            dst.concept.add(i.copy());
1106        };
1107        if (filter != null) {
1108          dst.filter = new ArrayList<ConceptSetFilterComponent>();
1109          for (ConceptSetFilterComponent i : filter)
1110            dst.filter.add(i.copy());
1111        };
1112        if (valueSet != null) {
1113          dst.valueSet = new ArrayList<CanonicalType>();
1114          for (CanonicalType i : valueSet)
1115            dst.valueSet.add(i.copy());
1116        };
1117        dst.copyright = copyright == null ? null : copyright.copy();
1118      }
1119
1120      @Override
1121      public boolean equalsDeep(Base other_) {
1122        if (!super.equalsDeep(other_))
1123          return false;
1124        if (!(other_ instanceof ConceptSetComponent))
1125          return false;
1126        ConceptSetComponent o = (ConceptSetComponent) other_;
1127        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(concept, o.concept, true)
1128           && compareDeep(filter, o.filter, true) && compareDeep(valueSet, o.valueSet, true) && compareDeep(copyright, o.copyright, true)
1129          ;
1130      }
1131
1132      @Override
1133      public boolean equalsShallow(Base other_) {
1134        if (!super.equalsShallow(other_))
1135          return false;
1136        if (!(other_ instanceof ConceptSetComponent))
1137          return false;
1138        ConceptSetComponent o = (ConceptSetComponent) other_;
1139        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(valueSet, o.valueSet, true)
1140           && compareValues(copyright, o.copyright, true);
1141      }
1142
1143      public boolean isEmpty() {
1144        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version, concept
1145          , filter, valueSet, copyright);
1146      }
1147
1148  public String fhirType() {
1149    return "ValueSet.compose.include";
1150
1151  }
1152
1153  public boolean hasConcept(String code) {
1154    for (ConceptReferenceComponent c : getConcept()) {
1155      if (code.equals(c.getCode())) {
1156        return true;
1157      }
1158    }
1159    return false;
1160  }
1161
1162  }
1163
1164    @Block()
1165    public static class ConceptReferenceComponent extends BackboneElement implements IBaseBackboneElement {
1166        /**
1167         * Specifies a code for the concept to be included or excluded.
1168         */
1169        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1170        @Description(shortDefinition="Code or expression from system", formalDefinition="Specifies a code for the concept to be included or excluded." )
1171        protected CodeType code;
1172
1173        /**
1174         * 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.
1175         */
1176        @Child(name = "display", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1177        @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." )
1178        protected StringType display;
1179
1180        /**
1181         * Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
1182         */
1183        @Child(name = "designation", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1184        @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." )
1185        protected List<ConceptReferenceDesignationComponent> designation;
1186
1187        private static final long serialVersionUID = 260579971L;
1188
1189    /**
1190     * Constructor
1191     */
1192      public ConceptReferenceComponent() {
1193        super();
1194      }
1195
1196    /**
1197     * Constructor
1198     */
1199      public ConceptReferenceComponent(String code) {
1200        super();
1201        this.setCode(code);
1202      }
1203
1204        /**
1205         * @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
1206         */
1207        public CodeType getCodeElement() { 
1208          if (this.code == null)
1209            if (Configuration.errorOnAutoCreate())
1210              throw new Error("Attempt to auto-create ConceptReferenceComponent.code");
1211            else if (Configuration.doAutoCreate())
1212              this.code = new CodeType(); // bb
1213          return this.code;
1214        }
1215
1216        public boolean hasCodeElement() { 
1217          return this.code != null && !this.code.isEmpty();
1218        }
1219
1220        public boolean hasCode() { 
1221          return this.code != null && !this.code.isEmpty();
1222        }
1223
1224        /**
1225         * @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
1226         */
1227        public ConceptReferenceComponent setCodeElement(CodeType value) { 
1228          this.code = value;
1229          return this;
1230        }
1231
1232        /**
1233         * @return Specifies a code for the concept to be included or excluded.
1234         */
1235        public String getCode() { 
1236          return this.code == null ? null : this.code.getValue();
1237        }
1238
1239        /**
1240         * @param value Specifies a code for the concept to be included or excluded.
1241         */
1242        public ConceptReferenceComponent setCode(String value) { 
1243            if (this.code == null)
1244              this.code = new CodeType();
1245            this.code.setValue(value);
1246          return this;
1247        }
1248
1249        /**
1250         * @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
1251         */
1252        public StringType getDisplayElement() { 
1253          if (this.display == null)
1254            if (Configuration.errorOnAutoCreate())
1255              throw new Error("Attempt to auto-create ConceptReferenceComponent.display");
1256            else if (Configuration.doAutoCreate())
1257              this.display = new StringType(); // bb
1258          return this.display;
1259        }
1260
1261        public boolean hasDisplayElement() { 
1262          return this.display != null && !this.display.isEmpty();
1263        }
1264
1265        public boolean hasDisplay() { 
1266          return this.display != null && !this.display.isEmpty();
1267        }
1268
1269        /**
1270         * @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
1271         */
1272        public ConceptReferenceComponent setDisplayElement(StringType value) { 
1273          this.display = value;
1274          return this;
1275        }
1276
1277        /**
1278         * @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.
1279         */
1280        public String getDisplay() { 
1281          return this.display == null ? null : this.display.getValue();
1282        }
1283
1284        /**
1285         * @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.
1286         */
1287        public ConceptReferenceComponent setDisplay(String value) { 
1288          if (Utilities.noString(value))
1289            this.display = null;
1290          else {
1291            if (this.display == null)
1292              this.display = new StringType();
1293            this.display.setValue(value);
1294          }
1295          return this;
1296        }
1297
1298        /**
1299         * @return {@link #designation} (Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.)
1300         */
1301        public List<ConceptReferenceDesignationComponent> getDesignation() { 
1302          if (this.designation == null)
1303            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1304          return this.designation;
1305        }
1306
1307        /**
1308         * @return Returns a reference to <code>this</code> for easy method chaining
1309         */
1310        public ConceptReferenceComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
1311          this.designation = theDesignation;
1312          return this;
1313        }
1314
1315        public boolean hasDesignation() { 
1316          if (this.designation == null)
1317            return false;
1318          for (ConceptReferenceDesignationComponent item : this.designation)
1319            if (!item.isEmpty())
1320              return true;
1321          return false;
1322        }
1323
1324        public ConceptReferenceDesignationComponent addDesignation() { //3
1325          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
1326          if (this.designation == null)
1327            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1328          this.designation.add(t);
1329          return t;
1330        }
1331
1332        public ConceptReferenceComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
1333          if (t == null)
1334            return this;
1335          if (this.designation == null)
1336            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1337          this.designation.add(t);
1338          return this;
1339        }
1340
1341        /**
1342         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
1343         */
1344        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
1345          if (getDesignation().isEmpty()) {
1346            addDesignation();
1347          }
1348          return getDesignation().get(0);
1349        }
1350
1351        protected void listChildren(List<Property> children) {
1352          super.listChildren(children);
1353          children.add(new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code));
1354          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));
1355          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));
1356        }
1357
1358        @Override
1359        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1360          switch (_hash) {
1361          case 3059181: /*code*/  return new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code);
1362          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);
1363          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);
1364          default: return super.getNamedProperty(_hash, _name, _checkValid);
1365          }
1366
1367        }
1368
1369      @Override
1370      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1371        switch (hash) {
1372        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1373        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
1374        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
1375        default: return super.getProperty(hash, name, checkValid);
1376        }
1377
1378      }
1379
1380      @Override
1381      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1382        switch (hash) {
1383        case 3059181: // code
1384          this.code = TypeConvertor.castToCode(value); // CodeType
1385          return value;
1386        case 1671764162: // display
1387          this.display = TypeConvertor.castToString(value); // StringType
1388          return value;
1389        case -900931593: // designation
1390          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
1391          return value;
1392        default: return super.setProperty(hash, name, value);
1393        }
1394
1395      }
1396
1397      @Override
1398      public Base setProperty(String name, Base value) throws FHIRException {
1399        if (name.equals("code")) {
1400          this.code = TypeConvertor.castToCode(value); // CodeType
1401        } else if (name.equals("display")) {
1402          this.display = TypeConvertor.castToString(value); // StringType
1403        } else if (name.equals("designation")) {
1404          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
1405        } else
1406          return super.setProperty(name, value);
1407        return value;
1408      }
1409
1410  @Override
1411  public void removeChild(String name, Base value) throws FHIRException {
1412        if (name.equals("code")) {
1413          this.code = null;
1414        } else if (name.equals("display")) {
1415          this.display = null;
1416        } else if (name.equals("designation")) {
1417          this.getDesignation().remove((ConceptReferenceDesignationComponent) value);
1418        } else
1419          super.removeChild(name, value);
1420        
1421      }
1422
1423      @Override
1424      public Base makeProperty(int hash, String name) throws FHIRException {
1425        switch (hash) {
1426        case 3059181:  return getCodeElement();
1427        case 1671764162:  return getDisplayElement();
1428        case -900931593:  return addDesignation(); 
1429        default: return super.makeProperty(hash, name);
1430        }
1431
1432      }
1433
1434      @Override
1435      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1436        switch (hash) {
1437        case 3059181: /*code*/ return new String[] {"code"};
1438        case 1671764162: /*display*/ return new String[] {"string"};
1439        case -900931593: /*designation*/ return new String[] {};
1440        default: return super.getTypesForProperty(hash, name);
1441        }
1442
1443      }
1444
1445      @Override
1446      public Base addChild(String name) throws FHIRException {
1447        if (name.equals("code")) {
1448          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.code");
1449        }
1450        else if (name.equals("display")) {
1451          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.display");
1452        }
1453        else if (name.equals("designation")) {
1454          return addDesignation();
1455        }
1456        else
1457          return super.addChild(name);
1458      }
1459
1460      public ConceptReferenceComponent copy() {
1461        ConceptReferenceComponent dst = new ConceptReferenceComponent();
1462        copyValues(dst);
1463        return dst;
1464      }
1465
1466      public void copyValues(ConceptReferenceComponent dst) {
1467        super.copyValues(dst);
1468        dst.code = code == null ? null : code.copy();
1469        dst.display = display == null ? null : display.copy();
1470        if (designation != null) {
1471          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1472          for (ConceptReferenceDesignationComponent i : designation)
1473            dst.designation.add(i.copy());
1474        };
1475      }
1476
1477      @Override
1478      public boolean equalsDeep(Base other_) {
1479        if (!super.equalsDeep(other_))
1480          return false;
1481        if (!(other_ instanceof ConceptReferenceComponent))
1482          return false;
1483        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1484        return compareDeep(code, o.code, true) && compareDeep(display, o.display, true) && compareDeep(designation, o.designation, true)
1485          ;
1486      }
1487
1488      @Override
1489      public boolean equalsShallow(Base other_) {
1490        if (!super.equalsShallow(other_))
1491          return false;
1492        if (!(other_ instanceof ConceptReferenceComponent))
1493          return false;
1494        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1495        return compareValues(code, o.code, true) && compareValues(display, o.display, true);
1496      }
1497
1498      public boolean isEmpty() {
1499        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, display, designation
1500          );
1501      }
1502
1503  public String fhirType() {
1504    return "ValueSet.compose.include.concept";
1505
1506  }
1507
1508  }
1509
1510    @Block()
1511    public static class ConceptReferenceDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1512        /**
1513         * The language this designation is defined for.
1514         */
1515        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1516        @Description(shortDefinition="Human language of the designation", formalDefinition="The language this designation is defined for." )
1517        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-languages")
1518        protected CodeType language;
1519
1520        /**
1521         * A code that represents types of uses of designations.
1522         */
1523        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=false)
1524        @Description(shortDefinition="Types of uses of designations", formalDefinition="A code that represents types of uses of designations." )
1525        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1526        protected Coding use;
1527
1528        /**
1529         * Additional codes that detail how this designation would be used, if there is more than one use.
1530         */
1531        @Child(name = "additionalUse", type = {Coding.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1532        @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." )
1533        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1534        protected List<Coding> additionalUse;
1535
1536        /**
1537         * The text value for this designation.
1538         */
1539        @Child(name = "value", type = {StringType.class}, order=4, min=1, max=1, modifier=false, summary=false)
1540        @Description(shortDefinition="The text value for this designation", formalDefinition="The text value for this designation." )
1541        protected StringType value;
1542
1543        private static final long serialVersionUID = -141147882L;
1544
1545    /**
1546     * Constructor
1547     */
1548      public ConceptReferenceDesignationComponent() {
1549        super();
1550      }
1551
1552    /**
1553     * Constructor
1554     */
1555      public ConceptReferenceDesignationComponent(String value) {
1556        super();
1557        this.setValue(value);
1558      }
1559
1560        /**
1561         * @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
1562         */
1563        public CodeType getLanguageElement() { 
1564          if (this.language == null)
1565            if (Configuration.errorOnAutoCreate())
1566              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.language");
1567            else if (Configuration.doAutoCreate())
1568              this.language = new CodeType(); // bb
1569          return this.language;
1570        }
1571
1572        public boolean hasLanguageElement() { 
1573          return this.language != null && !this.language.isEmpty();
1574        }
1575
1576        public boolean hasLanguage() { 
1577          return this.language != null && !this.language.isEmpty();
1578        }
1579
1580        /**
1581         * @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
1582         */
1583        public ConceptReferenceDesignationComponent setLanguageElement(CodeType value) { 
1584          this.language = value;
1585          return this;
1586        }
1587
1588        /**
1589         * @return The language this designation is defined for.
1590         */
1591        public String getLanguage() { 
1592          return this.language == null ? null : this.language.getValue();
1593        }
1594
1595        /**
1596         * @param value The language this designation is defined for.
1597         */
1598        public ConceptReferenceDesignationComponent setLanguage(String value) { 
1599          if (Utilities.noString(value))
1600            this.language = null;
1601          else {
1602            if (this.language == null)
1603              this.language = new CodeType();
1604            this.language.setValue(value);
1605          }
1606          return this;
1607        }
1608
1609        /**
1610         * @return {@link #use} (A code that represents types of uses of designations.)
1611         */
1612        public Coding getUse() { 
1613          if (this.use == null)
1614            if (Configuration.errorOnAutoCreate())
1615              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.use");
1616            else if (Configuration.doAutoCreate())
1617              this.use = new Coding(); // cc
1618          return this.use;
1619        }
1620
1621        public boolean hasUse() { 
1622          return this.use != null && !this.use.isEmpty();
1623        }
1624
1625        /**
1626         * @param value {@link #use} (A code that represents types of uses of designations.)
1627         */
1628        public ConceptReferenceDesignationComponent setUse(Coding value) { 
1629          this.use = value;
1630          return this;
1631        }
1632
1633        /**
1634         * @return {@link #additionalUse} (Additional codes that detail how this designation would be used, if there is more than one use.)
1635         */
1636        public List<Coding> getAdditionalUse() { 
1637          if (this.additionalUse == null)
1638            this.additionalUse = new ArrayList<Coding>();
1639          return this.additionalUse;
1640        }
1641
1642        /**
1643         * @return Returns a reference to <code>this</code> for easy method chaining
1644         */
1645        public ConceptReferenceDesignationComponent setAdditionalUse(List<Coding> theAdditionalUse) { 
1646          this.additionalUse = theAdditionalUse;
1647          return this;
1648        }
1649
1650        public boolean hasAdditionalUse() { 
1651          if (this.additionalUse == null)
1652            return false;
1653          for (Coding item : this.additionalUse)
1654            if (!item.isEmpty())
1655              return true;
1656          return false;
1657        }
1658
1659        public Coding addAdditionalUse() { //3
1660          Coding t = new Coding();
1661          if (this.additionalUse == null)
1662            this.additionalUse = new ArrayList<Coding>();
1663          this.additionalUse.add(t);
1664          return t;
1665        }
1666
1667        public ConceptReferenceDesignationComponent addAdditionalUse(Coding t) { //3
1668          if (t == null)
1669            return this;
1670          if (this.additionalUse == null)
1671            this.additionalUse = new ArrayList<Coding>();
1672          this.additionalUse.add(t);
1673          return this;
1674        }
1675
1676        /**
1677         * @return The first repetition of repeating field {@link #additionalUse}, creating it if it does not already exist {3}
1678         */
1679        public Coding getAdditionalUseFirstRep() { 
1680          if (getAdditionalUse().isEmpty()) {
1681            addAdditionalUse();
1682          }
1683          return getAdditionalUse().get(0);
1684        }
1685
1686        /**
1687         * @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
1688         */
1689        public StringType getValueElement() { 
1690          if (this.value == null)
1691            if (Configuration.errorOnAutoCreate())
1692              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.value");
1693            else if (Configuration.doAutoCreate())
1694              this.value = new StringType(); // bb
1695          return this.value;
1696        }
1697
1698        public boolean hasValueElement() { 
1699          return this.value != null && !this.value.isEmpty();
1700        }
1701
1702        public boolean hasValue() { 
1703          return this.value != null && !this.value.isEmpty();
1704        }
1705
1706        /**
1707         * @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
1708         */
1709        public ConceptReferenceDesignationComponent setValueElement(StringType value) { 
1710          this.value = value;
1711          return this;
1712        }
1713
1714        /**
1715         * @return The text value for this designation.
1716         */
1717        public String getValue() { 
1718          return this.value == null ? null : this.value.getValue();
1719        }
1720
1721        /**
1722         * @param value The text value for this designation.
1723         */
1724        public ConceptReferenceDesignationComponent setValue(String value) { 
1725            if (this.value == null)
1726              this.value = new StringType();
1727            this.value.setValue(value);
1728          return this;
1729        }
1730
1731        protected void listChildren(List<Property> children) {
1732          super.listChildren(children);
1733          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1734          children.add(new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use));
1735          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));
1736          children.add(new Property("value", "string", "The text value for this designation.", 0, 1, value));
1737        }
1738
1739        @Override
1740        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1741          switch (_hash) {
1742          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1743          case 116103: /*use*/  return new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use);
1744          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);
1745          case 111972721: /*value*/  return new Property("value", "string", "The text value for this designation.", 0, 1, value);
1746          default: return super.getNamedProperty(_hash, _name, _checkValid);
1747          }
1748
1749        }
1750
1751      @Override
1752      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1753        switch (hash) {
1754        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1755        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1756        case 938414048: /*additionalUse*/ return this.additionalUse == null ? new Base[0] : this.additionalUse.toArray(new Base[this.additionalUse.size()]); // Coding
1757        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
1758        default: return super.getProperty(hash, name, checkValid);
1759        }
1760
1761      }
1762
1763      @Override
1764      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1765        switch (hash) {
1766        case -1613589672: // language
1767          this.language = TypeConvertor.castToCode(value); // CodeType
1768          return value;
1769        case 116103: // use
1770          this.use = TypeConvertor.castToCoding(value); // Coding
1771          return value;
1772        case 938414048: // additionalUse
1773          this.getAdditionalUse().add(TypeConvertor.castToCoding(value)); // Coding
1774          return value;
1775        case 111972721: // value
1776          this.value = TypeConvertor.castToString(value); // StringType
1777          return value;
1778        default: return super.setProperty(hash, name, value);
1779        }
1780
1781      }
1782
1783      @Override
1784      public Base setProperty(String name, Base value) throws FHIRException {
1785        if (name.equals("language")) {
1786          this.language = TypeConvertor.castToCode(value); // CodeType
1787        } else if (name.equals("use")) {
1788          this.use = TypeConvertor.castToCoding(value); // Coding
1789        } else if (name.equals("additionalUse")) {
1790          this.getAdditionalUse().add(TypeConvertor.castToCoding(value));
1791        } else if (name.equals("value")) {
1792          this.value = TypeConvertor.castToString(value); // StringType
1793        } else
1794          return super.setProperty(name, value);
1795        return value;
1796      }
1797
1798  @Override
1799  public void removeChild(String name, Base value) throws FHIRException {
1800        if (name.equals("language")) {
1801          this.language = null;
1802        } else if (name.equals("use")) {
1803          this.use = null;
1804        } else if (name.equals("additionalUse")) {
1805          this.getAdditionalUse().remove(value);
1806        } else if (name.equals("value")) {
1807          this.value = null;
1808        } else
1809          super.removeChild(name, value);
1810        
1811      }
1812
1813      @Override
1814      public Base makeProperty(int hash, String name) throws FHIRException {
1815        switch (hash) {
1816        case -1613589672:  return getLanguageElement();
1817        case 116103:  return getUse();
1818        case 938414048:  return addAdditionalUse(); 
1819        case 111972721:  return getValueElement();
1820        default: return super.makeProperty(hash, name);
1821        }
1822
1823      }
1824
1825      @Override
1826      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1827        switch (hash) {
1828        case -1613589672: /*language*/ return new String[] {"code"};
1829        case 116103: /*use*/ return new String[] {"Coding"};
1830        case 938414048: /*additionalUse*/ return new String[] {"Coding"};
1831        case 111972721: /*value*/ return new String[] {"string"};
1832        default: return super.getTypesForProperty(hash, name);
1833        }
1834
1835      }
1836
1837      @Override
1838      public Base addChild(String name) throws FHIRException {
1839        if (name.equals("language")) {
1840          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.designation.language");
1841        }
1842        else if (name.equals("use")) {
1843          this.use = new Coding();
1844          return this.use;
1845        }
1846        else if (name.equals("additionalUse")) {
1847          return addAdditionalUse();
1848        }
1849        else if (name.equals("value")) {
1850          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.concept.designation.value");
1851        }
1852        else
1853          return super.addChild(name);
1854      }
1855
1856      public ConceptReferenceDesignationComponent copy() {
1857        ConceptReferenceDesignationComponent dst = new ConceptReferenceDesignationComponent();
1858        copyValues(dst);
1859        return dst;
1860      }
1861
1862      public void copyValues(ConceptReferenceDesignationComponent dst) {
1863        super.copyValues(dst);
1864        dst.language = language == null ? null : language.copy();
1865        dst.use = use == null ? null : use.copy();
1866        if (additionalUse != null) {
1867          dst.additionalUse = new ArrayList<Coding>();
1868          for (Coding i : additionalUse)
1869            dst.additionalUse.add(i.copy());
1870        };
1871        dst.value = value == null ? null : value.copy();
1872      }
1873
1874      @Override
1875      public boolean equalsDeep(Base other_) {
1876        if (!super.equalsDeep(other_))
1877          return false;
1878        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1879          return false;
1880        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1881        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true) && compareDeep(additionalUse, o.additionalUse, true)
1882           && compareDeep(value, o.value, true);
1883      }
1884
1885      @Override
1886      public boolean equalsShallow(Base other_) {
1887        if (!super.equalsShallow(other_))
1888          return false;
1889        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1890          return false;
1891        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1892        return compareValues(language, o.language, true) && compareValues(value, o.value, true);
1893      }
1894
1895      public boolean isEmpty() {
1896        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use, additionalUse
1897          , value);
1898      }
1899
1900  public String fhirType() {
1901    return "ValueSet.compose.include.concept.designation";
1902
1903  }
1904
1905  }
1906
1907    @Block()
1908    public static class ConceptSetFilterComponent extends BackboneElement implements IBaseBackboneElement {
1909        /**
1910         * A code that identifies a property or a filter defined in the code system.
1911         */
1912        @Child(name = "property", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1913        @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." )
1914        protected CodeType property;
1915
1916        /**
1917         * The kind of operation to perform as a part of the filter criteria.
1918         */
1919        @Child(name = "op", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1920        @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." )
1921        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/filter-operator")
1922        protected Enumeration<FilterOperator> op;
1923
1924        /**
1925         * 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'.
1926         */
1927        @Child(name = "value", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1928        @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'." )
1929        protected StringType value;
1930
1931        private static final long serialVersionUID = 1259153492L;
1932
1933    /**
1934     * Constructor
1935     */
1936      public ConceptSetFilterComponent() {
1937        super();
1938      }
1939
1940    /**
1941     * Constructor
1942     */
1943      public ConceptSetFilterComponent(String property, FilterOperator op, String value) {
1944        super();
1945        this.setProperty(property);
1946        this.setOp(op);
1947        this.setValue(value);
1948      }
1949
1950        /**
1951         * @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
1952         */
1953        public CodeType getPropertyElement() { 
1954          if (this.property == null)
1955            if (Configuration.errorOnAutoCreate())
1956              throw new Error("Attempt to auto-create ConceptSetFilterComponent.property");
1957            else if (Configuration.doAutoCreate())
1958              this.property = new CodeType(); // bb
1959          return this.property;
1960        }
1961
1962        public boolean hasPropertyElement() { 
1963          return this.property != null && !this.property.isEmpty();
1964        }
1965
1966        public boolean hasProperty() { 
1967          return this.property != null && !this.property.isEmpty();
1968        }
1969
1970        /**
1971         * @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
1972         */
1973        public ConceptSetFilterComponent setPropertyElement(CodeType value) { 
1974          this.property = value;
1975          return this;
1976        }
1977
1978        /**
1979         * @return A code that identifies a property or a filter defined in the code system.
1980         */
1981        public String getProperty() { 
1982          return this.property == null ? null : this.property.getValue();
1983        }
1984
1985        /**
1986         * @param value A code that identifies a property or a filter defined in the code system.
1987         */
1988        public ConceptSetFilterComponent setProperty(String value) { 
1989            if (this.property == null)
1990              this.property = new CodeType();
1991            this.property.setValue(value);
1992          return this;
1993        }
1994
1995        /**
1996         * @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
1997         */
1998        public Enumeration<FilterOperator> getOpElement() { 
1999          if (this.op == null)
2000            if (Configuration.errorOnAutoCreate())
2001              throw new Error("Attempt to auto-create ConceptSetFilterComponent.op");
2002            else if (Configuration.doAutoCreate())
2003              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory()); // bb
2004          return this.op;
2005        }
2006
2007        public boolean hasOpElement() { 
2008          return this.op != null && !this.op.isEmpty();
2009        }
2010
2011        public boolean hasOp() { 
2012          return this.op != null && !this.op.isEmpty();
2013        }
2014
2015        /**
2016         * @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
2017         */
2018        public ConceptSetFilterComponent setOpElement(Enumeration<FilterOperator> value) { 
2019          this.op = value;
2020          return this;
2021        }
2022
2023        /**
2024         * @return The kind of operation to perform as a part of the filter criteria.
2025         */
2026        public FilterOperator getOp() { 
2027          return this.op == null ? null : this.op.getValue();
2028        }
2029
2030        /**
2031         * @param value The kind of operation to perform as a part of the filter criteria.
2032         */
2033        public ConceptSetFilterComponent setOp(FilterOperator value) { 
2034            if (this.op == null)
2035              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory());
2036            this.op.setValue(value);
2037          return this;
2038        }
2039
2040        /**
2041         * @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
2042         */
2043        public StringType getValueElement() { 
2044          if (this.value == null)
2045            if (Configuration.errorOnAutoCreate())
2046              throw new Error("Attempt to auto-create ConceptSetFilterComponent.value");
2047            else if (Configuration.doAutoCreate())
2048              this.value = new StringType(); // bb
2049          return this.value;
2050        }
2051
2052        public boolean hasValueElement() { 
2053          return this.value != null && !this.value.isEmpty();
2054        }
2055
2056        public boolean hasValue() { 
2057          return this.value != null && !this.value.isEmpty();
2058        }
2059
2060        /**
2061         * @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
2062         */
2063        public ConceptSetFilterComponent setValueElement(StringType value) { 
2064          this.value = value;
2065          return this;
2066        }
2067
2068        /**
2069         * @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'.
2070         */
2071        public String getValue() { 
2072          return this.value == null ? null : this.value.getValue();
2073        }
2074
2075        /**
2076         * @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'.
2077         */
2078        public ConceptSetFilterComponent setValue(String value) { 
2079            if (this.value == null)
2080              this.value = new StringType();
2081            this.value.setValue(value);
2082          return this;
2083        }
2084
2085        protected void listChildren(List<Property> children) {
2086          super.listChildren(children);
2087          children.add(new Property("property", "code", "A code that identifies a property or a filter defined in the code system.", 0, 1, property));
2088          children.add(new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op));
2089          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));
2090        }
2091
2092        @Override
2093        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2094          switch (_hash) {
2095          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);
2096          case 3553: /*op*/  return new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op);
2097          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);
2098          default: return super.getNamedProperty(_hash, _name, _checkValid);
2099          }
2100
2101        }
2102
2103      @Override
2104      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2105        switch (hash) {
2106        case -993141291: /*property*/ return this.property == null ? new Base[0] : new Base[] {this.property}; // CodeType
2107        case 3553: /*op*/ return this.op == null ? new Base[0] : new Base[] {this.op}; // Enumeration<FilterOperator>
2108        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
2109        default: return super.getProperty(hash, name, checkValid);
2110        }
2111
2112      }
2113
2114      @Override
2115      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2116        switch (hash) {
2117        case -993141291: // property
2118          this.property = TypeConvertor.castToCode(value); // CodeType
2119          return value;
2120        case 3553: // op
2121          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
2122          this.op = (Enumeration) value; // Enumeration<FilterOperator>
2123          return value;
2124        case 111972721: // value
2125          this.value = TypeConvertor.castToString(value); // StringType
2126          return value;
2127        default: return super.setProperty(hash, name, value);
2128        }
2129
2130      }
2131
2132      @Override
2133      public Base setProperty(String name, Base value) throws FHIRException {
2134        if (name.equals("property")) {
2135          this.property = TypeConvertor.castToCode(value); // CodeType
2136        } else if (name.equals("op")) {
2137          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
2138          this.op = (Enumeration) value; // Enumeration<FilterOperator>
2139        } else if (name.equals("value")) {
2140          this.value = TypeConvertor.castToString(value); // StringType
2141        } else
2142          return super.setProperty(name, value);
2143        return value;
2144      }
2145
2146  @Override
2147  public void removeChild(String name, Base value) throws FHIRException {
2148        if (name.equals("property")) {
2149          this.property = null;
2150        } else if (name.equals("op")) {
2151          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
2152          this.op = (Enumeration) value; // Enumeration<FilterOperator>
2153        } else if (name.equals("value")) {
2154          this.value = null;
2155        } else
2156          super.removeChild(name, value);
2157        
2158      }
2159
2160      @Override
2161      public Base makeProperty(int hash, String name) throws FHIRException {
2162        switch (hash) {
2163        case -993141291:  return getPropertyElement();
2164        case 3553:  return getOpElement();
2165        case 111972721:  return getValueElement();
2166        default: return super.makeProperty(hash, name);
2167        }
2168
2169      }
2170
2171      @Override
2172      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2173        switch (hash) {
2174        case -993141291: /*property*/ return new String[] {"code"};
2175        case 3553: /*op*/ return new String[] {"code"};
2176        case 111972721: /*value*/ return new String[] {"string"};
2177        default: return super.getTypesForProperty(hash, name);
2178        }
2179
2180      }
2181
2182      @Override
2183      public Base addChild(String name) throws FHIRException {
2184        if (name.equals("property")) {
2185          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.property");
2186        }
2187        else if (name.equals("op")) {
2188          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.op");
2189        }
2190        else if (name.equals("value")) {
2191          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.compose.include.filter.value");
2192        }
2193        else
2194          return super.addChild(name);
2195      }
2196
2197      public ConceptSetFilterComponent copy() {
2198        ConceptSetFilterComponent dst = new ConceptSetFilterComponent();
2199        copyValues(dst);
2200        return dst;
2201      }
2202
2203      public void copyValues(ConceptSetFilterComponent dst) {
2204        super.copyValues(dst);
2205        dst.property = property == null ? null : property.copy();
2206        dst.op = op == null ? null : op.copy();
2207        dst.value = value == null ? null : value.copy();
2208      }
2209
2210      @Override
2211      public boolean equalsDeep(Base other_) {
2212        if (!super.equalsDeep(other_))
2213          return false;
2214        if (!(other_ instanceof ConceptSetFilterComponent))
2215          return false;
2216        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2217        return compareDeep(property, o.property, true) && compareDeep(op, o.op, true) && compareDeep(value, o.value, true)
2218          ;
2219      }
2220
2221      @Override
2222      public boolean equalsShallow(Base other_) {
2223        if (!super.equalsShallow(other_))
2224          return false;
2225        if (!(other_ instanceof ConceptSetFilterComponent))
2226          return false;
2227        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2228        return compareValues(property, o.property, true) && compareValues(op, o.op, true) && compareValues(value, o.value, true)
2229          ;
2230      }
2231
2232      public boolean isEmpty() {
2233        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(property, op, value);
2234      }
2235
2236  public String fhirType() {
2237    return "ValueSet.compose.include.filter";
2238
2239  }
2240
2241  }
2242
2243    @Block()
2244    public static class ValueSetExpansionComponent extends BackboneElement implements IBaseBackboneElement {
2245        /**
2246         * 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.
2247         */
2248        @Child(name = "identifier", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2249        @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." )
2250        protected UriType identifier;
2251
2252        /**
2253         * As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.
2254         */
2255        @Child(name = "next", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2256        @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." )
2257        protected UriType next;
2258
2259        /**
2260         * The time at which the expansion was produced by the expanding system.
2261         */
2262        @Child(name = "timestamp", type = {DateTimeType.class}, order=3, min=1, max=1, modifier=false, summary=false)
2263        @Description(shortDefinition="Time ValueSet expansion happened", formalDefinition="The time at which the expansion was produced by the expanding system." )
2264        protected DateTimeType timestamp;
2265
2266        /**
2267         * 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.
2268         */
2269        @Child(name = "total", type = {IntegerType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2270        @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." )
2271        protected IntegerType total;
2272
2273        /**
2274         * 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.
2275         */
2276        @Child(name = "offset", type = {IntegerType.class}, order=5, min=0, max=1, modifier=false, summary=false)
2277        @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." )
2278        protected IntegerType offset;
2279
2280        /**
2281         * 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.
2282         */
2283        @Child(name = "parameter", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2284        @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." )
2285        protected List<ValueSetExpansionParameterComponent> parameter;
2286
2287        /**
2288         * A property defines an additional slot through which additional information can be provided about a concept.
2289         */
2290        @Child(name = "property", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2291        @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." )
2292        protected List<ValueSetExpansionPropertyComponent> property;
2293
2294        /**
2295         * The codes that are contained in the value set expansion.
2296         */
2297        @Child(name = "contains", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2298        @Description(shortDefinition="Codes in the value set", formalDefinition="The codes that are contained in the value set expansion." )
2299        protected List<ValueSetExpansionContainsComponent> contains;
2300
2301        private static final long serialVersionUID = 1141573269L;
2302
2303    /**
2304     * Constructor
2305     */
2306      public ValueSetExpansionComponent() {
2307        super();
2308      }
2309
2310    /**
2311     * Constructor
2312     */
2313      public ValueSetExpansionComponent(Date timestamp) {
2314        super();
2315        this.setTimestamp(timestamp);
2316      }
2317
2318        /**
2319         * @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
2320         */
2321        public UriType getIdentifierElement() { 
2322          if (this.identifier == null)
2323            if (Configuration.errorOnAutoCreate())
2324              throw new Error("Attempt to auto-create ValueSetExpansionComponent.identifier");
2325            else if (Configuration.doAutoCreate())
2326              this.identifier = new UriType(); // bb
2327          return this.identifier;
2328        }
2329
2330        public boolean hasIdentifierElement() { 
2331          return this.identifier != null && !this.identifier.isEmpty();
2332        }
2333
2334        public boolean hasIdentifier() { 
2335          return this.identifier != null && !this.identifier.isEmpty();
2336        }
2337
2338        /**
2339         * @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
2340         */
2341        public ValueSetExpansionComponent setIdentifierElement(UriType value) { 
2342          this.identifier = value;
2343          return this;
2344        }
2345
2346        /**
2347         * @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.
2348         */
2349        public String getIdentifier() { 
2350          return this.identifier == null ? null : this.identifier.getValue();
2351        }
2352
2353        /**
2354         * @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.
2355         */
2356        public ValueSetExpansionComponent setIdentifier(String value) { 
2357          if (Utilities.noString(value))
2358            this.identifier = null;
2359          else {
2360            if (this.identifier == null)
2361              this.identifier = new UriType();
2362            this.identifier.setValue(value);
2363          }
2364          return this;
2365        }
2366
2367        /**
2368         * @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
2369         */
2370        public UriType getNextElement() { 
2371          if (this.next == null)
2372            if (Configuration.errorOnAutoCreate())
2373              throw new Error("Attempt to auto-create ValueSetExpansionComponent.next");
2374            else if (Configuration.doAutoCreate())
2375              this.next = new UriType(); // bb
2376          return this.next;
2377        }
2378
2379        public boolean hasNextElement() { 
2380          return this.next != null && !this.next.isEmpty();
2381        }
2382
2383        public boolean hasNext() { 
2384          return this.next != null && !this.next.isEmpty();
2385        }
2386
2387        /**
2388         * @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
2389         */
2390        public ValueSetExpansionComponent setNextElement(UriType value) { 
2391          this.next = value;
2392          return this;
2393        }
2394
2395        /**
2396         * @return As per paging Search results, the next URLs are opaque to the client, have no dictated structure, and only the server understands them.
2397         */
2398        public String getNext() { 
2399          return this.next == null ? null : this.next.getValue();
2400        }
2401
2402        /**
2403         * @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.
2404         */
2405        public ValueSetExpansionComponent setNext(String value) { 
2406          if (Utilities.noString(value))
2407            this.next = null;
2408          else {
2409            if (this.next == null)
2410              this.next = new UriType();
2411            this.next.setValue(value);
2412          }
2413          return this;
2414        }
2415
2416        /**
2417         * @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
2418         */
2419        public DateTimeType getTimestampElement() { 
2420          if (this.timestamp == null)
2421            if (Configuration.errorOnAutoCreate())
2422              throw new Error("Attempt to auto-create ValueSetExpansionComponent.timestamp");
2423            else if (Configuration.doAutoCreate())
2424              this.timestamp = new DateTimeType(); // bb
2425          return this.timestamp;
2426        }
2427
2428        public boolean hasTimestampElement() { 
2429          return this.timestamp != null && !this.timestamp.isEmpty();
2430        }
2431
2432        public boolean hasTimestamp() { 
2433          return this.timestamp != null && !this.timestamp.isEmpty();
2434        }
2435
2436        /**
2437         * @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
2438         */
2439        public ValueSetExpansionComponent setTimestampElement(DateTimeType value) { 
2440          this.timestamp = value;
2441          return this;
2442        }
2443
2444        /**
2445         * @return The time at which the expansion was produced by the expanding system.
2446         */
2447        public Date getTimestamp() { 
2448          return this.timestamp == null ? null : this.timestamp.getValue();
2449        }
2450
2451        /**
2452         * @param value The time at which the expansion was produced by the expanding system.
2453         */
2454        public ValueSetExpansionComponent setTimestamp(Date value) { 
2455            if (this.timestamp == null)
2456              this.timestamp = new DateTimeType();
2457            this.timestamp.setValue(value);
2458          return this;
2459        }
2460
2461        /**
2462         * @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
2463         */
2464        public IntegerType getTotalElement() { 
2465          if (this.total == null)
2466            if (Configuration.errorOnAutoCreate())
2467              throw new Error("Attempt to auto-create ValueSetExpansionComponent.total");
2468            else if (Configuration.doAutoCreate())
2469              this.total = new IntegerType(); // bb
2470          return this.total;
2471        }
2472
2473        public boolean hasTotalElement() { 
2474          return this.total != null && !this.total.isEmpty();
2475        }
2476
2477        public boolean hasTotal() { 
2478          return this.total != null && !this.total.isEmpty();
2479        }
2480
2481        /**
2482         * @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
2483         */
2484        public ValueSetExpansionComponent setTotalElement(IntegerType value) { 
2485          this.total = value;
2486          return this;
2487        }
2488
2489        /**
2490         * @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.
2491         */
2492        public int getTotal() { 
2493          return this.total == null || this.total.isEmpty() ? 0 : this.total.getValue();
2494        }
2495
2496        /**
2497         * @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.
2498         */
2499        public ValueSetExpansionComponent setTotal(int value) { 
2500            if (this.total == null)
2501              this.total = new IntegerType();
2502            this.total.setValue(value);
2503          return this;
2504        }
2505
2506        /**
2507         * @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
2508         */
2509        public IntegerType getOffsetElement() { 
2510          if (this.offset == null)
2511            if (Configuration.errorOnAutoCreate())
2512              throw new Error("Attempt to auto-create ValueSetExpansionComponent.offset");
2513            else if (Configuration.doAutoCreate())
2514              this.offset = new IntegerType(); // bb
2515          return this.offset;
2516        }
2517
2518        public boolean hasOffsetElement() { 
2519          return this.offset != null && !this.offset.isEmpty();
2520        }
2521
2522        public boolean hasOffset() { 
2523          return this.offset != null && !this.offset.isEmpty();
2524        }
2525
2526        /**
2527         * @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
2528         */
2529        public ValueSetExpansionComponent setOffsetElement(IntegerType value) { 
2530          this.offset = value;
2531          return this;
2532        }
2533
2534        /**
2535         * @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.
2536         */
2537        public int getOffset() { 
2538          return this.offset == null || this.offset.isEmpty() ? 0 : this.offset.getValue();
2539        }
2540
2541        /**
2542         * @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.
2543         */
2544        public ValueSetExpansionComponent setOffset(int value) { 
2545            if (this.offset == null)
2546              this.offset = new IntegerType();
2547            this.offset.setValue(value);
2548          return this;
2549        }
2550
2551        /**
2552         * @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.)
2553         */
2554        public List<ValueSetExpansionParameterComponent> getParameter() { 
2555          if (this.parameter == null)
2556            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2557          return this.parameter;
2558        }
2559
2560        /**
2561         * @return Returns a reference to <code>this</code> for easy method chaining
2562         */
2563        public ValueSetExpansionComponent setParameter(List<ValueSetExpansionParameterComponent> theParameter) { 
2564          this.parameter = theParameter;
2565          return this;
2566        }
2567
2568        public boolean hasParameter() { 
2569          if (this.parameter == null)
2570            return false;
2571          for (ValueSetExpansionParameterComponent item : this.parameter)
2572            if (!item.isEmpty())
2573              return true;
2574          return false;
2575        }
2576
2577        public ValueSetExpansionParameterComponent addParameter() { //3
2578          ValueSetExpansionParameterComponent t = new ValueSetExpansionParameterComponent();
2579          if (this.parameter == null)
2580            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2581          this.parameter.add(t);
2582          return t;
2583        }
2584
2585        public ValueSetExpansionComponent addParameter(ValueSetExpansionParameterComponent t) { //3
2586          if (t == null)
2587            return this;
2588          if (this.parameter == null)
2589            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2590          this.parameter.add(t);
2591          return this;
2592        }
2593
2594        /**
2595         * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist {3}
2596         */
2597        public ValueSetExpansionParameterComponent getParameterFirstRep() { 
2598          if (getParameter().isEmpty()) {
2599            addParameter();
2600          }
2601          return getParameter().get(0);
2602        }
2603
2604        /**
2605         * @return {@link #property} (A property defines an additional slot through which additional information can be provided about a concept.)
2606         */
2607        public List<ValueSetExpansionPropertyComponent> getProperty() { 
2608          if (this.property == null)
2609            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2610          return this.property;
2611        }
2612
2613        /**
2614         * @return Returns a reference to <code>this</code> for easy method chaining
2615         */
2616        public ValueSetExpansionComponent setProperty(List<ValueSetExpansionPropertyComponent> theProperty) { 
2617          this.property = theProperty;
2618          return this;
2619        }
2620
2621        public boolean hasProperty() { 
2622          if (this.property == null)
2623            return false;
2624          for (ValueSetExpansionPropertyComponent item : this.property)
2625            if (!item.isEmpty())
2626              return true;
2627          return false;
2628        }
2629
2630        public ValueSetExpansionPropertyComponent addProperty() { //3
2631          ValueSetExpansionPropertyComponent t = new ValueSetExpansionPropertyComponent();
2632          if (this.property == null)
2633            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2634          this.property.add(t);
2635          return t;
2636        }
2637
2638        public ValueSetExpansionComponent addProperty(ValueSetExpansionPropertyComponent t) { //3
2639          if (t == null)
2640            return this;
2641          if (this.property == null)
2642            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2643          this.property.add(t);
2644          return this;
2645        }
2646
2647        /**
2648         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
2649         */
2650        public ValueSetExpansionPropertyComponent getPropertyFirstRep() { 
2651          if (getProperty().isEmpty()) {
2652            addProperty();
2653          }
2654          return getProperty().get(0);
2655        }
2656
2657        /**
2658         * @return {@link #contains} (The codes that are contained in the value set expansion.)
2659         */
2660        public List<ValueSetExpansionContainsComponent> getContains() { 
2661          if (this.contains == null)
2662            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2663          return this.contains;
2664        }
2665
2666        /**
2667         * @return Returns a reference to <code>this</code> for easy method chaining
2668         */
2669        public ValueSetExpansionComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
2670          this.contains = theContains;
2671          return this;
2672        }
2673
2674        public boolean hasContains() { 
2675          if (this.contains == null)
2676            return false;
2677          for (ValueSetExpansionContainsComponent item : this.contains)
2678            if (!item.isEmpty())
2679              return true;
2680          return false;
2681        }
2682
2683        public ValueSetExpansionContainsComponent addContains() { //3
2684          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
2685          if (this.contains == null)
2686            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2687          this.contains.add(t);
2688          return t;
2689        }
2690
2691        public ValueSetExpansionComponent addContains(ValueSetExpansionContainsComponent t) { //3
2692          if (t == null)
2693            return this;
2694          if (this.contains == null)
2695            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2696          this.contains.add(t);
2697          return this;
2698        }
2699
2700        /**
2701         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
2702         */
2703        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
2704          if (getContains().isEmpty()) {
2705            addContains();
2706          }
2707          return getContains().get(0);
2708        }
2709
2710        protected void listChildren(List<Property> children) {
2711          super.listChildren(children);
2712          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));
2713          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));
2714          children.add(new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp));
2715          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));
2716          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));
2717          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));
2718          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));
2719          children.add(new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains));
2720        }
2721
2722        @Override
2723        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2724          switch (_hash) {
2725          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);
2726          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);
2727          case 55126294: /*timestamp*/  return new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp);
2728          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);
2729          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);
2730          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);
2731          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);
2732          case -567445985: /*contains*/  return new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains);
2733          default: return super.getNamedProperty(_hash, _name, _checkValid);
2734          }
2735
2736        }
2737
2738      @Override
2739      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2740        switch (hash) {
2741        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // UriType
2742        case 3377907: /*next*/ return this.next == null ? new Base[0] : new Base[] {this.next}; // UriType
2743        case 55126294: /*timestamp*/ return this.timestamp == null ? new Base[0] : new Base[] {this.timestamp}; // DateTimeType
2744        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // IntegerType
2745        case -1019779949: /*offset*/ return this.offset == null ? new Base[0] : new Base[] {this.offset}; // IntegerType
2746        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // ValueSetExpansionParameterComponent
2747        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ValueSetExpansionPropertyComponent
2748        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
2749        default: return super.getProperty(hash, name, checkValid);
2750        }
2751
2752      }
2753
2754      @Override
2755      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2756        switch (hash) {
2757        case -1618432855: // identifier
2758          this.identifier = TypeConvertor.castToUri(value); // UriType
2759          return value;
2760        case 3377907: // next
2761          this.next = TypeConvertor.castToUri(value); // UriType
2762          return value;
2763        case 55126294: // timestamp
2764          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2765          return value;
2766        case 110549828: // total
2767          this.total = TypeConvertor.castToInteger(value); // IntegerType
2768          return value;
2769        case -1019779949: // offset
2770          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2771          return value;
2772        case 1954460585: // parameter
2773          this.getParameter().add((ValueSetExpansionParameterComponent) value); // ValueSetExpansionParameterComponent
2774          return value;
2775        case -993141291: // property
2776          this.getProperty().add((ValueSetExpansionPropertyComponent) value); // ValueSetExpansionPropertyComponent
2777          return value;
2778        case -567445985: // contains
2779          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
2780          return value;
2781        default: return super.setProperty(hash, name, value);
2782        }
2783
2784      }
2785
2786      @Override
2787      public Base setProperty(String name, Base value) throws FHIRException {
2788        if (name.equals("identifier")) {
2789          this.identifier = TypeConvertor.castToUri(value); // UriType
2790        } else if (name.equals("next")) {
2791          this.next = TypeConvertor.castToUri(value); // UriType
2792        } else if (name.equals("timestamp")) {
2793          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2794        } else if (name.equals("total")) {
2795          this.total = TypeConvertor.castToInteger(value); // IntegerType
2796        } else if (name.equals("offset")) {
2797          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2798        } else if (name.equals("parameter")) {
2799          this.getParameter().add((ValueSetExpansionParameterComponent) value);
2800        } else if (name.equals("property")) {
2801          this.getProperty().add((ValueSetExpansionPropertyComponent) value);
2802        } else if (name.equals("contains")) {
2803          this.getContains().add((ValueSetExpansionContainsComponent) value);
2804        } else
2805          return super.setProperty(name, value);
2806        return value;
2807      }
2808
2809  @Override
2810  public void removeChild(String name, Base value) throws FHIRException {
2811        if (name.equals("identifier")) {
2812          this.identifier = null;
2813        } else if (name.equals("next")) {
2814          this.next = null;
2815        } else if (name.equals("timestamp")) {
2816          this.timestamp = null;
2817        } else if (name.equals("total")) {
2818          this.total = null;
2819        } else if (name.equals("offset")) {
2820          this.offset = null;
2821        } else if (name.equals("parameter")) {
2822          this.getParameter().remove((ValueSetExpansionParameterComponent) value);
2823        } else if (name.equals("property")) {
2824          this.getProperty().remove((ValueSetExpansionPropertyComponent) value);
2825        } else if (name.equals("contains")) {
2826          this.getContains().remove((ValueSetExpansionContainsComponent) value);
2827        } else
2828          super.removeChild(name, value);
2829        
2830      }
2831
2832      @Override
2833      public Base makeProperty(int hash, String name) throws FHIRException {
2834        switch (hash) {
2835        case -1618432855:  return getIdentifierElement();
2836        case 3377907:  return getNextElement();
2837        case 55126294:  return getTimestampElement();
2838        case 110549828:  return getTotalElement();
2839        case -1019779949:  return getOffsetElement();
2840        case 1954460585:  return addParameter(); 
2841        case -993141291:  return addProperty(); 
2842        case -567445985:  return addContains(); 
2843        default: return super.makeProperty(hash, name);
2844        }
2845
2846      }
2847
2848      @Override
2849      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2850        switch (hash) {
2851        case -1618432855: /*identifier*/ return new String[] {"uri"};
2852        case 3377907: /*next*/ return new String[] {"uri"};
2853        case 55126294: /*timestamp*/ return new String[] {"dateTime"};
2854        case 110549828: /*total*/ return new String[] {"integer"};
2855        case -1019779949: /*offset*/ return new String[] {"integer"};
2856        case 1954460585: /*parameter*/ return new String[] {};
2857        case -993141291: /*property*/ return new String[] {};
2858        case -567445985: /*contains*/ return new String[] {};
2859        default: return super.getTypesForProperty(hash, name);
2860        }
2861
2862      }
2863
2864      @Override
2865      public Base addChild(String name) throws FHIRException {
2866        if (name.equals("identifier")) {
2867          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.identifier");
2868        }
2869        else if (name.equals("next")) {
2870          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.next");
2871        }
2872        else if (name.equals("timestamp")) {
2873          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.timestamp");
2874        }
2875        else if (name.equals("total")) {
2876          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.total");
2877        }
2878        else if (name.equals("offset")) {
2879          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.offset");
2880        }
2881        else if (name.equals("parameter")) {
2882          return addParameter();
2883        }
2884        else if (name.equals("property")) {
2885          return addProperty();
2886        }
2887        else if (name.equals("contains")) {
2888          return addContains();
2889        }
2890        else
2891          return super.addChild(name);
2892      }
2893
2894      public ValueSetExpansionComponent copy() {
2895        ValueSetExpansionComponent dst = new ValueSetExpansionComponent();
2896        copyValues(dst);
2897        return dst;
2898      }
2899
2900      public void copyValues(ValueSetExpansionComponent dst) {
2901        super.copyValues(dst);
2902        dst.identifier = identifier == null ? null : identifier.copy();
2903        dst.next = next == null ? null : next.copy();
2904        dst.timestamp = timestamp == null ? null : timestamp.copy();
2905        dst.total = total == null ? null : total.copy();
2906        dst.offset = offset == null ? null : offset.copy();
2907        if (parameter != null) {
2908          dst.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2909          for (ValueSetExpansionParameterComponent i : parameter)
2910            dst.parameter.add(i.copy());
2911        };
2912        if (property != null) {
2913          dst.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2914          for (ValueSetExpansionPropertyComponent i : property)
2915            dst.property.add(i.copy());
2916        };
2917        if (contains != null) {
2918          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2919          for (ValueSetExpansionContainsComponent i : contains)
2920            dst.contains.add(i.copy());
2921        };
2922      }
2923
2924      @Override
2925      public boolean equalsDeep(Base other_) {
2926        if (!super.equalsDeep(other_))
2927          return false;
2928        if (!(other_ instanceof ValueSetExpansionComponent))
2929          return false;
2930        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2931        return compareDeep(identifier, o.identifier, true) && compareDeep(next, o.next, true) && compareDeep(timestamp, o.timestamp, true)
2932           && compareDeep(total, o.total, true) && compareDeep(offset, o.offset, true) && compareDeep(parameter, o.parameter, true)
2933           && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true);
2934      }
2935
2936      @Override
2937      public boolean equalsShallow(Base other_) {
2938        if (!super.equalsShallow(other_))
2939          return false;
2940        if (!(other_ instanceof ValueSetExpansionComponent))
2941          return false;
2942        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2943        return compareValues(identifier, o.identifier, true) && compareValues(next, o.next, true) && compareValues(timestamp, o.timestamp, true)
2944           && compareValues(total, o.total, true) && compareValues(offset, o.offset, true);
2945      }
2946
2947      public boolean isEmpty() {
2948        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, next, timestamp
2949          , total, offset, parameter, property, contains);
2950      }
2951
2952      public boolean hasParameterValue(String name, String value) {
2953        for (ValueSetExpansionParameterComponent p : getParameter()) {
2954          if (name.equals(p.getName()) && p.hasValue() && value.equals(p.getValue().primitiveValue())) {
2955            return true;
2956          }
2957        }
2958        return false;
2959      }
2960
2961      public void addParameter(String name, DataType value) {
2962        getParameter().add(new ValueSetExpansionParameterComponent(name).setValue(value));
2963      }
2964      
2965      public String fhirType() {
2966        return "ValueSet.expansion";
2967      }
2968
2969    }
2970
2971    @Block()
2972    public static class ValueSetExpansionParameterComponent extends BackboneElement implements IBaseBackboneElement {
2973        /**
2974         * 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.
2975         */
2976        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2977        @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." )
2978        protected StringType name;
2979
2980        /**
2981         * The value of the parameter.
2982         */
2983        @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)
2984        @Description(shortDefinition="Value of the named parameter", formalDefinition="The value of the parameter." )
2985        protected DataType value;
2986
2987        private static final long serialVersionUID = 1839679495L;
2988
2989    /**
2990     * Constructor
2991     */
2992      public ValueSetExpansionParameterComponent() {
2993        super();
2994      }
2995
2996    /**
2997     * Constructor
2998     */
2999      public ValueSetExpansionParameterComponent(String name) {
3000        super();
3001        this.setName(name);
3002      }
3003
3004        /**
3005         * @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
3006         */
3007        public StringType getNameElement() { 
3008          if (this.name == null)
3009            if (Configuration.errorOnAutoCreate())
3010              throw new Error("Attempt to auto-create ValueSetExpansionParameterComponent.name");
3011            else if (Configuration.doAutoCreate())
3012              this.name = new StringType(); // bb
3013          return this.name;
3014        }
3015
3016        public boolean hasNameElement() { 
3017          return this.name != null && !this.name.isEmpty();
3018        }
3019
3020        public boolean hasName() { 
3021          return this.name != null && !this.name.isEmpty();
3022        }
3023
3024        /**
3025         * @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
3026         */
3027        public ValueSetExpansionParameterComponent setNameElement(StringType value) { 
3028          this.name = value;
3029          return this;
3030        }
3031
3032        /**
3033         * @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.
3034         */
3035        public String getName() { 
3036          return this.name == null ? null : this.name.getValue();
3037        }
3038
3039        /**
3040         * @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.
3041         */
3042        public ValueSetExpansionParameterComponent setName(String value) { 
3043            if (this.name == null)
3044              this.name = new StringType();
3045            this.name.setValue(value);
3046          return this;
3047        }
3048
3049        /**
3050         * @return {@link #value} (The value of the parameter.)
3051         */
3052        public DataType getValue() { 
3053          return this.value;
3054        }
3055
3056        /**
3057         * @return {@link #value} (The value of the parameter.)
3058         */
3059        public StringType getValueStringType() throws FHIRException { 
3060          if (this.value == null)
3061            this.value = new StringType();
3062          if (!(this.value instanceof StringType))
3063            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
3064          return (StringType) this.value;
3065        }
3066
3067        public boolean hasValueStringType() { 
3068          return this != null && this.value instanceof StringType;
3069        }
3070
3071        /**
3072         * @return {@link #value} (The value of the parameter.)
3073         */
3074        public BooleanType getValueBooleanType() throws FHIRException { 
3075          if (this.value == null)
3076            this.value = new BooleanType();
3077          if (!(this.value instanceof BooleanType))
3078            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
3079          return (BooleanType) this.value;
3080        }
3081
3082        public boolean hasValueBooleanType() { 
3083          return this != null && this.value instanceof BooleanType;
3084        }
3085
3086        /**
3087         * @return {@link #value} (The value of the parameter.)
3088         */
3089        public IntegerType getValueIntegerType() throws FHIRException { 
3090          if (this.value == null)
3091            this.value = new IntegerType();
3092          if (!(this.value instanceof IntegerType))
3093            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
3094          return (IntegerType) this.value;
3095        }
3096
3097        public boolean hasValueIntegerType() { 
3098          return this != null && this.value instanceof IntegerType;
3099        }
3100
3101        /**
3102         * @return {@link #value} (The value of the parameter.)
3103         */
3104        public DecimalType getValueDecimalType() throws FHIRException { 
3105          if (this.value == null)
3106            this.value = new DecimalType();
3107          if (!(this.value instanceof DecimalType))
3108            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
3109          return (DecimalType) this.value;
3110        }
3111
3112        public boolean hasValueDecimalType() { 
3113          return this != null && this.value instanceof DecimalType;
3114        }
3115
3116        /**
3117         * @return {@link #value} (The value of the parameter.)
3118         */
3119        public UriType getValueUriType() throws FHIRException { 
3120          if (this.value == null)
3121            this.value = new UriType();
3122          if (!(this.value instanceof UriType))
3123            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
3124          return (UriType) this.value;
3125        }
3126
3127        public boolean hasValueUriType() { 
3128          return this != null && this.value instanceof UriType;
3129        }
3130
3131        /**
3132         * @return {@link #value} (The value of the parameter.)
3133         */
3134        public CodeType getValueCodeType() throws FHIRException { 
3135          if (this.value == null)
3136            this.value = new CodeType();
3137          if (!(this.value instanceof CodeType))
3138            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
3139          return (CodeType) this.value;
3140        }
3141
3142        public boolean hasValueCodeType() { 
3143          return this != null && this.value instanceof CodeType;
3144        }
3145
3146        /**
3147         * @return {@link #value} (The value of the parameter.)
3148         */
3149        public DateTimeType getValueDateTimeType() throws FHIRException { 
3150          if (this.value == null)
3151            this.value = new DateTimeType();
3152          if (!(this.value instanceof DateTimeType))
3153            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
3154          return (DateTimeType) this.value;
3155        }
3156
3157        public boolean hasValueDateTimeType() { 
3158          return this != null && this.value instanceof DateTimeType;
3159        }
3160
3161        public boolean hasValue() { 
3162          return this.value != null && !this.value.isEmpty();
3163        }
3164
3165        /**
3166         * @param value {@link #value} (The value of the parameter.)
3167         */
3168        public ValueSetExpansionParameterComponent setValue(DataType value) { 
3169          if (value != null && !(value instanceof StringType || value instanceof BooleanType || value instanceof IntegerType || value instanceof DecimalType || value instanceof UriType || value instanceof CodeType || value instanceof DateTimeType))
3170            throw new FHIRException("Not the right type for ValueSet.expansion.parameter.value[x]: "+value.fhirType());
3171          this.value = value;
3172          return this;
3173        }
3174
3175        protected void listChildren(List<Property> children) {
3176          super.listChildren(children);
3177          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));
3178          children.add(new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value));
3179        }
3180
3181        @Override
3182        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3183          switch (_hash) {
3184          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);
3185          case -1410166417: /*value[x]*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
3186          case 111972721: /*value*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
3187          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of the parameter.", 0, 1, value);
3188          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the parameter.", 0, 1, value);
3189          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of the parameter.", 0, 1, value);
3190          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of the parameter.", 0, 1, value);
3191          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The value of the parameter.", 0, 1, value);
3192          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of the parameter.", 0, 1, value);
3193          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of the parameter.", 0, 1, value);
3194          default: return super.getNamedProperty(_hash, _name, _checkValid);
3195          }
3196
3197        }
3198
3199      @Override
3200      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3201        switch (hash) {
3202        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3203        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
3204        default: return super.getProperty(hash, name, checkValid);
3205        }
3206
3207      }
3208
3209      @Override
3210      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3211        switch (hash) {
3212        case 3373707: // name
3213          this.name = TypeConvertor.castToString(value); // StringType
3214          return value;
3215        case 111972721: // value
3216          this.value = TypeConvertor.castToType(value); // DataType
3217          return value;
3218        default: return super.setProperty(hash, name, value);
3219        }
3220
3221      }
3222
3223      @Override
3224      public Base setProperty(String name, Base value) throws FHIRException {
3225        if (name.equals("name")) {
3226          this.name = TypeConvertor.castToString(value); // StringType
3227        } else if (name.equals("value[x]")) {
3228          this.value = TypeConvertor.castToType(value); // DataType
3229        } else
3230          return super.setProperty(name, value);
3231        return value;
3232      }
3233
3234  @Override
3235  public void removeChild(String name, Base value) throws FHIRException {
3236        if (name.equals("name")) {
3237          this.name = null;
3238        } else if (name.equals("value[x]")) {
3239          this.value = null;
3240        } else
3241          super.removeChild(name, value);
3242        
3243      }
3244
3245      @Override
3246      public Base makeProperty(int hash, String name) throws FHIRException {
3247        switch (hash) {
3248        case 3373707:  return getNameElement();
3249        case -1410166417:  return getValue();
3250        case 111972721:  return getValue();
3251        default: return super.makeProperty(hash, name);
3252        }
3253
3254      }
3255
3256      @Override
3257      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3258        switch (hash) {
3259        case 3373707: /*name*/ return new String[] {"string"};
3260        case 111972721: /*value*/ return new String[] {"string", "boolean", "integer", "decimal", "uri", "code", "dateTime"};
3261        default: return super.getTypesForProperty(hash, name);
3262        }
3263
3264      }
3265
3266      @Override
3267      public Base addChild(String name) throws FHIRException {
3268        if (name.equals("name")) {
3269          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.parameter.name");
3270        }
3271        else if (name.equals("valueString")) {
3272          this.value = new StringType();
3273          return this.value;
3274        }
3275        else if (name.equals("valueBoolean")) {
3276          this.value = new BooleanType();
3277          return this.value;
3278        }
3279        else if (name.equals("valueInteger")) {
3280          this.value = new IntegerType();
3281          return this.value;
3282        }
3283        else if (name.equals("valueDecimal")) {
3284          this.value = new DecimalType();
3285          return this.value;
3286        }
3287        else if (name.equals("valueUri")) {
3288          this.value = new UriType();
3289          return this.value;
3290        }
3291        else if (name.equals("valueCode")) {
3292          this.value = new CodeType();
3293          return this.value;
3294        }
3295        else if (name.equals("valueDateTime")) {
3296          this.value = new DateTimeType();
3297          return this.value;
3298        }
3299        else
3300          return super.addChild(name);
3301      }
3302
3303      public ValueSetExpansionParameterComponent copy() {
3304        ValueSetExpansionParameterComponent dst = new ValueSetExpansionParameterComponent();
3305        copyValues(dst);
3306        return dst;
3307      }
3308
3309      public void copyValues(ValueSetExpansionParameterComponent dst) {
3310        super.copyValues(dst);
3311        dst.name = name == null ? null : name.copy();
3312        dst.value = value == null ? null : value.copy();
3313      }
3314
3315      @Override
3316      public boolean equalsDeep(Base other_) {
3317        if (!super.equalsDeep(other_))
3318          return false;
3319        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3320          return false;
3321        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3322        return compareDeep(name, o.name, true) && compareDeep(value, o.value, true);
3323      }
3324
3325      @Override
3326      public boolean equalsShallow(Base other_) {
3327        if (!super.equalsShallow(other_))
3328          return false;
3329        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3330          return false;
3331        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3332        return compareValues(name, o.name, true);
3333      }
3334
3335      public boolean isEmpty() {
3336        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, value);
3337      }
3338
3339  public String fhirType() {
3340    return "ValueSet.expansion.parameter";
3341
3342  }
3343
3344  @Override
3345  public String toString() {
3346    var s = (hasValue() ? getValue().primitiveValue() : "");
3347    return getName() + "=" + s;
3348  }
3349
3350  }
3351
3352    @Block()
3353    public static class ValueSetExpansionPropertyComponent extends BackboneElement implements IBaseBackboneElement {
3354        /**
3355         * A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3356         */
3357        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3358        @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." )
3359        protected CodeType code;
3360
3361        /**
3362         * Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3363         */
3364        @Child(name = "uri", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3365        @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." )
3366        protected UriType uri;
3367
3368        private static final long serialVersionUID = 929575836L;
3369
3370    /**
3371     * Constructor
3372     */
3373      public ValueSetExpansionPropertyComponent() {
3374        super();
3375      }
3376
3377    /**
3378     * Constructor
3379     */
3380      public ValueSetExpansionPropertyComponent(String code) {
3381        super();
3382        this.setCode(code);
3383      }
3384
3385        /**
3386         * @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
3387         */
3388        public CodeType getCodeElement() { 
3389          if (this.code == null)
3390            if (Configuration.errorOnAutoCreate())
3391              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.code");
3392            else if (Configuration.doAutoCreate())
3393              this.code = new CodeType(); // bb
3394          return this.code;
3395        }
3396
3397        public boolean hasCodeElement() { 
3398          return this.code != null && !this.code.isEmpty();
3399        }
3400
3401        public boolean hasCode() { 
3402          return this.code != null && !this.code.isEmpty();
3403        }
3404
3405        /**
3406         * @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
3407         */
3408        public ValueSetExpansionPropertyComponent setCodeElement(CodeType value) { 
3409          this.code = value;
3410          return this;
3411        }
3412
3413        /**
3414         * @return A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3415         */
3416        public String getCode() { 
3417          return this.code == null ? null : this.code.getValue();
3418        }
3419
3420        /**
3421         * @param value A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3422         */
3423        public ValueSetExpansionPropertyComponent setCode(String value) { 
3424            if (this.code == null)
3425              this.code = new CodeType();
3426            this.code.setValue(value);
3427          return this;
3428        }
3429
3430        /**
3431         * @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
3432         */
3433        public UriType getUriElement() { 
3434          if (this.uri == null)
3435            if (Configuration.errorOnAutoCreate())
3436              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.uri");
3437            else if (Configuration.doAutoCreate())
3438              this.uri = new UriType(); // bb
3439          return this.uri;
3440        }
3441
3442        public boolean hasUriElement() { 
3443          return this.uri != null && !this.uri.isEmpty();
3444        }
3445
3446        public boolean hasUri() { 
3447          return this.uri != null && !this.uri.isEmpty();
3448        }
3449
3450        /**
3451         * @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
3452         */
3453        public ValueSetExpansionPropertyComponent setUriElement(UriType value) { 
3454          this.uri = value;
3455          return this;
3456        }
3457
3458        /**
3459         * @return Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3460         */
3461        public String getUri() { 
3462          return this.uri == null ? null : this.uri.getValue();
3463        }
3464
3465        /**
3466         * @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.
3467         */
3468        public ValueSetExpansionPropertyComponent setUri(String value) { 
3469          if (Utilities.noString(value))
3470            this.uri = null;
3471          else {
3472            if (this.uri == null)
3473              this.uri = new UriType();
3474            this.uri.setValue(value);
3475          }
3476          return this;
3477        }
3478
3479        protected void listChildren(List<Property> children) {
3480          super.listChildren(children);
3481          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));
3482          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));
3483        }
3484
3485        @Override
3486        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3487          switch (_hash) {
3488          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);
3489          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);
3490          default: return super.getNamedProperty(_hash, _name, _checkValid);
3491          }
3492
3493        }
3494
3495      @Override
3496      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3497        switch (hash) {
3498        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3499        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // UriType
3500        default: return super.getProperty(hash, name, checkValid);
3501        }
3502
3503      }
3504
3505      @Override
3506      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3507        switch (hash) {
3508        case 3059181: // code
3509          this.code = TypeConvertor.castToCode(value); // CodeType
3510          return value;
3511        case 116076: // uri
3512          this.uri = TypeConvertor.castToUri(value); // UriType
3513          return value;
3514        default: return super.setProperty(hash, name, value);
3515        }
3516
3517      }
3518
3519      @Override
3520      public Base setProperty(String name, Base value) throws FHIRException {
3521        if (name.equals("code")) {
3522          this.code = TypeConvertor.castToCode(value); // CodeType
3523        } else if (name.equals("uri")) {
3524          this.uri = TypeConvertor.castToUri(value); // UriType
3525        } else
3526          return super.setProperty(name, value);
3527        return value;
3528      }
3529
3530  @Override
3531  public void removeChild(String name, Base value) throws FHIRException {
3532        if (name.equals("code")) {
3533          this.code = null;
3534        } else if (name.equals("uri")) {
3535          this.uri = null;
3536        } else
3537          super.removeChild(name, value);
3538        
3539      }
3540
3541      @Override
3542      public Base makeProperty(int hash, String name) throws FHIRException {
3543        switch (hash) {
3544        case 3059181:  return getCodeElement();
3545        case 116076:  return getUriElement();
3546        default: return super.makeProperty(hash, name);
3547        }
3548
3549      }
3550
3551      @Override
3552      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3553        switch (hash) {
3554        case 3059181: /*code*/ return new String[] {"code"};
3555        case 116076: /*uri*/ return new String[] {"uri"};
3556        default: return super.getTypesForProperty(hash, name);
3557        }
3558
3559      }
3560
3561      @Override
3562      public Base addChild(String name) throws FHIRException {
3563        if (name.equals("code")) {
3564          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.property.code");
3565        }
3566        else if (name.equals("uri")) {
3567          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.property.uri");
3568        }
3569        else
3570          return super.addChild(name);
3571      }
3572
3573      public ValueSetExpansionPropertyComponent copy() {
3574        ValueSetExpansionPropertyComponent dst = new ValueSetExpansionPropertyComponent();
3575        copyValues(dst);
3576        return dst;
3577      }
3578
3579      public void copyValues(ValueSetExpansionPropertyComponent dst) {
3580        super.copyValues(dst);
3581        dst.code = code == null ? null : code.copy();
3582        dst.uri = uri == null ? null : uri.copy();
3583      }
3584
3585      @Override
3586      public boolean equalsDeep(Base other_) {
3587        if (!super.equalsDeep(other_))
3588          return false;
3589        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3590          return false;
3591        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3592        return compareDeep(code, o.code, true) && compareDeep(uri, o.uri, true);
3593      }
3594
3595      @Override
3596      public boolean equalsShallow(Base other_) {
3597        if (!super.equalsShallow(other_))
3598          return false;
3599        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3600          return false;
3601        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3602        return compareValues(code, o.code, true) && compareValues(uri, o.uri, true);
3603      }
3604
3605      public boolean isEmpty() {
3606        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, uri);
3607      }
3608
3609  public String fhirType() {
3610    return "ValueSet.expansion.property";
3611
3612  }
3613
3614  }
3615
3616    @Block()
3617    public static class ValueSetExpansionContainsComponent extends BackboneElement implements IBaseBackboneElement {
3618        /**
3619         * An absolute URI which is the code system in which the code for this item in the expansion is defined.
3620         */
3621        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
3622        @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." )
3623        protected UriType system;
3624
3625        /**
3626         * If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
3627         */
3628        @Child(name = "abstract", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3629        @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." )
3630        protected BooleanType abstract_;
3631
3632        /**
3633         * 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).
3634         */
3635        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
3636        @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)." )
3637        protected BooleanType inactive;
3638
3639        /**
3640         * 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.
3641         */
3642        @Child(name = "version", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
3643        @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." )
3644        protected StringType version;
3645
3646        /**
3647         * 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.
3648         */
3649        @Child(name = "code", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
3650        @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." )
3651        protected CodeType code;
3652
3653        /**
3654         * The recommended display for this item in the expansion.
3655         */
3656        @Child(name = "display", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
3657        @Description(shortDefinition="User display for the concept", formalDefinition="The recommended display for this item in the expansion." )
3658        protected StringType display;
3659
3660        /**
3661         * 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.
3662         */
3663        @Child(name = "designation", type = {ConceptReferenceDesignationComponent.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3664        @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." )
3665        protected List<ConceptReferenceDesignationComponent> designation;
3666
3667        /**
3668         * A property value for this concept.
3669         */
3670        @Child(name = "property", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3671        @Description(shortDefinition="Property value for the concept", formalDefinition="A property value for this concept." )
3672        protected List<ConceptPropertyComponent> property;
3673
3674        /**
3675         * Other codes and entries contained under this entry in the hierarchy.
3676         */
3677        @Child(name = "contains", type = {ValueSetExpansionContainsComponent.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3678        @Description(shortDefinition="Codes contained under this entry", formalDefinition="Other codes and entries contained under this entry in the hierarchy." )
3679        protected List<ValueSetExpansionContainsComponent> contains;
3680
3681        private static final long serialVersionUID = -1370569439L;
3682
3683    /**
3684     * Constructor
3685     */
3686      public ValueSetExpansionContainsComponent() {
3687        super();
3688      }
3689
3690        /**
3691         * @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
3692         */
3693        public UriType getSystemElement() { 
3694          if (this.system == null)
3695            if (Configuration.errorOnAutoCreate())
3696              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.system");
3697            else if (Configuration.doAutoCreate())
3698              this.system = new UriType(); // bb
3699          return this.system;
3700        }
3701
3702        public boolean hasSystemElement() { 
3703          return this.system != null && !this.system.isEmpty();
3704        }
3705
3706        public boolean hasSystem() { 
3707          return this.system != null && !this.system.isEmpty();
3708        }
3709
3710        /**
3711         * @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
3712         */
3713        public ValueSetExpansionContainsComponent setSystemElement(UriType value) { 
3714          this.system = value;
3715          return this;
3716        }
3717
3718        /**
3719         * @return An absolute URI which is the code system in which the code for this item in the expansion is defined.
3720         */
3721        public String getSystem() { 
3722          return this.system == null ? null : this.system.getValue();
3723        }
3724
3725        /**
3726         * @param value An absolute URI which is the code system in which the code for this item in the expansion is defined.
3727         */
3728        public ValueSetExpansionContainsComponent setSystem(String value) { 
3729          if (Utilities.noString(value))
3730            this.system = null;
3731          else {
3732            if (this.system == null)
3733              this.system = new UriType();
3734            this.system.setValue(value);
3735          }
3736          return this;
3737        }
3738
3739        /**
3740         * @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
3741         */
3742        public BooleanType getAbstractElement() { 
3743          if (this.abstract_ == null)
3744            if (Configuration.errorOnAutoCreate())
3745              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.abstract_");
3746            else if (Configuration.doAutoCreate())
3747              this.abstract_ = new BooleanType(); // bb
3748          return this.abstract_;
3749        }
3750
3751        public boolean hasAbstractElement() { 
3752          return this.abstract_ != null && !this.abstract_.isEmpty();
3753        }
3754
3755        public boolean hasAbstract() { 
3756          return this.abstract_ != null && !this.abstract_.isEmpty();
3757        }
3758
3759        /**
3760         * @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
3761         */
3762        public ValueSetExpansionContainsComponent setAbstractElement(BooleanType value) { 
3763          this.abstract_ = value;
3764          return this;
3765        }
3766
3767        /**
3768         * @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.
3769         */
3770        public boolean getAbstract() { 
3771          return this.abstract_ == null || this.abstract_.isEmpty() ? false : this.abstract_.getValue();
3772        }
3773
3774        /**
3775         * @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.
3776         */
3777        public ValueSetExpansionContainsComponent setAbstract(boolean value) { 
3778            if (this.abstract_ == null)
3779              this.abstract_ = new BooleanType();
3780            this.abstract_.setValue(value);
3781          return this;
3782        }
3783
3784        /**
3785         * @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
3786         */
3787        public BooleanType getInactiveElement() { 
3788          if (this.inactive == null)
3789            if (Configuration.errorOnAutoCreate())
3790              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.inactive");
3791            else if (Configuration.doAutoCreate())
3792              this.inactive = new BooleanType(); // bb
3793          return this.inactive;
3794        }
3795
3796        public boolean hasInactiveElement() { 
3797          return this.inactive != null && !this.inactive.isEmpty();
3798        }
3799
3800        public boolean hasInactive() { 
3801          return this.inactive != null && !this.inactive.isEmpty();
3802        }
3803
3804        /**
3805         * @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
3806         */
3807        public ValueSetExpansionContainsComponent setInactiveElement(BooleanType value) { 
3808          this.inactive = value;
3809          return this;
3810        }
3811
3812        /**
3813         * @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).
3814         */
3815        public boolean getInactive() { 
3816          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
3817        }
3818
3819        /**
3820         * @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).
3821         */
3822        public ValueSetExpansionContainsComponent setInactive(boolean value) { 
3823            if (this.inactive == null)
3824              this.inactive = new BooleanType();
3825            this.inactive.setValue(value);
3826          return this;
3827        }
3828
3829        /**
3830         * @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
3831         */
3832        public StringType getVersionElement() { 
3833          if (this.version == null)
3834            if (Configuration.errorOnAutoCreate())
3835              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.version");
3836            else if (Configuration.doAutoCreate())
3837              this.version = new StringType(); // bb
3838          return this.version;
3839        }
3840
3841        public boolean hasVersionElement() { 
3842          return this.version != null && !this.version.isEmpty();
3843        }
3844
3845        public boolean hasVersion() { 
3846          return this.version != null && !this.version.isEmpty();
3847        }
3848
3849        /**
3850         * @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
3851         */
3852        public ValueSetExpansionContainsComponent setVersionElement(StringType value) { 
3853          this.version = value;
3854          return this;
3855        }
3856
3857        /**
3858         * @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.
3859         */
3860        public String getVersion() { 
3861          return this.version == null ? null : this.version.getValue();
3862        }
3863
3864        /**
3865         * @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.
3866         */
3867        public ValueSetExpansionContainsComponent setVersion(String value) { 
3868          if (Utilities.noString(value))
3869            this.version = null;
3870          else {
3871            if (this.version == null)
3872              this.version = new StringType();
3873            this.version.setValue(value);
3874          }
3875          return this;
3876        }
3877
3878        /**
3879         * @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
3880         */
3881        public CodeType getCodeElement() { 
3882          if (this.code == null)
3883            if (Configuration.errorOnAutoCreate())
3884              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.code");
3885            else if (Configuration.doAutoCreate())
3886              this.code = new CodeType(); // bb
3887          return this.code;
3888        }
3889
3890        public boolean hasCodeElement() { 
3891          return this.code != null && !this.code.isEmpty();
3892        }
3893
3894        public boolean hasCode() { 
3895          return this.code != null && !this.code.isEmpty();
3896        }
3897
3898        /**
3899         * @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
3900         */
3901        public ValueSetExpansionContainsComponent setCodeElement(CodeType value) { 
3902          this.code = value;
3903          return this;
3904        }
3905
3906        /**
3907         * @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.
3908         */
3909        public String getCode() { 
3910          return this.code == null ? null : this.code.getValue();
3911        }
3912
3913        /**
3914         * @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.
3915         */
3916        public ValueSetExpansionContainsComponent setCode(String value) { 
3917          if (Utilities.noString(value))
3918            this.code = null;
3919          else {
3920            if (this.code == null)
3921              this.code = new CodeType();
3922            this.code.setValue(value);
3923          }
3924          return this;
3925        }
3926
3927        /**
3928         * @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
3929         */
3930        public StringType getDisplayElement() { 
3931          if (this.display == null)
3932            if (Configuration.errorOnAutoCreate())
3933              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.display");
3934            else if (Configuration.doAutoCreate())
3935              this.display = new StringType(); // bb
3936          return this.display;
3937        }
3938
3939        public boolean hasDisplayElement() { 
3940          return this.display != null && !this.display.isEmpty();
3941        }
3942
3943        public boolean hasDisplay() { 
3944          return this.display != null && !this.display.isEmpty();
3945        }
3946
3947        /**
3948         * @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
3949         */
3950        public ValueSetExpansionContainsComponent setDisplayElement(StringType value) { 
3951          this.display = value;
3952          return this;
3953        }
3954
3955        /**
3956         * @return The recommended display for this item in the expansion.
3957         */
3958        public String getDisplay() { 
3959          return this.display == null ? null : this.display.getValue();
3960        }
3961
3962        /**
3963         * @param value The recommended display for this item in the expansion.
3964         */
3965        public ValueSetExpansionContainsComponent setDisplay(String value) { 
3966          if (Utilities.noString(value))
3967            this.display = null;
3968          else {
3969            if (this.display == null)
3970              this.display = new StringType();
3971            this.display.setValue(value);
3972          }
3973          return this;
3974        }
3975
3976        /**
3977         * @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.)
3978         */
3979        public List<ConceptReferenceDesignationComponent> getDesignation() { 
3980          if (this.designation == null)
3981            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3982          return this.designation;
3983        }
3984
3985        /**
3986         * @return Returns a reference to <code>this</code> for easy method chaining
3987         */
3988        public ValueSetExpansionContainsComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
3989          this.designation = theDesignation;
3990          return this;
3991        }
3992
3993        public boolean hasDesignation() { 
3994          if (this.designation == null)
3995            return false;
3996          for (ConceptReferenceDesignationComponent item : this.designation)
3997            if (!item.isEmpty())
3998              return true;
3999          return false;
4000        }
4001
4002        public ConceptReferenceDesignationComponent addDesignation() { //3
4003          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
4004          if (this.designation == null)
4005            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
4006          this.designation.add(t);
4007          return t;
4008        }
4009
4010        public ValueSetExpansionContainsComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
4011          if (t == null)
4012            return this;
4013          if (this.designation == null)
4014            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
4015          this.designation.add(t);
4016          return this;
4017        }
4018
4019        /**
4020         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
4021         */
4022        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
4023          if (getDesignation().isEmpty()) {
4024            addDesignation();
4025          }
4026          return getDesignation().get(0);
4027        }
4028
4029        /**
4030         * @return {@link #property} (A property value for this concept.)
4031         */
4032        public List<ConceptPropertyComponent> getProperty() { 
4033          if (this.property == null)
4034            this.property = new ArrayList<ConceptPropertyComponent>();
4035          return this.property;
4036        }
4037
4038        /**
4039         * @return Returns a reference to <code>this</code> for easy method chaining
4040         */
4041        public ValueSetExpansionContainsComponent setProperty(List<ConceptPropertyComponent> theProperty) { 
4042          this.property = theProperty;
4043          return this;
4044        }
4045
4046        public boolean hasProperty() { 
4047          if (this.property == null)
4048            return false;
4049          for (ConceptPropertyComponent item : this.property)
4050            if (!item.isEmpty())
4051              return true;
4052          return false;
4053        }
4054
4055        public ConceptPropertyComponent addProperty() { //3
4056          ConceptPropertyComponent t = new ConceptPropertyComponent();
4057          if (this.property == null)
4058            this.property = new ArrayList<ConceptPropertyComponent>();
4059          this.property.add(t);
4060          return t;
4061        }
4062
4063        public ValueSetExpansionContainsComponent addProperty(ConceptPropertyComponent t) { //3
4064          if (t == null)
4065            return this;
4066          if (this.property == null)
4067            this.property = new ArrayList<ConceptPropertyComponent>();
4068          this.property.add(t);
4069          return this;
4070        }
4071
4072        /**
4073         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
4074         */
4075        public ConceptPropertyComponent getPropertyFirstRep() { 
4076          if (getProperty().isEmpty()) {
4077            addProperty();
4078          }
4079          return getProperty().get(0);
4080        }
4081
4082        /**
4083         * @return {@link #contains} (Other codes and entries contained under this entry in the hierarchy.)
4084         */
4085        public List<ValueSetExpansionContainsComponent> getContains() { 
4086          if (this.contains == null)
4087            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4088          return this.contains;
4089        }
4090
4091        /**
4092         * @return Returns a reference to <code>this</code> for easy method chaining
4093         */
4094        public ValueSetExpansionContainsComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
4095          this.contains = theContains;
4096          return this;
4097        }
4098
4099        public boolean hasContains() { 
4100          if (this.contains == null)
4101            return false;
4102          for (ValueSetExpansionContainsComponent item : this.contains)
4103            if (!item.isEmpty())
4104              return true;
4105          return false;
4106        }
4107
4108        public ValueSetExpansionContainsComponent addContains() { //3
4109          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
4110          if (this.contains == null)
4111            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4112          this.contains.add(t);
4113          return t;
4114        }
4115
4116        public ValueSetExpansionContainsComponent addContains(ValueSetExpansionContainsComponent t) { //3
4117          if (t == null)
4118            return this;
4119          if (this.contains == null)
4120            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4121          this.contains.add(t);
4122          return this;
4123        }
4124
4125        /**
4126         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
4127         */
4128        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
4129          if (getContains().isEmpty()) {
4130            addContains();
4131          }
4132          return getContains().get(0);
4133        }
4134
4135        protected void listChildren(List<Property> children) {
4136          super.listChildren(children);
4137          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));
4138          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_));
4139          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));
4140          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));
4141          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));
4142          children.add(new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display));
4143          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));
4144          children.add(new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property));
4145          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));
4146        }
4147
4148        @Override
4149        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4150          switch (_hash) {
4151          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);
4152          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_);
4153          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);
4154          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);
4155          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);
4156          case 1671764162: /*display*/  return new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display);
4157          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);
4158          case -993141291: /*property*/  return new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property);
4159          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);
4160          default: return super.getNamedProperty(_hash, _name, _checkValid);
4161          }
4162
4163        }
4164
4165      @Override
4166      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4167        switch (hash) {
4168        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
4169        case 1732898850: /*abstract*/ return this.abstract_ == null ? new Base[0] : new Base[] {this.abstract_}; // BooleanType
4170        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
4171        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
4172        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4173        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
4174        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
4175        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ConceptPropertyComponent
4176        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
4177        default: return super.getProperty(hash, name, checkValid);
4178        }
4179
4180      }
4181
4182      @Override
4183      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4184        switch (hash) {
4185        case -887328209: // system
4186          this.system = TypeConvertor.castToUri(value); // UriType
4187          return value;
4188        case 1732898850: // abstract
4189          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
4190          return value;
4191        case 24665195: // inactive
4192          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
4193          return value;
4194        case 351608024: // version
4195          this.version = TypeConvertor.castToString(value); // StringType
4196          return value;
4197        case 3059181: // code
4198          this.code = TypeConvertor.castToCode(value); // CodeType
4199          return value;
4200        case 1671764162: // display
4201          this.display = TypeConvertor.castToString(value); // StringType
4202          return value;
4203        case -900931593: // designation
4204          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
4205          return value;
4206        case -993141291: // property
4207          this.getProperty().add((ConceptPropertyComponent) value); // ConceptPropertyComponent
4208          return value;
4209        case -567445985: // contains
4210          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
4211          return value;
4212        default: return super.setProperty(hash, name, value);
4213        }
4214
4215      }
4216
4217      @Override
4218      public Base setProperty(String name, Base value) throws FHIRException {
4219        if (name.equals("system")) {
4220          this.system = TypeConvertor.castToUri(value); // UriType
4221        } else if (name.equals("abstract")) {
4222          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
4223        } else if (name.equals("inactive")) {
4224          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
4225        } else if (name.equals("version")) {
4226          this.version = TypeConvertor.castToString(value); // StringType
4227        } else if (name.equals("code")) {
4228          this.code = TypeConvertor.castToCode(value); // CodeType
4229        } else if (name.equals("display")) {
4230          this.display = TypeConvertor.castToString(value); // StringType
4231        } else if (name.equals("designation")) {
4232          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
4233        } else if (name.equals("property")) {
4234          this.getProperty().add((ConceptPropertyComponent) value);
4235        } else if (name.equals("contains")) {
4236          this.getContains().add((ValueSetExpansionContainsComponent) value);
4237        } else
4238          return super.setProperty(name, value);
4239        return value;
4240      }
4241
4242  @Override
4243  public void removeChild(String name, Base value) throws FHIRException {
4244        if (name.equals("system")) {
4245          this.system = null;
4246        } else if (name.equals("abstract")) {
4247          this.abstract_ = null;
4248        } else if (name.equals("inactive")) {
4249          this.inactive = null;
4250        } else if (name.equals("version")) {
4251          this.version = null;
4252        } else if (name.equals("code")) {
4253          this.code = null;
4254        } else if (name.equals("display")) {
4255          this.display = null;
4256        } else if (name.equals("designation")) {
4257          this.getDesignation().remove((ConceptReferenceDesignationComponent) value);
4258        } else if (name.equals("property")) {
4259          this.getProperty().remove((ConceptPropertyComponent) value);
4260        } else if (name.equals("contains")) {
4261          this.getContains().remove((ValueSetExpansionContainsComponent) value);
4262        } else
4263          super.removeChild(name, value);
4264        
4265      }
4266
4267      @Override
4268      public Base makeProperty(int hash, String name) throws FHIRException {
4269        switch (hash) {
4270        case -887328209:  return getSystemElement();
4271        case 1732898850:  return getAbstractElement();
4272        case 24665195:  return getInactiveElement();
4273        case 351608024:  return getVersionElement();
4274        case 3059181:  return getCodeElement();
4275        case 1671764162:  return getDisplayElement();
4276        case -900931593:  return addDesignation(); 
4277        case -993141291:  return addProperty(); 
4278        case -567445985:  return addContains(); 
4279        default: return super.makeProperty(hash, name);
4280        }
4281
4282      }
4283
4284      @Override
4285      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4286        switch (hash) {
4287        case -887328209: /*system*/ return new String[] {"uri"};
4288        case 1732898850: /*abstract*/ return new String[] {"boolean"};
4289        case 24665195: /*inactive*/ return new String[] {"boolean"};
4290        case 351608024: /*version*/ return new String[] {"string"};
4291        case 3059181: /*code*/ return new String[] {"code"};
4292        case 1671764162: /*display*/ return new String[] {"string"};
4293        case -900931593: /*designation*/ return new String[] {"@ValueSet.compose.include.concept.designation"};
4294        case -993141291: /*property*/ return new String[] {};
4295        case -567445985: /*contains*/ return new String[] {"@ValueSet.expansion.contains"};
4296        default: return super.getTypesForProperty(hash, name);
4297        }
4298
4299      }
4300
4301      @Override
4302      public Base addChild(String name) throws FHIRException {
4303        if (name.equals("system")) {
4304          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.system");
4305        }
4306        else if (name.equals("abstract")) {
4307          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.abstract");
4308        }
4309        else if (name.equals("inactive")) {
4310          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.inactive");
4311        }
4312        else if (name.equals("version")) {
4313          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.version");
4314        }
4315        else if (name.equals("code")) {
4316          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.code");
4317        }
4318        else if (name.equals("display")) {
4319          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.display");
4320        }
4321        else if (name.equals("designation")) {
4322          return addDesignation();
4323        }
4324        else if (name.equals("property")) {
4325          return addProperty();
4326        }
4327        else if (name.equals("contains")) {
4328          return addContains();
4329        }
4330        else
4331          return super.addChild(name);
4332      }
4333
4334      public ValueSetExpansionContainsComponent copy() {
4335        ValueSetExpansionContainsComponent dst = new ValueSetExpansionContainsComponent();
4336        copyValues(dst);
4337        return dst;
4338      }
4339
4340      public void copyValues(ValueSetExpansionContainsComponent dst) {
4341        super.copyValues(dst);
4342        dst.system = system == null ? null : system.copy();
4343        dst.abstract_ = abstract_ == null ? null : abstract_.copy();
4344        dst.inactive = inactive == null ? null : inactive.copy();
4345        dst.version = version == null ? null : version.copy();
4346        dst.code = code == null ? null : code.copy();
4347        dst.display = display == null ? null : display.copy();
4348        if (designation != null) {
4349          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
4350          for (ConceptReferenceDesignationComponent i : designation)
4351            dst.designation.add(i.copy());
4352        };
4353        if (property != null) {
4354          dst.property = new ArrayList<ConceptPropertyComponent>();
4355          for (ConceptPropertyComponent i : property)
4356            dst.property.add(i.copy());
4357        };
4358        if (contains != null) {
4359          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4360          for (ValueSetExpansionContainsComponent i : contains)
4361            dst.contains.add(i.copy());
4362        };
4363      }
4364
4365      @Override
4366      public boolean equalsDeep(Base other_) {
4367        if (!super.equalsDeep(other_))
4368          return false;
4369        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4370          return false;
4371        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4372        return compareDeep(system, o.system, true) && compareDeep(abstract_, o.abstract_, true) && compareDeep(inactive, o.inactive, true)
4373           && compareDeep(version, o.version, true) && compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
4374           && compareDeep(designation, o.designation, true) && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true)
4375          ;
4376      }
4377
4378      @Override
4379      public boolean equalsShallow(Base other_) {
4380        if (!super.equalsShallow(other_))
4381          return false;
4382        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4383          return false;
4384        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4385        return compareValues(system, o.system, true) && compareValues(abstract_, o.abstract_, true) && compareValues(inactive, o.inactive, true)
4386           && compareValues(version, o.version, true) && compareValues(code, o.code, true) && compareValues(display, o.display, true)
4387          ;
4388      }
4389
4390      public boolean isEmpty() {
4391        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, abstract_, inactive
4392          , version, code, display, designation, property, contains);
4393      }
4394
4395  public String fhirType() {
4396    return "ValueSet.expansion.contains";
4397
4398  }
4399
4400  }
4401
4402    @Block()
4403    public static class ConceptPropertyComponent extends BackboneElement implements IBaseBackboneElement {
4404        /**
4405         * A code that is a reference to ValueSet.expansion.property.code.
4406         */
4407        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4408        @Description(shortDefinition="Reference to ValueSet.expansion.property.code", formalDefinition="A code that is a reference to ValueSet.expansion.property.code." )
4409        protected CodeType code;
4410
4411        /**
4412         * The value of this property.
4413         */
4414        @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)
4415        @Description(shortDefinition="Value of the property for this concept", formalDefinition="The value of this property." )
4416        protected DataType value;
4417
4418        /**
4419         * A subproperty value for this concept.
4420         */
4421        @Child(name = "subProperty", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
4422        @Description(shortDefinition="SubProperty value for the concept", formalDefinition="A subproperty value for this concept." )
4423        protected List<ConceptSubPropertyComponent> subProperty;
4424
4425        private static final long serialVersionUID = -948620650L;
4426
4427    /**
4428     * Constructor
4429     */
4430      public ConceptPropertyComponent() {
4431        super();
4432      }
4433
4434    /**
4435     * Constructor
4436     */
4437      public ConceptPropertyComponent(String code, DataType value) {
4438        super();
4439        this.setCode(code);
4440        this.setValue(value);
4441      }
4442
4443        /**
4444         * @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
4445         */
4446        public CodeType getCodeElement() { 
4447          if (this.code == null)
4448            if (Configuration.errorOnAutoCreate())
4449              throw new Error("Attempt to auto-create ConceptPropertyComponent.code");
4450            else if (Configuration.doAutoCreate())
4451              this.code = new CodeType(); // bb
4452          return this.code;
4453        }
4454
4455        public boolean hasCodeElement() { 
4456          return this.code != null && !this.code.isEmpty();
4457        }
4458
4459        public boolean hasCode() { 
4460          return this.code != null && !this.code.isEmpty();
4461        }
4462
4463        /**
4464         * @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
4465         */
4466        public ConceptPropertyComponent setCodeElement(CodeType value) { 
4467          this.code = value;
4468          return this;
4469        }
4470
4471        /**
4472         * @return A code that is a reference to ValueSet.expansion.property.code.
4473         */
4474        public String getCode() { 
4475          return this.code == null ? null : this.code.getValue();
4476        }
4477
4478        /**
4479         * @param value A code that is a reference to ValueSet.expansion.property.code.
4480         */
4481        public ConceptPropertyComponent setCode(String value) { 
4482            if (this.code == null)
4483              this.code = new CodeType();
4484            this.code.setValue(value);
4485          return this;
4486        }
4487
4488        /**
4489         * @return {@link #value} (The value of this property.)
4490         */
4491        public DataType getValue() { 
4492          return this.value;
4493        }
4494
4495        /**
4496         * @return {@link #value} (The value of this property.)
4497         */
4498        public CodeType getValueCodeType() throws FHIRException { 
4499          if (this.value == null)
4500            this.value = new CodeType();
4501          if (!(this.value instanceof CodeType))
4502            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
4503          return (CodeType) this.value;
4504        }
4505
4506        public boolean hasValueCodeType() { 
4507          return this != null && this.value instanceof CodeType;
4508        }
4509
4510        /**
4511         * @return {@link #value} (The value of this property.)
4512         */
4513        public Coding getValueCoding() throws FHIRException { 
4514          if (this.value == null)
4515            this.value = new Coding();
4516          if (!(this.value instanceof Coding))
4517            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
4518          return (Coding) this.value;
4519        }
4520
4521        public boolean hasValueCoding() { 
4522          return this != null && this.value instanceof Coding;
4523        }
4524
4525        /**
4526         * @return {@link #value} (The value of this property.)
4527         */
4528        public StringType getValueStringType() throws FHIRException { 
4529          if (this.value == null)
4530            this.value = new StringType();
4531          if (!(this.value instanceof StringType))
4532            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
4533          return (StringType) this.value;
4534        }
4535
4536        public boolean hasValueStringType() { 
4537          return this != null && this.value instanceof StringType;
4538        }
4539
4540        /**
4541         * @return {@link #value} (The value of this property.)
4542         */
4543        public IntegerType getValueIntegerType() throws FHIRException { 
4544          if (this.value == null)
4545            this.value = new IntegerType();
4546          if (!(this.value instanceof IntegerType))
4547            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
4548          return (IntegerType) this.value;
4549        }
4550
4551        public boolean hasValueIntegerType() { 
4552          return this != null && this.value instanceof IntegerType;
4553        }
4554
4555        /**
4556         * @return {@link #value} (The value of this property.)
4557         */
4558        public BooleanType getValueBooleanType() throws FHIRException { 
4559          if (this.value == null)
4560            this.value = new BooleanType();
4561          if (!(this.value instanceof BooleanType))
4562            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
4563          return (BooleanType) this.value;
4564        }
4565
4566        public boolean hasValueBooleanType() { 
4567          return this != null && this.value instanceof BooleanType;
4568        }
4569
4570        /**
4571         * @return {@link #value} (The value of this property.)
4572         */
4573        public DateTimeType getValueDateTimeType() throws FHIRException { 
4574          if (this.value == null)
4575            this.value = new DateTimeType();
4576          if (!(this.value instanceof DateTimeType))
4577            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
4578          return (DateTimeType) this.value;
4579        }
4580
4581        public boolean hasValueDateTimeType() { 
4582          return this != null && this.value instanceof DateTimeType;
4583        }
4584
4585        /**
4586         * @return {@link #value} (The value of this property.)
4587         */
4588        public DecimalType getValueDecimalType() throws FHIRException { 
4589          if (this.value == null)
4590            this.value = new DecimalType();
4591          if (!(this.value instanceof DecimalType))
4592            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
4593          return (DecimalType) this.value;
4594        }
4595
4596        public boolean hasValueDecimalType() { 
4597          return this != null && this.value instanceof DecimalType;
4598        }
4599
4600        public boolean hasValue() { 
4601          return this.value != null && !this.value.isEmpty();
4602        }
4603
4604        /**
4605         * @param value {@link #value} (The value of this property.)
4606         */
4607        public ConceptPropertyComponent setValue(DataType value) { 
4608          if (value != null && !(value instanceof CodeType || value instanceof Coding || value instanceof StringType || value instanceof IntegerType || value instanceof BooleanType || value instanceof DateTimeType || value instanceof DecimalType))
4609            throw new FHIRException("Not the right type for ValueSet.expansion.contains.property.value[x]: "+value.fhirType());
4610          this.value = value;
4611          return this;
4612        }
4613
4614        /**
4615         * @return {@link #subProperty} (A subproperty value for this concept.)
4616         */
4617        public List<ConceptSubPropertyComponent> getSubProperty() { 
4618          if (this.subProperty == null)
4619            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4620          return this.subProperty;
4621        }
4622
4623        /**
4624         * @return Returns a reference to <code>this</code> for easy method chaining
4625         */
4626        public ConceptPropertyComponent setSubProperty(List<ConceptSubPropertyComponent> theSubProperty) { 
4627          this.subProperty = theSubProperty;
4628          return this;
4629        }
4630
4631        public boolean hasSubProperty() { 
4632          if (this.subProperty == null)
4633            return false;
4634          for (ConceptSubPropertyComponent item : this.subProperty)
4635            if (!item.isEmpty())
4636              return true;
4637          return false;
4638        }
4639
4640        public ConceptSubPropertyComponent addSubProperty() { //3
4641          ConceptSubPropertyComponent t = new ConceptSubPropertyComponent();
4642          if (this.subProperty == null)
4643            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4644          this.subProperty.add(t);
4645          return t;
4646        }
4647
4648        public ConceptPropertyComponent addSubProperty(ConceptSubPropertyComponent t) { //3
4649          if (t == null)
4650            return this;
4651          if (this.subProperty == null)
4652            this.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4653          this.subProperty.add(t);
4654          return this;
4655        }
4656
4657        /**
4658         * @return The first repetition of repeating field {@link #subProperty}, creating it if it does not already exist {3}
4659         */
4660        public ConceptSubPropertyComponent getSubPropertyFirstRep() { 
4661          if (getSubProperty().isEmpty()) {
4662            addSubProperty();
4663          }
4664          return getSubProperty().get(0);
4665        }
4666
4667        protected void listChildren(List<Property> children) {
4668          super.listChildren(children);
4669          children.add(new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code));
4670          children.add(new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value));
4671          children.add(new Property("subProperty", "", "A subproperty value for this concept.", 0, java.lang.Integer.MAX_VALUE, subProperty));
4672        }
4673
4674        @Override
4675        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4676          switch (_hash) {
4677          case 3059181: /*code*/  return new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code);
4678          case -1410166417: /*value[x]*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4679          case 111972721: /*value*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4680          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of this property.", 0, 1, value);
4681          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of this property.", 0, 1, value);
4682          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of this property.", 0, 1, value);
4683          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of this property.", 0, 1, value);
4684          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of this property.", 0, 1, value);
4685          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of this property.", 0, 1, value);
4686          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of this property.", 0, 1, value);
4687          case 321372213: /*subProperty*/  return new Property("subProperty", "", "A subproperty value for this concept.", 0, java.lang.Integer.MAX_VALUE, subProperty);
4688          default: return super.getNamedProperty(_hash, _name, _checkValid);
4689          }
4690
4691        }
4692
4693      @Override
4694      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4695        switch (hash) {
4696        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4697        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
4698        case 321372213: /*subProperty*/ return this.subProperty == null ? new Base[0] : this.subProperty.toArray(new Base[this.subProperty.size()]); // ConceptSubPropertyComponent
4699        default: return super.getProperty(hash, name, checkValid);
4700        }
4701
4702      }
4703
4704      @Override
4705      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4706        switch (hash) {
4707        case 3059181: // code
4708          this.code = TypeConvertor.castToCode(value); // CodeType
4709          return value;
4710        case 111972721: // value
4711          this.value = TypeConvertor.castToType(value); // DataType
4712          return value;
4713        case 321372213: // subProperty
4714          this.getSubProperty().add((ConceptSubPropertyComponent) value); // ConceptSubPropertyComponent
4715          return value;
4716        default: return super.setProperty(hash, name, value);
4717        }
4718
4719      }
4720
4721      @Override
4722      public Base setProperty(String name, Base value) throws FHIRException {
4723        if (name.equals("code")) {
4724          this.code = TypeConvertor.castToCode(value); // CodeType
4725        } else if (name.equals("value[x]")) {
4726          this.value = TypeConvertor.castToType(value); // DataType
4727        } else if (name.equals("subProperty")) {
4728          this.getSubProperty().add((ConceptSubPropertyComponent) value);
4729        } else
4730          return super.setProperty(name, value);
4731        return value;
4732      }
4733
4734  @Override
4735  public void removeChild(String name, Base value) throws FHIRException {
4736        if (name.equals("code")) {
4737          this.code = null;
4738        } else if (name.equals("value[x]")) {
4739          this.value = null;
4740        } else if (name.equals("subProperty")) {
4741          this.getSubProperty().remove((ConceptSubPropertyComponent) value);
4742        } else
4743          super.removeChild(name, value);
4744        
4745      }
4746
4747      @Override
4748      public Base makeProperty(int hash, String name) throws FHIRException {
4749        switch (hash) {
4750        case 3059181:  return getCodeElement();
4751        case -1410166417:  return getValue();
4752        case 111972721:  return getValue();
4753        case 321372213:  return addSubProperty(); 
4754        default: return super.makeProperty(hash, name);
4755        }
4756
4757      }
4758
4759      @Override
4760      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4761        switch (hash) {
4762        case 3059181: /*code*/ return new String[] {"code"};
4763        case 111972721: /*value*/ return new String[] {"code", "Coding", "string", "integer", "boolean", "dateTime", "decimal"};
4764        case 321372213: /*subProperty*/ return new String[] {};
4765        default: return super.getTypesForProperty(hash, name);
4766        }
4767
4768      }
4769
4770      @Override
4771      public Base addChild(String name) throws FHIRException {
4772        if (name.equals("code")) {
4773          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.property.code");
4774        }
4775        else if (name.equals("valueCode")) {
4776          this.value = new CodeType();
4777          return this.value;
4778        }
4779        else if (name.equals("valueCoding")) {
4780          this.value = new Coding();
4781          return this.value;
4782        }
4783        else if (name.equals("valueString")) {
4784          this.value = new StringType();
4785          return this.value;
4786        }
4787        else if (name.equals("valueInteger")) {
4788          this.value = new IntegerType();
4789          return this.value;
4790        }
4791        else if (name.equals("valueBoolean")) {
4792          this.value = new BooleanType();
4793          return this.value;
4794        }
4795        else if (name.equals("valueDateTime")) {
4796          this.value = new DateTimeType();
4797          return this.value;
4798        }
4799        else if (name.equals("valueDecimal")) {
4800          this.value = new DecimalType();
4801          return this.value;
4802        }
4803        else if (name.equals("subProperty")) {
4804          return addSubProperty();
4805        }
4806        else
4807          return super.addChild(name);
4808      }
4809
4810      public ConceptPropertyComponent copy() {
4811        ConceptPropertyComponent dst = new ConceptPropertyComponent();
4812        copyValues(dst);
4813        return dst;
4814      }
4815
4816      public void copyValues(ConceptPropertyComponent dst) {
4817        super.copyValues(dst);
4818        dst.code = code == null ? null : code.copy();
4819        dst.value = value == null ? null : value.copy();
4820        if (subProperty != null) {
4821          dst.subProperty = new ArrayList<ConceptSubPropertyComponent>();
4822          for (ConceptSubPropertyComponent i : subProperty)
4823            dst.subProperty.add(i.copy());
4824        };
4825      }
4826
4827      @Override
4828      public boolean equalsDeep(Base other_) {
4829        if (!super.equalsDeep(other_))
4830          return false;
4831        if (!(other_ instanceof ConceptPropertyComponent))
4832          return false;
4833        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4834        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true) && compareDeep(subProperty, o.subProperty, true)
4835          ;
4836      }
4837
4838      @Override
4839      public boolean equalsShallow(Base other_) {
4840        if (!super.equalsShallow(other_))
4841          return false;
4842        if (!(other_ instanceof ConceptPropertyComponent))
4843          return false;
4844        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4845        return compareValues(code, o.code, true);
4846      }
4847
4848      public boolean isEmpty() {
4849        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value, subProperty
4850          );
4851      }
4852
4853  public String fhirType() {
4854    return "ValueSet.expansion.contains.property";
4855
4856  }
4857
4858  }
4859
4860    @Block()
4861    public static class ConceptSubPropertyComponent extends BackboneElement implements IBaseBackboneElement {
4862        /**
4863         * A code that is a reference to ValueSet.expansion.property.code.
4864         */
4865        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4866        @Description(shortDefinition="Reference to ValueSet.expansion.property.code", formalDefinition="A code that is a reference to ValueSet.expansion.property.code." )
4867        protected CodeType code;
4868
4869        /**
4870         * The value of this subproperty.
4871         */
4872        @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)
4873        @Description(shortDefinition="Value of the subproperty for this concept", formalDefinition="The value of this subproperty." )
4874        protected DataType value;
4875
4876        private static final long serialVersionUID = -422546419L;
4877
4878    /**
4879     * Constructor
4880     */
4881      public ConceptSubPropertyComponent() {
4882        super();
4883      }
4884
4885    /**
4886     * Constructor
4887     */
4888      public ConceptSubPropertyComponent(String code, DataType value) {
4889        super();
4890        this.setCode(code);
4891        this.setValue(value);
4892      }
4893
4894        /**
4895         * @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
4896         */
4897        public CodeType getCodeElement() { 
4898          if (this.code == null)
4899            if (Configuration.errorOnAutoCreate())
4900              throw new Error("Attempt to auto-create ConceptSubPropertyComponent.code");
4901            else if (Configuration.doAutoCreate())
4902              this.code = new CodeType(); // bb
4903          return this.code;
4904        }
4905
4906        public boolean hasCodeElement() { 
4907          return this.code != null && !this.code.isEmpty();
4908        }
4909
4910        public boolean hasCode() { 
4911          return this.code != null && !this.code.isEmpty();
4912        }
4913
4914        /**
4915         * @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
4916         */
4917        public ConceptSubPropertyComponent setCodeElement(CodeType value) { 
4918          this.code = value;
4919          return this;
4920        }
4921
4922        /**
4923         * @return A code that is a reference to ValueSet.expansion.property.code.
4924         */
4925        public String getCode() { 
4926          return this.code == null ? null : this.code.getValue();
4927        }
4928
4929        /**
4930         * @param value A code that is a reference to ValueSet.expansion.property.code.
4931         */
4932        public ConceptSubPropertyComponent setCode(String value) { 
4933            if (this.code == null)
4934              this.code = new CodeType();
4935            this.code.setValue(value);
4936          return this;
4937        }
4938
4939        /**
4940         * @return {@link #value} (The value of this subproperty.)
4941         */
4942        public DataType getValue() { 
4943          return this.value;
4944        }
4945
4946        /**
4947         * @return {@link #value} (The value of this subproperty.)
4948         */
4949        public CodeType getValueCodeType() throws FHIRException { 
4950          if (this.value == null)
4951            this.value = new CodeType();
4952          if (!(this.value instanceof CodeType))
4953            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
4954          return (CodeType) this.value;
4955        }
4956
4957        public boolean hasValueCodeType() { 
4958          return this != null && this.value instanceof CodeType;
4959        }
4960
4961        /**
4962         * @return {@link #value} (The value of this subproperty.)
4963         */
4964        public Coding getValueCoding() throws FHIRException { 
4965          if (this.value == null)
4966            this.value = new Coding();
4967          if (!(this.value instanceof Coding))
4968            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
4969          return (Coding) this.value;
4970        }
4971
4972        public boolean hasValueCoding() { 
4973          return this != null && this.value instanceof Coding;
4974        }
4975
4976        /**
4977         * @return {@link #value} (The value of this subproperty.)
4978         */
4979        public StringType getValueStringType() throws FHIRException { 
4980          if (this.value == null)
4981            this.value = new StringType();
4982          if (!(this.value instanceof StringType))
4983            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
4984          return (StringType) this.value;
4985        }
4986
4987        public boolean hasValueStringType() { 
4988          return this != null && this.value instanceof StringType;
4989        }
4990
4991        /**
4992         * @return {@link #value} (The value of this subproperty.)
4993         */
4994        public IntegerType getValueIntegerType() throws FHIRException { 
4995          if (this.value == null)
4996            this.value = new IntegerType();
4997          if (!(this.value instanceof IntegerType))
4998            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
4999          return (IntegerType) this.value;
5000        }
5001
5002        public boolean hasValueIntegerType() { 
5003          return this != null && this.value instanceof IntegerType;
5004        }
5005
5006        /**
5007         * @return {@link #value} (The value of this subproperty.)
5008         */
5009        public BooleanType getValueBooleanType() throws FHIRException { 
5010          if (this.value == null)
5011            this.value = new BooleanType();
5012          if (!(this.value instanceof BooleanType))
5013            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
5014          return (BooleanType) this.value;
5015        }
5016
5017        public boolean hasValueBooleanType() { 
5018          return this != null && this.value instanceof BooleanType;
5019        }
5020
5021        /**
5022         * @return {@link #value} (The value of this subproperty.)
5023         */
5024        public DateTimeType getValueDateTimeType() throws FHIRException { 
5025          if (this.value == null)
5026            this.value = new DateTimeType();
5027          if (!(this.value instanceof DateTimeType))
5028            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
5029          return (DateTimeType) this.value;
5030        }
5031
5032        public boolean hasValueDateTimeType() { 
5033          return this != null && this.value instanceof DateTimeType;
5034        }
5035
5036        /**
5037         * @return {@link #value} (The value of this subproperty.)
5038         */
5039        public DecimalType getValueDecimalType() throws FHIRException { 
5040          if (this.value == null)
5041            this.value = new DecimalType();
5042          if (!(this.value instanceof DecimalType))
5043            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
5044          return (DecimalType) this.value;
5045        }
5046
5047        public boolean hasValueDecimalType() { 
5048          return this != null && this.value instanceof DecimalType;
5049        }
5050
5051        public boolean hasValue() { 
5052          return this.value != null && !this.value.isEmpty();
5053        }
5054
5055        /**
5056         * @param value {@link #value} (The value of this subproperty.)
5057         */
5058        public ConceptSubPropertyComponent setValue(DataType value) { 
5059          if (value != null && !(value instanceof CodeType || value instanceof Coding || value instanceof StringType || value instanceof IntegerType || value instanceof BooleanType || value instanceof DateTimeType || value instanceof DecimalType))
5060            throw new FHIRException("Not the right type for ValueSet.expansion.contains.property.subProperty.value[x]: "+value.fhirType());
5061          this.value = value;
5062          return this;
5063        }
5064
5065        protected void listChildren(List<Property> children) {
5066          super.listChildren(children);
5067          children.add(new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code));
5068          children.add(new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value));
5069        }
5070
5071        @Override
5072        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5073          switch (_hash) {
5074          case 3059181: /*code*/  return new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code);
5075          case -1410166417: /*value[x]*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value);
5076          case 111972721: /*value*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this subproperty.", 0, 1, value);
5077          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of this subproperty.", 0, 1, value);
5078          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of this subproperty.", 0, 1, value);
5079          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of this subproperty.", 0, 1, value);
5080          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of this subproperty.", 0, 1, value);
5081          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of this subproperty.", 0, 1, value);
5082          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of this subproperty.", 0, 1, value);
5083          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of this subproperty.", 0, 1, value);
5084          default: return super.getNamedProperty(_hash, _name, _checkValid);
5085          }
5086
5087        }
5088
5089      @Override
5090      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5091        switch (hash) {
5092        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
5093        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
5094        default: return super.getProperty(hash, name, checkValid);
5095        }
5096
5097      }
5098
5099      @Override
5100      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5101        switch (hash) {
5102        case 3059181: // code
5103          this.code = TypeConvertor.castToCode(value); // CodeType
5104          return value;
5105        case 111972721: // value
5106          this.value = TypeConvertor.castToType(value); // DataType
5107          return value;
5108        default: return super.setProperty(hash, name, value);
5109        }
5110
5111      }
5112
5113      @Override
5114      public Base setProperty(String name, Base value) throws FHIRException {
5115        if (name.equals("code")) {
5116          this.code = TypeConvertor.castToCode(value); // CodeType
5117        } else if (name.equals("value[x]")) {
5118          this.value = TypeConvertor.castToType(value); // DataType
5119        } else
5120          return super.setProperty(name, value);
5121        return value;
5122      }
5123
5124  @Override
5125  public void removeChild(String name, Base value) throws FHIRException {
5126        if (name.equals("code")) {
5127          this.code = null;
5128        } else if (name.equals("value[x]")) {
5129          this.value = null;
5130        } else
5131          super.removeChild(name, value);
5132        
5133      }
5134
5135      @Override
5136      public Base makeProperty(int hash, String name) throws FHIRException {
5137        switch (hash) {
5138        case 3059181:  return getCodeElement();
5139        case -1410166417:  return getValue();
5140        case 111972721:  return getValue();
5141        default: return super.makeProperty(hash, name);
5142        }
5143
5144      }
5145
5146      @Override
5147      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5148        switch (hash) {
5149        case 3059181: /*code*/ return new String[] {"code"};
5150        case 111972721: /*value*/ return new String[] {"code", "Coding", "string", "integer", "boolean", "dateTime", "decimal"};
5151        default: return super.getTypesForProperty(hash, name);
5152        }
5153
5154      }
5155
5156      @Override
5157      public Base addChild(String name) throws FHIRException {
5158        if (name.equals("code")) {
5159          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.expansion.contains.property.subProperty.code");
5160        }
5161        else if (name.equals("valueCode")) {
5162          this.value = new CodeType();
5163          return this.value;
5164        }
5165        else if (name.equals("valueCoding")) {
5166          this.value = new Coding();
5167          return this.value;
5168        }
5169        else if (name.equals("valueString")) {
5170          this.value = new StringType();
5171          return this.value;
5172        }
5173        else if (name.equals("valueInteger")) {
5174          this.value = new IntegerType();
5175          return this.value;
5176        }
5177        else if (name.equals("valueBoolean")) {
5178          this.value = new BooleanType();
5179          return this.value;
5180        }
5181        else if (name.equals("valueDateTime")) {
5182          this.value = new DateTimeType();
5183          return this.value;
5184        }
5185        else if (name.equals("valueDecimal")) {
5186          this.value = new DecimalType();
5187          return this.value;
5188        }
5189        else
5190          return super.addChild(name);
5191      }
5192
5193      public ConceptSubPropertyComponent copy() {
5194        ConceptSubPropertyComponent dst = new ConceptSubPropertyComponent();
5195        copyValues(dst);
5196        return dst;
5197      }
5198
5199      public void copyValues(ConceptSubPropertyComponent dst) {
5200        super.copyValues(dst);
5201        dst.code = code == null ? null : code.copy();
5202        dst.value = value == null ? null : value.copy();
5203      }
5204
5205      @Override
5206      public boolean equalsDeep(Base other_) {
5207        if (!super.equalsDeep(other_))
5208          return false;
5209        if (!(other_ instanceof ConceptSubPropertyComponent))
5210          return false;
5211        ConceptSubPropertyComponent o = (ConceptSubPropertyComponent) other_;
5212        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true);
5213      }
5214
5215      @Override
5216      public boolean equalsShallow(Base other_) {
5217        if (!super.equalsShallow(other_))
5218          return false;
5219        if (!(other_ instanceof ConceptSubPropertyComponent))
5220          return false;
5221        ConceptSubPropertyComponent o = (ConceptSubPropertyComponent) other_;
5222        return compareValues(code, o.code, true);
5223      }
5224
5225      public boolean isEmpty() {
5226        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value);
5227      }
5228
5229  public String fhirType() {
5230    return "ValueSet.expansion.contains.property.subProperty";
5231
5232  }
5233
5234  }
5235
5236    @Block()
5237    public static class ValueSetScopeComponent extends BackboneElement implements IBaseBackboneElement {
5238        /**
5239         * Criteria describing which concepts or codes should be included and why.
5240         */
5241        @Child(name = "inclusionCriteria", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
5242        @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." )
5243        protected StringType inclusionCriteria;
5244
5245        /**
5246         * Criteria describing which concepts or codes should be excluded and why.
5247         */
5248        @Child(name = "exclusionCriteria", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
5249        @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." )
5250        protected StringType exclusionCriteria;
5251
5252        private static final long serialVersionUID = -641434610L;
5253
5254    /**
5255     * Constructor
5256     */
5257      public ValueSetScopeComponent() {
5258        super();
5259      }
5260
5261        /**
5262         * @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
5263         */
5264        public StringType getInclusionCriteriaElement() { 
5265          if (this.inclusionCriteria == null)
5266            if (Configuration.errorOnAutoCreate())
5267              throw new Error("Attempt to auto-create ValueSetScopeComponent.inclusionCriteria");
5268            else if (Configuration.doAutoCreate())
5269              this.inclusionCriteria = new StringType(); // bb
5270          return this.inclusionCriteria;
5271        }
5272
5273        public boolean hasInclusionCriteriaElement() { 
5274          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
5275        }
5276
5277        public boolean hasInclusionCriteria() { 
5278          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
5279        }
5280
5281        /**
5282         * @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
5283         */
5284        public ValueSetScopeComponent setInclusionCriteriaElement(StringType value) { 
5285          this.inclusionCriteria = value;
5286          return this;
5287        }
5288
5289        /**
5290         * @return Criteria describing which concepts or codes should be included and why.
5291         */
5292        public String getInclusionCriteria() { 
5293          return this.inclusionCriteria == null ? null : this.inclusionCriteria.getValue();
5294        }
5295
5296        /**
5297         * @param value Criteria describing which concepts or codes should be included and why.
5298         */
5299        public ValueSetScopeComponent setInclusionCriteria(String value) { 
5300          if (Utilities.noString(value))
5301            this.inclusionCriteria = null;
5302          else {
5303            if (this.inclusionCriteria == null)
5304              this.inclusionCriteria = new StringType();
5305            this.inclusionCriteria.setValue(value);
5306          }
5307          return this;
5308        }
5309
5310        /**
5311         * @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
5312         */
5313        public StringType getExclusionCriteriaElement() { 
5314          if (this.exclusionCriteria == null)
5315            if (Configuration.errorOnAutoCreate())
5316              throw new Error("Attempt to auto-create ValueSetScopeComponent.exclusionCriteria");
5317            else if (Configuration.doAutoCreate())
5318              this.exclusionCriteria = new StringType(); // bb
5319          return this.exclusionCriteria;
5320        }
5321
5322        public boolean hasExclusionCriteriaElement() { 
5323          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
5324        }
5325
5326        public boolean hasExclusionCriteria() { 
5327          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
5328        }
5329
5330        /**
5331         * @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
5332         */
5333        public ValueSetScopeComponent setExclusionCriteriaElement(StringType value) { 
5334          this.exclusionCriteria = value;
5335          return this;
5336        }
5337
5338        /**
5339         * @return Criteria describing which concepts or codes should be excluded and why.
5340         */
5341        public String getExclusionCriteria() { 
5342          return this.exclusionCriteria == null ? null : this.exclusionCriteria.getValue();
5343        }
5344
5345        /**
5346         * @param value Criteria describing which concepts or codes should be excluded and why.
5347         */
5348        public ValueSetScopeComponent setExclusionCriteria(String value) { 
5349          if (Utilities.noString(value))
5350            this.exclusionCriteria = null;
5351          else {
5352            if (this.exclusionCriteria == null)
5353              this.exclusionCriteria = new StringType();
5354            this.exclusionCriteria.setValue(value);
5355          }
5356          return this;
5357        }
5358
5359        protected void listChildren(List<Property> children) {
5360          super.listChildren(children);
5361          children.add(new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria));
5362          children.add(new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria));
5363        }
5364
5365        @Override
5366        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5367          switch (_hash) {
5368          case -1380638565: /*inclusionCriteria*/  return new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria);
5369          case 985682765: /*exclusionCriteria*/  return new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria);
5370          default: return super.getNamedProperty(_hash, _name, _checkValid);
5371          }
5372
5373        }
5374
5375      @Override
5376      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5377        switch (hash) {
5378        case -1380638565: /*inclusionCriteria*/ return this.inclusionCriteria == null ? new Base[0] : new Base[] {this.inclusionCriteria}; // StringType
5379        case 985682765: /*exclusionCriteria*/ return this.exclusionCriteria == null ? new Base[0] : new Base[] {this.exclusionCriteria}; // StringType
5380        default: return super.getProperty(hash, name, checkValid);
5381        }
5382
5383      }
5384
5385      @Override
5386      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5387        switch (hash) {
5388        case -1380638565: // inclusionCriteria
5389          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
5390          return value;
5391        case 985682765: // exclusionCriteria
5392          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
5393          return value;
5394        default: return super.setProperty(hash, name, value);
5395        }
5396
5397      }
5398
5399      @Override
5400      public Base setProperty(String name, Base value) throws FHIRException {
5401        if (name.equals("inclusionCriteria")) {
5402          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
5403        } else if (name.equals("exclusionCriteria")) {
5404          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
5405        } else
5406          return super.setProperty(name, value);
5407        return value;
5408      }
5409
5410  @Override
5411  public void removeChild(String name, Base value) throws FHIRException {
5412        if (name.equals("inclusionCriteria")) {
5413          this.inclusionCriteria = null;
5414        } else if (name.equals("exclusionCriteria")) {
5415          this.exclusionCriteria = null;
5416        } else
5417          super.removeChild(name, value);
5418        
5419      }
5420
5421      @Override
5422      public Base makeProperty(int hash, String name) throws FHIRException {
5423        switch (hash) {
5424        case -1380638565:  return getInclusionCriteriaElement();
5425        case 985682765:  return getExclusionCriteriaElement();
5426        default: return super.makeProperty(hash, name);
5427        }
5428
5429      }
5430
5431      @Override
5432      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5433        switch (hash) {
5434        case -1380638565: /*inclusionCriteria*/ return new String[] {"string"};
5435        case 985682765: /*exclusionCriteria*/ return new String[] {"string"};
5436        default: return super.getTypesForProperty(hash, name);
5437        }
5438
5439      }
5440
5441      @Override
5442      public Base addChild(String name) throws FHIRException {
5443        if (name.equals("inclusionCriteria")) {
5444          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.scope.inclusionCriteria");
5445        }
5446        else if (name.equals("exclusionCriteria")) {
5447          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.scope.exclusionCriteria");
5448        }
5449        else
5450          return super.addChild(name);
5451      }
5452
5453      public ValueSetScopeComponent copy() {
5454        ValueSetScopeComponent dst = new ValueSetScopeComponent();
5455        copyValues(dst);
5456        return dst;
5457      }
5458
5459      public void copyValues(ValueSetScopeComponent dst) {
5460        super.copyValues(dst);
5461        dst.inclusionCriteria = inclusionCriteria == null ? null : inclusionCriteria.copy();
5462        dst.exclusionCriteria = exclusionCriteria == null ? null : exclusionCriteria.copy();
5463      }
5464
5465      @Override
5466      public boolean equalsDeep(Base other_) {
5467        if (!super.equalsDeep(other_))
5468          return false;
5469        if (!(other_ instanceof ValueSetScopeComponent))
5470          return false;
5471        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
5472        return compareDeep(inclusionCriteria, o.inclusionCriteria, true) && compareDeep(exclusionCriteria, o.exclusionCriteria, true)
5473          ;
5474      }
5475
5476      @Override
5477      public boolean equalsShallow(Base other_) {
5478        if (!super.equalsShallow(other_))
5479          return false;
5480        if (!(other_ instanceof ValueSetScopeComponent))
5481          return false;
5482        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
5483        return compareValues(inclusionCriteria, o.inclusionCriteria, true) && compareValues(exclusionCriteria, o.exclusionCriteria, true)
5484          ;
5485      }
5486
5487      public boolean isEmpty() {
5488        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(inclusionCriteria, exclusionCriteria
5489          );
5490      }
5491
5492  public String fhirType() {
5493    return "ValueSet.scope";
5494
5495  }
5496
5497  }
5498
5499    /**
5500     * 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.
5501     */
5502    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
5503    @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." )
5504    protected UriType url;
5505
5506    /**
5507     * 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.
5508     */
5509    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5510    @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." )
5511    protected List<Identifier> identifier;
5512
5513    /**
5514     * 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.
5515     */
5516    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
5517    @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." )
5518    protected StringType version;
5519
5520    /**
5521     * Indicates the mechanism used to compare versions to determine which ValueSet is more current.
5522     */
5523    @Child(name = "versionAlgorithm", type = {StringType.class, Coding.class}, order=3, min=0, max=1, modifier=false, summary=true)
5524    @Description(shortDefinition="How to compare versions", formalDefinition="Indicates the mechanism used to compare versions to determine which ValueSet is more current." )
5525    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/version-algorithm")
5526    protected DataType versionAlgorithm;
5527
5528    /**
5529     * 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.
5530     */
5531    @Child(name = "name", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
5532    @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." )
5533    protected StringType name;
5534
5535    /**
5536     * A short, descriptive, user-friendly title for the value set.
5537     */
5538    @Child(name = "title", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=true)
5539    @Description(shortDefinition="Name for this value set (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the value set." )
5540    protected StringType title;
5541
5542    /**
5543     * 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.
5544     */
5545    @Child(name = "status", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
5546    @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." )
5547    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
5548    protected Enumeration<PublicationStatus> status;
5549
5550    /**
5551     * 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.
5552     */
5553    @Child(name = "experimental", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
5554    @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." )
5555    protected BooleanType experimental;
5556
5557    /**
5558     * The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5559     */
5560    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
5561    @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." )
5562    protected DateTimeType date;
5563
5564    /**
5565     * The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
5566     */
5567    @Child(name = "publisher", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
5568    @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." )
5569    protected StringType publisher;
5570
5571    /**
5572     * Contact details to assist a user in finding and communicating with the publisher.
5573     */
5574    @Child(name = "contact", type = {ContactDetail.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5575    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
5576    protected List<ContactDetail> contact;
5577
5578    /**
5579     * 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.
5580     */
5581    @Child(name = "description", type = {MarkdownType.class}, order=11, min=0, max=1, modifier=false, summary=false)
5582    @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." )
5583    protected MarkdownType description;
5584
5585    /**
5586     * 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.
5587     */
5588    @Child(name = "useContext", type = {UsageContext.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5589    @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." )
5590    protected List<UsageContext> useContext;
5591
5592    /**
5593     * A legal or geographic region in which the value set is intended to be used.
5594     */
5595    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
5596    @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." )
5597    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
5598    protected List<CodeableConcept> jurisdiction;
5599
5600    /**
5601     * If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
5602     */
5603    @Child(name = "immutable", type = {BooleanType.class}, order=14, min=0, max=1, modifier=false, summary=true)
5604    @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." )
5605    protected BooleanType immutable;
5606
5607    /**
5608     * Explanation of why this value set is needed and why it has been designed as it has.
5609     */
5610    @Child(name = "purpose", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
5611    @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." )
5612    protected MarkdownType purpose;
5613
5614    /**
5615     * 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.
5616     */
5617    @Child(name = "copyright", type = {MarkdownType.class}, order=16, min=0, max=1, modifier=false, summary=false)
5618    @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." )
5619    protected MarkdownType copyright;
5620
5621    /**
5622     * 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').
5623     */
5624    @Child(name = "copyrightLabel", type = {StringType.class}, order=17, min=0, max=1, modifier=false, summary=false)
5625    @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')." )
5626    protected StringType copyrightLabel;
5627
5628    /**
5629     * The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
5630     */
5631    @Child(name = "approvalDate", type = {DateType.class}, order=18, min=0, max=1, modifier=false, summary=false)
5632    @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." )
5633    protected DateType approvalDate;
5634
5635    /**
5636     * The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
5637     */
5638    @Child(name = "lastReviewDate", type = {DateType.class}, order=19, min=0, max=1, modifier=false, summary=false)
5639    @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." )
5640    protected DateType lastReviewDate;
5641
5642    /**
5643     * The period during which the ValueSet content was or is planned to be in active use.
5644     */
5645    @Child(name = "effectivePeriod", type = {Period.class}, order=20, min=0, max=1, modifier=false, summary=true)
5646    @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." )
5647    protected Period effectivePeriod;
5648
5649    /**
5650     * 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.
5651     */
5652    @Child(name = "topic", type = {CodeableConcept.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5653    @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." )
5654    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/definition-topic")
5655    protected List<CodeableConcept> topic;
5656
5657    /**
5658     * An individiual or organization primarily involved in the creation and maintenance of the ValueSet.
5659     */
5660    @Child(name = "author", type = {ContactDetail.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5661    @Description(shortDefinition="Who authored the ValueSet", formalDefinition="An individiual or organization primarily involved in the creation and maintenance of the ValueSet." )
5662    protected List<ContactDetail> author;
5663
5664    /**
5665     * An individual or organization primarily responsible for internal coherence of the ValueSet.
5666     */
5667    @Child(name = "editor", type = {ContactDetail.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5668    @Description(shortDefinition="Who edited the ValueSet", formalDefinition="An individual or organization primarily responsible for internal coherence of the ValueSet." )
5669    protected List<ContactDetail> editor;
5670
5671    /**
5672     * An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.
5673     */
5674    @Child(name = "reviewer", type = {ContactDetail.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5675    @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." )
5676    protected List<ContactDetail> reviewer;
5677
5678    /**
5679     * An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.
5680     */
5681    @Child(name = "endorser", type = {ContactDetail.class}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5682    @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." )
5683    protected List<ContactDetail> endorser;
5684
5685    /**
5686     * Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.
5687     */
5688    @Child(name = "relatedArtifact", type = {RelatedArtifact.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5689    @Description(shortDefinition="Additional documentation, citations, etc", formalDefinition="Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts." )
5690    protected List<RelatedArtifact> relatedArtifact;
5691
5692    /**
5693     * 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).
5694     */
5695    @Child(name = "compose", type = {}, order=27, min=0, max=1, modifier=false, summary=false)
5696    @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)." )
5697    protected ValueSetComposeComponent compose;
5698
5699    /**
5700     * 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.
5701     */
5702    @Child(name = "expansion", type = {}, order=28, min=0, max=1, modifier=false, summary=false)
5703    @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." )
5704    protected ValueSetExpansionComponent expansion;
5705
5706    /**
5707     * Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.
5708     */
5709    @Child(name = "scope", type = {}, order=29, min=0, max=1, modifier=false, summary=false)
5710    @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." )
5711    protected ValueSetScopeComponent scope;
5712
5713    private static final long serialVersionUID = -1050676231L;
5714
5715  /**
5716   * Constructor
5717   */
5718    public ValueSet() {
5719      super();
5720    }
5721
5722  /**
5723   * Constructor
5724   */
5725    public ValueSet(PublicationStatus status) {
5726      super();
5727      this.setStatus(status);
5728    }
5729
5730    /**
5731     * @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
5732     */
5733    public UriType getUrlElement() { 
5734      if (this.url == null)
5735        if (Configuration.errorOnAutoCreate())
5736          throw new Error("Attempt to auto-create ValueSet.url");
5737        else if (Configuration.doAutoCreate())
5738          this.url = new UriType(); // bb
5739      return this.url;
5740    }
5741
5742    public boolean hasUrlElement() { 
5743      return this.url != null && !this.url.isEmpty();
5744    }
5745
5746    public boolean hasUrl() { 
5747      return this.url != null && !this.url.isEmpty();
5748    }
5749
5750    /**
5751     * @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
5752     */
5753    public ValueSet setUrlElement(UriType value) { 
5754      this.url = value;
5755      return this;
5756    }
5757
5758    /**
5759     * @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.
5760     */
5761    public String getUrl() { 
5762      return this.url == null ? null : this.url.getValue();
5763    }
5764
5765    /**
5766     * @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.
5767     */
5768    public ValueSet setUrl(String value) { 
5769      if (Utilities.noString(value))
5770        this.url = null;
5771      else {
5772        if (this.url == null)
5773          this.url = new UriType();
5774        this.url.setValue(value);
5775      }
5776      return this;
5777    }
5778
5779    /**
5780     * @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.)
5781     */
5782    public List<Identifier> getIdentifier() { 
5783      if (this.identifier == null)
5784        this.identifier = new ArrayList<Identifier>();
5785      return this.identifier;
5786    }
5787
5788    /**
5789     * @return Returns a reference to <code>this</code> for easy method chaining
5790     */
5791    public ValueSet setIdentifier(List<Identifier> theIdentifier) { 
5792      this.identifier = theIdentifier;
5793      return this;
5794    }
5795
5796    public boolean hasIdentifier() { 
5797      if (this.identifier == null)
5798        return false;
5799      for (Identifier item : this.identifier)
5800        if (!item.isEmpty())
5801          return true;
5802      return false;
5803    }
5804
5805    public Identifier addIdentifier() { //3
5806      Identifier t = new Identifier();
5807      if (this.identifier == null)
5808        this.identifier = new ArrayList<Identifier>();
5809      this.identifier.add(t);
5810      return t;
5811    }
5812
5813    public ValueSet addIdentifier(Identifier t) { //3
5814      if (t == null)
5815        return this;
5816      if (this.identifier == null)
5817        this.identifier = new ArrayList<Identifier>();
5818      this.identifier.add(t);
5819      return this;
5820    }
5821
5822    /**
5823     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
5824     */
5825    public Identifier getIdentifierFirstRep() { 
5826      if (getIdentifier().isEmpty()) {
5827        addIdentifier();
5828      }
5829      return getIdentifier().get(0);
5830    }
5831
5832    /**
5833     * @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
5834     */
5835    public StringType getVersionElement() { 
5836      if (this.version == null)
5837        if (Configuration.errorOnAutoCreate())
5838          throw new Error("Attempt to auto-create ValueSet.version");
5839        else if (Configuration.doAutoCreate())
5840          this.version = new StringType(); // bb
5841      return this.version;
5842    }
5843
5844    public boolean hasVersionElement() { 
5845      return this.version != null && !this.version.isEmpty();
5846    }
5847
5848    public boolean hasVersion() { 
5849      return this.version != null && !this.version.isEmpty();
5850    }
5851
5852    /**
5853     * @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
5854     */
5855    public ValueSet setVersionElement(StringType value) { 
5856      this.version = value;
5857      return this;
5858    }
5859
5860    /**
5861     * @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.
5862     */
5863    public String getVersion() { 
5864      return this.version == null ? null : this.version.getValue();
5865    }
5866
5867    /**
5868     * @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.
5869     */
5870    public ValueSet setVersion(String value) { 
5871      if (Utilities.noString(value))
5872        this.version = null;
5873      else {
5874        if (this.version == null)
5875          this.version = new StringType();
5876        this.version.setValue(value);
5877      }
5878      return this;
5879    }
5880
5881    /**
5882     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5883     */
5884    public DataType getVersionAlgorithm() { 
5885      return this.versionAlgorithm;
5886    }
5887
5888    /**
5889     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5890     */
5891    public StringType getVersionAlgorithmStringType() throws FHIRException { 
5892      if (this.versionAlgorithm == null)
5893        this.versionAlgorithm = new StringType();
5894      if (!(this.versionAlgorithm instanceof StringType))
5895        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
5896      return (StringType) this.versionAlgorithm;
5897    }
5898
5899    public boolean hasVersionAlgorithmStringType() { 
5900      return this != null && this.versionAlgorithm instanceof StringType;
5901    }
5902
5903    /**
5904     * @return {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5905     */
5906    public Coding getVersionAlgorithmCoding() throws FHIRException { 
5907      if (this.versionAlgorithm == null)
5908        this.versionAlgorithm = new Coding();
5909      if (!(this.versionAlgorithm instanceof Coding))
5910        throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.versionAlgorithm.getClass().getName()+" was encountered");
5911      return (Coding) this.versionAlgorithm;
5912    }
5913
5914    public boolean hasVersionAlgorithmCoding() { 
5915      return this != null && this.versionAlgorithm instanceof Coding;
5916    }
5917
5918    public boolean hasVersionAlgorithm() { 
5919      return this.versionAlgorithm != null && !this.versionAlgorithm.isEmpty();
5920    }
5921
5922    /**
5923     * @param value {@link #versionAlgorithm} (Indicates the mechanism used to compare versions to determine which ValueSet is more current.)
5924     */
5925    public ValueSet setVersionAlgorithm(DataType value) { 
5926      if (value != null && !(value instanceof StringType || value instanceof Coding))
5927        throw new FHIRException("Not the right type for ValueSet.versionAlgorithm[x]: "+value.fhirType());
5928      this.versionAlgorithm = value;
5929      return this;
5930    }
5931
5932    /**
5933     * @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
5934     */
5935    public StringType getNameElement() { 
5936      if (this.name == null)
5937        if (Configuration.errorOnAutoCreate())
5938          throw new Error("Attempt to auto-create ValueSet.name");
5939        else if (Configuration.doAutoCreate())
5940          this.name = new StringType(); // bb
5941      return this.name;
5942    }
5943
5944    public boolean hasNameElement() { 
5945      return this.name != null && !this.name.isEmpty();
5946    }
5947
5948    public boolean hasName() { 
5949      return this.name != null && !this.name.isEmpty();
5950    }
5951
5952    /**
5953     * @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
5954     */
5955    public ValueSet setNameElement(StringType value) { 
5956      this.name = value;
5957      return this;
5958    }
5959
5960    /**
5961     * @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.
5962     */
5963    public String getName() { 
5964      return this.name == null ? null : this.name.getValue();
5965    }
5966
5967    /**
5968     * @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.
5969     */
5970    public ValueSet setName(String value) { 
5971      if (Utilities.noString(value))
5972        this.name = null;
5973      else {
5974        if (this.name == null)
5975          this.name = new StringType();
5976        this.name.setValue(value);
5977      }
5978      return this;
5979    }
5980
5981    /**
5982     * @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
5983     */
5984    public StringType getTitleElement() { 
5985      if (this.title == null)
5986        if (Configuration.errorOnAutoCreate())
5987          throw new Error("Attempt to auto-create ValueSet.title");
5988        else if (Configuration.doAutoCreate())
5989          this.title = new StringType(); // bb
5990      return this.title;
5991    }
5992
5993    public boolean hasTitleElement() { 
5994      return this.title != null && !this.title.isEmpty();
5995    }
5996
5997    public boolean hasTitle() { 
5998      return this.title != null && !this.title.isEmpty();
5999    }
6000
6001    /**
6002     * @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
6003     */
6004    public ValueSet setTitleElement(StringType value) { 
6005      this.title = value;
6006      return this;
6007    }
6008
6009    /**
6010     * @return A short, descriptive, user-friendly title for the value set.
6011     */
6012    public String getTitle() { 
6013      return this.title == null ? null : this.title.getValue();
6014    }
6015
6016    /**
6017     * @param value A short, descriptive, user-friendly title for the value set.
6018     */
6019    public ValueSet setTitle(String value) { 
6020      if (Utilities.noString(value))
6021        this.title = null;
6022      else {
6023        if (this.title == null)
6024          this.title = new StringType();
6025        this.title.setValue(value);
6026      }
6027      return this;
6028    }
6029
6030    /**
6031     * @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
6032     */
6033    public Enumeration<PublicationStatus> getStatusElement() { 
6034      if (this.status == null)
6035        if (Configuration.errorOnAutoCreate())
6036          throw new Error("Attempt to auto-create ValueSet.status");
6037        else if (Configuration.doAutoCreate())
6038          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
6039      return this.status;
6040    }
6041
6042    public boolean hasStatusElement() { 
6043      return this.status != null && !this.status.isEmpty();
6044    }
6045
6046    public boolean hasStatus() { 
6047      return this.status != null && !this.status.isEmpty();
6048    }
6049
6050    /**
6051     * @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
6052     */
6053    public ValueSet setStatusElement(Enumeration<PublicationStatus> value) { 
6054      this.status = value;
6055      return this;
6056    }
6057
6058    /**
6059     * @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.
6060     */
6061    public PublicationStatus getStatus() { 
6062      return this.status == null ? null : this.status.getValue();
6063    }
6064
6065    /**
6066     * @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.
6067     */
6068    public ValueSet setStatus(PublicationStatus value) { 
6069        if (this.status == null)
6070          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
6071        this.status.setValue(value);
6072      return this;
6073    }
6074
6075    /**
6076     * @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
6077     */
6078    public BooleanType getExperimentalElement() { 
6079      if (this.experimental == null)
6080        if (Configuration.errorOnAutoCreate())
6081          throw new Error("Attempt to auto-create ValueSet.experimental");
6082        else if (Configuration.doAutoCreate())
6083          this.experimental = new BooleanType(); // bb
6084      return this.experimental;
6085    }
6086
6087    public boolean hasExperimentalElement() { 
6088      return this.experimental != null && !this.experimental.isEmpty();
6089    }
6090
6091    public boolean hasExperimental() { 
6092      return this.experimental != null && !this.experimental.isEmpty();
6093    }
6094
6095    /**
6096     * @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
6097     */
6098    public ValueSet setExperimentalElement(BooleanType value) { 
6099      this.experimental = value;
6100      return this;
6101    }
6102
6103    /**
6104     * @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.
6105     */
6106    public boolean getExperimental() { 
6107      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
6108    }
6109
6110    /**
6111     * @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.
6112     */
6113    public ValueSet setExperimental(boolean value) { 
6114        if (this.experimental == null)
6115          this.experimental = new BooleanType();
6116        this.experimental.setValue(value);
6117      return this;
6118    }
6119
6120    /**
6121     * @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
6122     */
6123    public DateTimeType getDateElement() { 
6124      if (this.date == null)
6125        if (Configuration.errorOnAutoCreate())
6126          throw new Error("Attempt to auto-create ValueSet.date");
6127        else if (Configuration.doAutoCreate())
6128          this.date = new DateTimeType(); // bb
6129      return this.date;
6130    }
6131
6132    public boolean hasDateElement() { 
6133      return this.date != null && !this.date.isEmpty();
6134    }
6135
6136    public boolean hasDate() { 
6137      return this.date != null && !this.date.isEmpty();
6138    }
6139
6140    /**
6141     * @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
6142     */
6143    public ValueSet setDateElement(DateTimeType value) { 
6144      this.date = value;
6145      return this;
6146    }
6147
6148    /**
6149     * @return The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
6150     */
6151    public Date getDate() { 
6152      return this.date == null ? null : this.date.getValue();
6153    }
6154
6155    /**
6156     * @param value The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
6157     */
6158    public ValueSet setDate(Date value) { 
6159      if (value == null)
6160        this.date = null;
6161      else {
6162        if (this.date == null)
6163          this.date = new DateTimeType();
6164        this.date.setValue(value);
6165      }
6166      return this;
6167    }
6168
6169    /**
6170     * @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
6171     */
6172    public StringType getPublisherElement() { 
6173      if (this.publisher == null)
6174        if (Configuration.errorOnAutoCreate())
6175          throw new Error("Attempt to auto-create ValueSet.publisher");
6176        else if (Configuration.doAutoCreate())
6177          this.publisher = new StringType(); // bb
6178      return this.publisher;
6179    }
6180
6181    public boolean hasPublisherElement() { 
6182      return this.publisher != null && !this.publisher.isEmpty();
6183    }
6184
6185    public boolean hasPublisher() { 
6186      return this.publisher != null && !this.publisher.isEmpty();
6187    }
6188
6189    /**
6190     * @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
6191     */
6192    public ValueSet setPublisherElement(StringType value) { 
6193      this.publisher = value;
6194      return this;
6195    }
6196
6197    /**
6198     * @return The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
6199     */
6200    public String getPublisher() { 
6201      return this.publisher == null ? null : this.publisher.getValue();
6202    }
6203
6204    /**
6205     * @param value The name of the organization or individual responsible for the release and ongoing maintenance of the value set.
6206     */
6207    public ValueSet setPublisher(String value) { 
6208      if (Utilities.noString(value))
6209        this.publisher = null;
6210      else {
6211        if (this.publisher == null)
6212          this.publisher = new StringType();
6213        this.publisher.setValue(value);
6214      }
6215      return this;
6216    }
6217
6218    /**
6219     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
6220     */
6221    public List<ContactDetail> getContact() { 
6222      if (this.contact == null)
6223        this.contact = new ArrayList<ContactDetail>();
6224      return this.contact;
6225    }
6226
6227    /**
6228     * @return Returns a reference to <code>this</code> for easy method chaining
6229     */
6230    public ValueSet setContact(List<ContactDetail> theContact) { 
6231      this.contact = theContact;
6232      return this;
6233    }
6234
6235    public boolean hasContact() { 
6236      if (this.contact == null)
6237        return false;
6238      for (ContactDetail item : this.contact)
6239        if (!item.isEmpty())
6240          return true;
6241      return false;
6242    }
6243
6244    public ContactDetail addContact() { //3
6245      ContactDetail t = new ContactDetail();
6246      if (this.contact == null)
6247        this.contact = new ArrayList<ContactDetail>();
6248      this.contact.add(t);
6249      return t;
6250    }
6251
6252    public ValueSet addContact(ContactDetail t) { //3
6253      if (t == null)
6254        return this;
6255      if (this.contact == null)
6256        this.contact = new ArrayList<ContactDetail>();
6257      this.contact.add(t);
6258      return this;
6259    }
6260
6261    /**
6262     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
6263     */
6264    public ContactDetail getContactFirstRep() { 
6265      if (getContact().isEmpty()) {
6266        addContact();
6267      }
6268      return getContact().get(0);
6269    }
6270
6271    /**
6272     * @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
6273     */
6274    public MarkdownType getDescriptionElement() { 
6275      if (this.description == null)
6276        if (Configuration.errorOnAutoCreate())
6277          throw new Error("Attempt to auto-create ValueSet.description");
6278        else if (Configuration.doAutoCreate())
6279          this.description = new MarkdownType(); // bb
6280      return this.description;
6281    }
6282
6283    public boolean hasDescriptionElement() { 
6284      return this.description != null && !this.description.isEmpty();
6285    }
6286
6287    public boolean hasDescription() { 
6288      return this.description != null && !this.description.isEmpty();
6289    }
6290
6291    /**
6292     * @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
6293     */
6294    public ValueSet setDescriptionElement(MarkdownType value) { 
6295      this.description = value;
6296      return this;
6297    }
6298
6299    /**
6300     * @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.
6301     */
6302    public String getDescription() { 
6303      return this.description == null ? null : this.description.getValue();
6304    }
6305
6306    /**
6307     * @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.
6308     */
6309    public ValueSet setDescription(String value) { 
6310      if (Utilities.noString(value))
6311        this.description = null;
6312      else {
6313        if (this.description == null)
6314          this.description = new MarkdownType();
6315        this.description.setValue(value);
6316      }
6317      return this;
6318    }
6319
6320    /**
6321     * @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.)
6322     */
6323    public List<UsageContext> getUseContext() { 
6324      if (this.useContext == null)
6325        this.useContext = new ArrayList<UsageContext>();
6326      return this.useContext;
6327    }
6328
6329    /**
6330     * @return Returns a reference to <code>this</code> for easy method chaining
6331     */
6332    public ValueSet setUseContext(List<UsageContext> theUseContext) { 
6333      this.useContext = theUseContext;
6334      return this;
6335    }
6336
6337    public boolean hasUseContext() { 
6338      if (this.useContext == null)
6339        return false;
6340      for (UsageContext item : this.useContext)
6341        if (!item.isEmpty())
6342          return true;
6343      return false;
6344    }
6345
6346    public UsageContext addUseContext() { //3
6347      UsageContext t = new UsageContext();
6348      if (this.useContext == null)
6349        this.useContext = new ArrayList<UsageContext>();
6350      this.useContext.add(t);
6351      return t;
6352    }
6353
6354    public ValueSet addUseContext(UsageContext t) { //3
6355      if (t == null)
6356        return this;
6357      if (this.useContext == null)
6358        this.useContext = new ArrayList<UsageContext>();
6359      this.useContext.add(t);
6360      return this;
6361    }
6362
6363    /**
6364     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
6365     */
6366    public UsageContext getUseContextFirstRep() { 
6367      if (getUseContext().isEmpty()) {
6368        addUseContext();
6369      }
6370      return getUseContext().get(0);
6371    }
6372
6373    /**
6374     * @return {@link #jurisdiction} (A legal or geographic region in which the value set is intended to be used.)
6375     */
6376    public List<CodeableConcept> getJurisdiction() { 
6377      if (this.jurisdiction == null)
6378        this.jurisdiction = new ArrayList<CodeableConcept>();
6379      return this.jurisdiction;
6380    }
6381
6382    /**
6383     * @return Returns a reference to <code>this</code> for easy method chaining
6384     */
6385    public ValueSet setJurisdiction(List<CodeableConcept> theJurisdiction) { 
6386      this.jurisdiction = theJurisdiction;
6387      return this;
6388    }
6389
6390    public boolean hasJurisdiction() { 
6391      if (this.jurisdiction == null)
6392        return false;
6393      for (CodeableConcept item : this.jurisdiction)
6394        if (!item.isEmpty())
6395          return true;
6396      return false;
6397    }
6398
6399    public CodeableConcept addJurisdiction() { //3
6400      CodeableConcept t = new CodeableConcept();
6401      if (this.jurisdiction == null)
6402        this.jurisdiction = new ArrayList<CodeableConcept>();
6403      this.jurisdiction.add(t);
6404      return t;
6405    }
6406
6407    public ValueSet addJurisdiction(CodeableConcept t) { //3
6408      if (t == null)
6409        return this;
6410      if (this.jurisdiction == null)
6411        this.jurisdiction = new ArrayList<CodeableConcept>();
6412      this.jurisdiction.add(t);
6413      return this;
6414    }
6415
6416    /**
6417     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
6418     */
6419    public CodeableConcept getJurisdictionFirstRep() { 
6420      if (getJurisdiction().isEmpty()) {
6421        addJurisdiction();
6422      }
6423      return getJurisdiction().get(0);
6424    }
6425
6426    /**
6427     * @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
6428     */
6429    public BooleanType getImmutableElement() { 
6430      if (this.immutable == null)
6431        if (Configuration.errorOnAutoCreate())
6432          throw new Error("Attempt to auto-create ValueSet.immutable");
6433        else if (Configuration.doAutoCreate())
6434          this.immutable = new BooleanType(); // bb
6435      return this.immutable;
6436    }
6437
6438    public boolean hasImmutableElement() { 
6439      return this.immutable != null && !this.immutable.isEmpty();
6440    }
6441
6442    public boolean hasImmutable() { 
6443      return this.immutable != null && !this.immutable.isEmpty();
6444    }
6445
6446    /**
6447     * @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
6448     */
6449    public ValueSet setImmutableElement(BooleanType value) { 
6450      this.immutable = value;
6451      return this;
6452    }
6453
6454    /**
6455     * @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.
6456     */
6457    public boolean getImmutable() { 
6458      return this.immutable == null || this.immutable.isEmpty() ? false : this.immutable.getValue();
6459    }
6460
6461    /**
6462     * @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.
6463     */
6464    public ValueSet setImmutable(boolean value) { 
6465        if (this.immutable == null)
6466          this.immutable = new BooleanType();
6467        this.immutable.setValue(value);
6468      return this;
6469    }
6470
6471    /**
6472     * @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
6473     */
6474    public MarkdownType getPurposeElement() { 
6475      if (this.purpose == null)
6476        if (Configuration.errorOnAutoCreate())
6477          throw new Error("Attempt to auto-create ValueSet.purpose");
6478        else if (Configuration.doAutoCreate())
6479          this.purpose = new MarkdownType(); // bb
6480      return this.purpose;
6481    }
6482
6483    public boolean hasPurposeElement() { 
6484      return this.purpose != null && !this.purpose.isEmpty();
6485    }
6486
6487    public boolean hasPurpose() { 
6488      return this.purpose != null && !this.purpose.isEmpty();
6489    }
6490
6491    /**
6492     * @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
6493     */
6494    public ValueSet setPurposeElement(MarkdownType value) { 
6495      this.purpose = value;
6496      return this;
6497    }
6498
6499    /**
6500     * @return Explanation of why this value set is needed and why it has been designed as it has.
6501     */
6502    public String getPurpose() { 
6503      return this.purpose == null ? null : this.purpose.getValue();
6504    }
6505
6506    /**
6507     * @param value Explanation of why this value set is needed and why it has been designed as it has.
6508     */
6509    public ValueSet setPurpose(String value) { 
6510      if (Utilities.noString(value))
6511        this.purpose = null;
6512      else {
6513        if (this.purpose == null)
6514          this.purpose = new MarkdownType();
6515        this.purpose.setValue(value);
6516      }
6517      return this;
6518    }
6519
6520    /**
6521     * @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
6522     */
6523    public MarkdownType getCopyrightElement() { 
6524      if (this.copyright == null)
6525        if (Configuration.errorOnAutoCreate())
6526          throw new Error("Attempt to auto-create ValueSet.copyright");
6527        else if (Configuration.doAutoCreate())
6528          this.copyright = new MarkdownType(); // bb
6529      return this.copyright;
6530    }
6531
6532    public boolean hasCopyrightElement() { 
6533      return this.copyright != null && !this.copyright.isEmpty();
6534    }
6535
6536    public boolean hasCopyright() { 
6537      return this.copyright != null && !this.copyright.isEmpty();
6538    }
6539
6540    /**
6541     * @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
6542     */
6543    public ValueSet setCopyrightElement(MarkdownType value) { 
6544      this.copyright = value;
6545      return this;
6546    }
6547
6548    /**
6549     * @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.
6550     */
6551    public String getCopyright() { 
6552      return this.copyright == null ? null : this.copyright.getValue();
6553    }
6554
6555    /**
6556     * @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.
6557     */
6558    public ValueSet setCopyright(String value) { 
6559      if (Utilities.noString(value))
6560        this.copyright = null;
6561      else {
6562        if (this.copyright == null)
6563          this.copyright = new MarkdownType();
6564        this.copyright.setValue(value);
6565      }
6566      return this;
6567    }
6568
6569    /**
6570     * @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
6571     */
6572    public StringType getCopyrightLabelElement() { 
6573      if (this.copyrightLabel == null)
6574        if (Configuration.errorOnAutoCreate())
6575          throw new Error("Attempt to auto-create ValueSet.copyrightLabel");
6576        else if (Configuration.doAutoCreate())
6577          this.copyrightLabel = new StringType(); // bb
6578      return this.copyrightLabel;
6579    }
6580
6581    public boolean hasCopyrightLabelElement() { 
6582      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
6583    }
6584
6585    public boolean hasCopyrightLabel() { 
6586      return this.copyrightLabel != null && !this.copyrightLabel.isEmpty();
6587    }
6588
6589    /**
6590     * @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
6591     */
6592    public ValueSet setCopyrightLabelElement(StringType value) { 
6593      this.copyrightLabel = value;
6594      return this;
6595    }
6596
6597    /**
6598     * @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').
6599     */
6600    public String getCopyrightLabel() { 
6601      return this.copyrightLabel == null ? null : this.copyrightLabel.getValue();
6602    }
6603
6604    /**
6605     * @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').
6606     */
6607    public ValueSet setCopyrightLabel(String value) { 
6608      if (Utilities.noString(value))
6609        this.copyrightLabel = null;
6610      else {
6611        if (this.copyrightLabel == null)
6612          this.copyrightLabel = new StringType();
6613        this.copyrightLabel.setValue(value);
6614      }
6615      return this;
6616    }
6617
6618    /**
6619     * @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
6620     */
6621    public DateType getApprovalDateElement() { 
6622      if (this.approvalDate == null)
6623        if (Configuration.errorOnAutoCreate())
6624          throw new Error("Attempt to auto-create ValueSet.approvalDate");
6625        else if (Configuration.doAutoCreate())
6626          this.approvalDate = new DateType(); // bb
6627      return this.approvalDate;
6628    }
6629
6630    public boolean hasApprovalDateElement() { 
6631      return this.approvalDate != null && !this.approvalDate.isEmpty();
6632    }
6633
6634    public boolean hasApprovalDate() { 
6635      return this.approvalDate != null && !this.approvalDate.isEmpty();
6636    }
6637
6638    /**
6639     * @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
6640     */
6641    public ValueSet setApprovalDateElement(DateType value) { 
6642      this.approvalDate = value;
6643      return this;
6644    }
6645
6646    /**
6647     * @return The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.
6648     */
6649    public Date getApprovalDate() { 
6650      return this.approvalDate == null ? null : this.approvalDate.getValue();
6651    }
6652
6653    /**
6654     * @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.
6655     */
6656    public ValueSet setApprovalDate(Date value) { 
6657      if (value == null)
6658        this.approvalDate = null;
6659      else {
6660        if (this.approvalDate == null)
6661          this.approvalDate = new DateType();
6662        this.approvalDate.setValue(value);
6663      }
6664      return this;
6665    }
6666
6667    /**
6668     * @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
6669     */
6670    public DateType getLastReviewDateElement() { 
6671      if (this.lastReviewDate == null)
6672        if (Configuration.errorOnAutoCreate())
6673          throw new Error("Attempt to auto-create ValueSet.lastReviewDate");
6674        else if (Configuration.doAutoCreate())
6675          this.lastReviewDate = new DateType(); // bb
6676      return this.lastReviewDate;
6677    }
6678
6679    public boolean hasLastReviewDateElement() { 
6680      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
6681    }
6682
6683    public boolean hasLastReviewDate() { 
6684      return this.lastReviewDate != null && !this.lastReviewDate.isEmpty();
6685    }
6686
6687    /**
6688     * @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
6689     */
6690    public ValueSet setLastReviewDateElement(DateType value) { 
6691      this.lastReviewDate = value;
6692      return this;
6693    }
6694
6695    /**
6696     * @return The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.
6697     */
6698    public Date getLastReviewDate() { 
6699      return this.lastReviewDate == null ? null : this.lastReviewDate.getValue();
6700    }
6701
6702    /**
6703     * @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.
6704     */
6705    public ValueSet setLastReviewDate(Date value) { 
6706      if (value == null)
6707        this.lastReviewDate = null;
6708      else {
6709        if (this.lastReviewDate == null)
6710          this.lastReviewDate = new DateType();
6711        this.lastReviewDate.setValue(value);
6712      }
6713      return this;
6714    }
6715
6716    /**
6717     * @return {@link #effectivePeriod} (The period during which the ValueSet content was or is planned to be in active use.)
6718     */
6719    public Period getEffectivePeriod() { 
6720      if (this.effectivePeriod == null)
6721        if (Configuration.errorOnAutoCreate())
6722          throw new Error("Attempt to auto-create ValueSet.effectivePeriod");
6723        else if (Configuration.doAutoCreate())
6724          this.effectivePeriod = new Period(); // cc
6725      return this.effectivePeriod;
6726    }
6727
6728    public boolean hasEffectivePeriod() { 
6729      return this.effectivePeriod != null && !this.effectivePeriod.isEmpty();
6730    }
6731
6732    /**
6733     * @param value {@link #effectivePeriod} (The period during which the ValueSet content was or is planned to be in active use.)
6734     */
6735    public ValueSet setEffectivePeriod(Period value) { 
6736      this.effectivePeriod = value;
6737      return this;
6738    }
6739
6740    /**
6741     * @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.)
6742     */
6743    public List<CodeableConcept> getTopic() { 
6744      if (this.topic == null)
6745        this.topic = new ArrayList<CodeableConcept>();
6746      return this.topic;
6747    }
6748
6749    /**
6750     * @return Returns a reference to <code>this</code> for easy method chaining
6751     */
6752    public ValueSet setTopic(List<CodeableConcept> theTopic) { 
6753      this.topic = theTopic;
6754      return this;
6755    }
6756
6757    public boolean hasTopic() { 
6758      if (this.topic == null)
6759        return false;
6760      for (CodeableConcept item : this.topic)
6761        if (!item.isEmpty())
6762          return true;
6763      return false;
6764    }
6765
6766    public CodeableConcept addTopic() { //3
6767      CodeableConcept t = new CodeableConcept();
6768      if (this.topic == null)
6769        this.topic = new ArrayList<CodeableConcept>();
6770      this.topic.add(t);
6771      return t;
6772    }
6773
6774    public ValueSet addTopic(CodeableConcept t) { //3
6775      if (t == null)
6776        return this;
6777      if (this.topic == null)
6778        this.topic = new ArrayList<CodeableConcept>();
6779      this.topic.add(t);
6780      return this;
6781    }
6782
6783    /**
6784     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist {3}
6785     */
6786    public CodeableConcept getTopicFirstRep() { 
6787      if (getTopic().isEmpty()) {
6788        addTopic();
6789      }
6790      return getTopic().get(0);
6791    }
6792
6793    /**
6794     * @return {@link #author} (An individiual or organization primarily involved in the creation and maintenance of the ValueSet.)
6795     */
6796    public List<ContactDetail> getAuthor() { 
6797      if (this.author == null)
6798        this.author = new ArrayList<ContactDetail>();
6799      return this.author;
6800    }
6801
6802    /**
6803     * @return Returns a reference to <code>this</code> for easy method chaining
6804     */
6805    public ValueSet setAuthor(List<ContactDetail> theAuthor) { 
6806      this.author = theAuthor;
6807      return this;
6808    }
6809
6810    public boolean hasAuthor() { 
6811      if (this.author == null)
6812        return false;
6813      for (ContactDetail item : this.author)
6814        if (!item.isEmpty())
6815          return true;
6816      return false;
6817    }
6818
6819    public ContactDetail addAuthor() { //3
6820      ContactDetail t = new ContactDetail();
6821      if (this.author == null)
6822        this.author = new ArrayList<ContactDetail>();
6823      this.author.add(t);
6824      return t;
6825    }
6826
6827    public ValueSet addAuthor(ContactDetail t) { //3
6828      if (t == null)
6829        return this;
6830      if (this.author == null)
6831        this.author = new ArrayList<ContactDetail>();
6832      this.author.add(t);
6833      return this;
6834    }
6835
6836    /**
6837     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
6838     */
6839    public ContactDetail getAuthorFirstRep() { 
6840      if (getAuthor().isEmpty()) {
6841        addAuthor();
6842      }
6843      return getAuthor().get(0);
6844    }
6845
6846    /**
6847     * @return {@link #editor} (An individual or organization primarily responsible for internal coherence of the ValueSet.)
6848     */
6849    public List<ContactDetail> getEditor() { 
6850      if (this.editor == null)
6851        this.editor = new ArrayList<ContactDetail>();
6852      return this.editor;
6853    }
6854
6855    /**
6856     * @return Returns a reference to <code>this</code> for easy method chaining
6857     */
6858    public ValueSet setEditor(List<ContactDetail> theEditor) { 
6859      this.editor = theEditor;
6860      return this;
6861    }
6862
6863    public boolean hasEditor() { 
6864      if (this.editor == null)
6865        return false;
6866      for (ContactDetail item : this.editor)
6867        if (!item.isEmpty())
6868          return true;
6869      return false;
6870    }
6871
6872    public ContactDetail addEditor() { //3
6873      ContactDetail t = new ContactDetail();
6874      if (this.editor == null)
6875        this.editor = new ArrayList<ContactDetail>();
6876      this.editor.add(t);
6877      return t;
6878    }
6879
6880    public ValueSet addEditor(ContactDetail t) { //3
6881      if (t == null)
6882        return this;
6883      if (this.editor == null)
6884        this.editor = new ArrayList<ContactDetail>();
6885      this.editor.add(t);
6886      return this;
6887    }
6888
6889    /**
6890     * @return The first repetition of repeating field {@link #editor}, creating it if it does not already exist {3}
6891     */
6892    public ContactDetail getEditorFirstRep() { 
6893      if (getEditor().isEmpty()) {
6894        addEditor();
6895      }
6896      return getEditor().get(0);
6897    }
6898
6899    /**
6900     * @return {@link #reviewer} (An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the ValueSet.)
6901     */
6902    public List<ContactDetail> getReviewer() { 
6903      if (this.reviewer == null)
6904        this.reviewer = new ArrayList<ContactDetail>();
6905      return this.reviewer;
6906    }
6907
6908    /**
6909     * @return Returns a reference to <code>this</code> for easy method chaining
6910     */
6911    public ValueSet setReviewer(List<ContactDetail> theReviewer) { 
6912      this.reviewer = theReviewer;
6913      return this;
6914    }
6915
6916    public boolean hasReviewer() { 
6917      if (this.reviewer == null)
6918        return false;
6919      for (ContactDetail item : this.reviewer)
6920        if (!item.isEmpty())
6921          return true;
6922      return false;
6923    }
6924
6925    public ContactDetail addReviewer() { //3
6926      ContactDetail t = new ContactDetail();
6927      if (this.reviewer == null)
6928        this.reviewer = new ArrayList<ContactDetail>();
6929      this.reviewer.add(t);
6930      return t;
6931    }
6932
6933    public ValueSet addReviewer(ContactDetail t) { //3
6934      if (t == null)
6935        return this;
6936      if (this.reviewer == null)
6937        this.reviewer = new ArrayList<ContactDetail>();
6938      this.reviewer.add(t);
6939      return this;
6940    }
6941
6942    /**
6943     * @return The first repetition of repeating field {@link #reviewer}, creating it if it does not already exist {3}
6944     */
6945    public ContactDetail getReviewerFirstRep() { 
6946      if (getReviewer().isEmpty()) {
6947        addReviewer();
6948      }
6949      return getReviewer().get(0);
6950    }
6951
6952    /**
6953     * @return {@link #endorser} (An individual or organization asserted by the publisher to be responsible for officially endorsing the ValueSet for use in some setting.)
6954     */
6955    public List<ContactDetail> getEndorser() { 
6956      if (this.endorser == null)
6957        this.endorser = new ArrayList<ContactDetail>();
6958      return this.endorser;
6959    }
6960
6961    /**
6962     * @return Returns a reference to <code>this</code> for easy method chaining
6963     */
6964    public ValueSet setEndorser(List<ContactDetail> theEndorser) { 
6965      this.endorser = theEndorser;
6966      return this;
6967    }
6968
6969    public boolean hasEndorser() { 
6970      if (this.endorser == null)
6971        return false;
6972      for (ContactDetail item : this.endorser)
6973        if (!item.isEmpty())
6974          return true;
6975      return false;
6976    }
6977
6978    public ContactDetail addEndorser() { //3
6979      ContactDetail t = new ContactDetail();
6980      if (this.endorser == null)
6981        this.endorser = new ArrayList<ContactDetail>();
6982      this.endorser.add(t);
6983      return t;
6984    }
6985
6986    public ValueSet addEndorser(ContactDetail t) { //3
6987      if (t == null)
6988        return this;
6989      if (this.endorser == null)
6990        this.endorser = new ArrayList<ContactDetail>();
6991      this.endorser.add(t);
6992      return this;
6993    }
6994
6995    /**
6996     * @return The first repetition of repeating field {@link #endorser}, creating it if it does not already exist {3}
6997     */
6998    public ContactDetail getEndorserFirstRep() { 
6999      if (getEndorser().isEmpty()) {
7000        addEndorser();
7001      }
7002      return getEndorser().get(0);
7003    }
7004
7005    /**
7006     * @return {@link #relatedArtifact} (Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifacts.)
7007     */
7008    public List<RelatedArtifact> getRelatedArtifact() { 
7009      if (this.relatedArtifact == null)
7010        this.relatedArtifact = new ArrayList<RelatedArtifact>();
7011      return this.relatedArtifact;
7012    }
7013
7014    /**
7015     * @return Returns a reference to <code>this</code> for easy method chaining
7016     */
7017    public ValueSet setRelatedArtifact(List<RelatedArtifact> theRelatedArtifact) { 
7018      this.relatedArtifact = theRelatedArtifact;
7019      return this;
7020    }
7021
7022    public boolean hasRelatedArtifact() { 
7023      if (this.relatedArtifact == null)
7024        return false;
7025      for (RelatedArtifact item : this.relatedArtifact)
7026        if (!item.isEmpty())
7027          return true;
7028      return false;
7029    }
7030
7031    public RelatedArtifact addRelatedArtifact() { //3
7032      RelatedArtifact t = new RelatedArtifact();
7033      if (this.relatedArtifact == null)
7034        this.relatedArtifact = new ArrayList<RelatedArtifact>();
7035      this.relatedArtifact.add(t);
7036      return t;
7037    }
7038
7039    public ValueSet addRelatedArtifact(RelatedArtifact t) { //3
7040      if (t == null)
7041        return this;
7042      if (this.relatedArtifact == null)
7043        this.relatedArtifact = new ArrayList<RelatedArtifact>();
7044      this.relatedArtifact.add(t);
7045      return this;
7046    }
7047
7048    /**
7049     * @return The first repetition of repeating field {@link #relatedArtifact}, creating it if it does not already exist {3}
7050     */
7051    public RelatedArtifact getRelatedArtifactFirstRep() { 
7052      if (getRelatedArtifact().isEmpty()) {
7053        addRelatedArtifact();
7054      }
7055      return getRelatedArtifact().get(0);
7056    }
7057
7058    /**
7059     * @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).)
7060     */
7061    public ValueSetComposeComponent getCompose() { 
7062      if (this.compose == null)
7063        if (Configuration.errorOnAutoCreate())
7064          throw new Error("Attempt to auto-create ValueSet.compose");
7065        else if (Configuration.doAutoCreate())
7066          this.compose = new ValueSetComposeComponent(); // cc
7067      return this.compose;
7068    }
7069
7070    public boolean hasCompose() { 
7071      return this.compose != null && !this.compose.isEmpty();
7072    }
7073
7074    /**
7075     * @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).)
7076     */
7077    public ValueSet setCompose(ValueSetComposeComponent value) { 
7078      this.compose = value;
7079      return this;
7080    }
7081
7082    /**
7083     * @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.)
7084     */
7085    public ValueSetExpansionComponent getExpansion() { 
7086      if (this.expansion == null)
7087        if (Configuration.errorOnAutoCreate())
7088          throw new Error("Attempt to auto-create ValueSet.expansion");
7089        else if (Configuration.doAutoCreate())
7090          this.expansion = new ValueSetExpansionComponent(); // cc
7091      return this.expansion;
7092    }
7093
7094    public boolean hasExpansion() { 
7095      return this.expansion != null && !this.expansion.isEmpty();
7096    }
7097
7098    /**
7099     * @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.)
7100     */
7101    public ValueSet setExpansion(ValueSetExpansionComponent value) { 
7102      this.expansion = value;
7103      return this;
7104    }
7105
7106    /**
7107     * @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.)
7108     */
7109    public ValueSetScopeComponent getScope() { 
7110      if (this.scope == null)
7111        if (Configuration.errorOnAutoCreate())
7112          throw new Error("Attempt to auto-create ValueSet.scope");
7113        else if (Configuration.doAutoCreate())
7114          this.scope = new ValueSetScopeComponent(); // cc
7115      return this.scope;
7116    }
7117
7118    public boolean hasScope() { 
7119      return this.scope != null && !this.scope.isEmpty();
7120    }
7121
7122    /**
7123     * @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.)
7124     */
7125    public ValueSet setScope(ValueSetScopeComponent value) { 
7126      this.scope = value;
7127      return this;
7128    }
7129
7130      protected void listChildren(List<Property> children) {
7131        super.listChildren(children);
7132        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));
7133        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));
7134        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));
7135        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));
7136        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));
7137        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title));
7138        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));
7139        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));
7140        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));
7141        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));
7142        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));
7143        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));
7144        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));
7145        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));
7146        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));
7147        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));
7148        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));
7149        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));
7150        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));
7151        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));
7152        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));
7153        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));
7154        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));
7155        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));
7156        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));
7157        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));
7158        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));
7159        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));
7160        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));
7161        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));
7162      }
7163
7164      @Override
7165      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
7166        switch (_hash) {
7167        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);
7168        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);
7169        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);
7170        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);
7171        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);
7172        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);
7173        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);
7174        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);
7175        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title);
7176        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);
7177        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);
7178        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);
7179        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);
7180        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);
7181        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);
7182        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);
7183        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);
7184        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);
7185        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);
7186        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);
7187        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);
7188        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);
7189        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);
7190        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);
7191        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);
7192        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);
7193        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);
7194        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);
7195        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);
7196        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);
7197        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);
7198        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);
7199        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);
7200        default: return super.getNamedProperty(_hash, _name, _checkValid);
7201        }
7202
7203      }
7204
7205      @Override
7206      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
7207        switch (hash) {
7208        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
7209        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
7210        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
7211        case 1508158071: /*versionAlgorithm*/ return this.versionAlgorithm == null ? new Base[0] : new Base[] {this.versionAlgorithm}; // DataType
7212        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
7213        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
7214        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
7215        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
7216        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
7217        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
7218        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
7219        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
7220        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
7221        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
7222        case 1596987778: /*immutable*/ return this.immutable == null ? new Base[0] : new Base[] {this.immutable}; // BooleanType
7223        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
7224        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
7225        case 765157229: /*copyrightLabel*/ return this.copyrightLabel == null ? new Base[0] : new Base[] {this.copyrightLabel}; // StringType
7226        case 223539345: /*approvalDate*/ return this.approvalDate == null ? new Base[0] : new Base[] {this.approvalDate}; // DateType
7227        case -1687512484: /*lastReviewDate*/ return this.lastReviewDate == null ? new Base[0] : new Base[] {this.lastReviewDate}; // DateType
7228        case -403934648: /*effectivePeriod*/ return this.effectivePeriod == null ? new Base[0] : new Base[] {this.effectivePeriod}; // Period
7229        case 110546223: /*topic*/ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // CodeableConcept
7230        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // ContactDetail
7231        case -1307827859: /*editor*/ return this.editor == null ? new Base[0] : this.editor.toArray(new Base[this.editor.size()]); // ContactDetail
7232        case -261190139: /*reviewer*/ return this.reviewer == null ? new Base[0] : this.reviewer.toArray(new Base[this.reviewer.size()]); // ContactDetail
7233        case 1740277666: /*endorser*/ return this.endorser == null ? new Base[0] : this.endorser.toArray(new Base[this.endorser.size()]); // ContactDetail
7234        case 666807069: /*relatedArtifact*/ return this.relatedArtifact == null ? new Base[0] : this.relatedArtifact.toArray(new Base[this.relatedArtifact.size()]); // RelatedArtifact
7235        case 950497682: /*compose*/ return this.compose == null ? new Base[0] : new Base[] {this.compose}; // ValueSetComposeComponent
7236        case 17878207: /*expansion*/ return this.expansion == null ? new Base[0] : new Base[] {this.expansion}; // ValueSetExpansionComponent
7237        case 109264468: /*scope*/ return this.scope == null ? new Base[0] : new Base[] {this.scope}; // ValueSetScopeComponent
7238        default: return super.getProperty(hash, name, checkValid);
7239        }
7240
7241      }
7242
7243      @Override
7244      public Base setProperty(int hash, String name, Base value) throws FHIRException {
7245        switch (hash) {
7246        case 116079: // url
7247          this.url = TypeConvertor.castToUri(value); // UriType
7248          return value;
7249        case -1618432855: // identifier
7250          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
7251          return value;
7252        case 351608024: // version
7253          this.version = TypeConvertor.castToString(value); // StringType
7254          return value;
7255        case 1508158071: // versionAlgorithm
7256          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
7257          return value;
7258        case 3373707: // name
7259          this.name = TypeConvertor.castToString(value); // StringType
7260          return value;
7261        case 110371416: // title
7262          this.title = TypeConvertor.castToString(value); // StringType
7263          return value;
7264        case -892481550: // status
7265          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
7266          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
7267          return value;
7268        case -404562712: // experimental
7269          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
7270          return value;
7271        case 3076014: // date
7272          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
7273          return value;
7274        case 1447404028: // publisher
7275          this.publisher = TypeConvertor.castToString(value); // StringType
7276          return value;
7277        case 951526432: // contact
7278          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7279          return value;
7280        case -1724546052: // description
7281          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
7282          return value;
7283        case -669707736: // useContext
7284          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
7285          return value;
7286        case -507075711: // jurisdiction
7287          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
7288          return value;
7289        case 1596987778: // immutable
7290          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
7291          return value;
7292        case -220463842: // purpose
7293          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
7294          return value;
7295        case 1522889671: // copyright
7296          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
7297          return value;
7298        case 765157229: // copyrightLabel
7299          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
7300          return value;
7301        case 223539345: // approvalDate
7302          this.approvalDate = TypeConvertor.castToDate(value); // DateType
7303          return value;
7304        case -1687512484: // lastReviewDate
7305          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
7306          return value;
7307        case -403934648: // effectivePeriod
7308          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
7309          return value;
7310        case 110546223: // topic
7311          this.getTopic().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
7312          return value;
7313        case -1406328437: // author
7314          this.getAuthor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7315          return value;
7316        case -1307827859: // editor
7317          this.getEditor().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7318          return value;
7319        case -261190139: // reviewer
7320          this.getReviewer().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7321          return value;
7322        case 1740277666: // endorser
7323          this.getEndorser().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
7324          return value;
7325        case 666807069: // relatedArtifact
7326          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value)); // RelatedArtifact
7327          return value;
7328        case 950497682: // compose
7329          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
7330          return value;
7331        case 17878207: // expansion
7332          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
7333          return value;
7334        case 109264468: // scope
7335          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
7336          return value;
7337        default: return super.setProperty(hash, name, value);
7338        }
7339
7340      }
7341
7342      @Override
7343      public Base setProperty(String name, Base value) throws FHIRException {
7344        if (name.equals("url")) {
7345          this.url = TypeConvertor.castToUri(value); // UriType
7346        } else if (name.equals("identifier")) {
7347          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
7348        } else if (name.equals("version")) {
7349          this.version = TypeConvertor.castToString(value); // StringType
7350        } else if (name.equals("versionAlgorithm[x]")) {
7351          this.versionAlgorithm = TypeConvertor.castToType(value); // DataType
7352        } else if (name.equals("name")) {
7353          this.name = TypeConvertor.castToString(value); // StringType
7354        } else if (name.equals("title")) {
7355          this.title = TypeConvertor.castToString(value); // StringType
7356        } else if (name.equals("status")) {
7357          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
7358          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
7359        } else if (name.equals("experimental")) {
7360          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
7361        } else if (name.equals("date")) {
7362          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
7363        } else if (name.equals("publisher")) {
7364          this.publisher = TypeConvertor.castToString(value); // StringType
7365        } else if (name.equals("contact")) {
7366          this.getContact().add(TypeConvertor.castToContactDetail(value));
7367        } else if (name.equals("description")) {
7368          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
7369        } else if (name.equals("useContext")) {
7370          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
7371        } else if (name.equals("jurisdiction")) {
7372          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
7373        } else if (name.equals("immutable")) {
7374          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
7375        } else if (name.equals("purpose")) {
7376          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
7377        } else if (name.equals("copyright")) {
7378          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
7379        } else if (name.equals("copyrightLabel")) {
7380          this.copyrightLabel = TypeConvertor.castToString(value); // StringType
7381        } else if (name.equals("approvalDate")) {
7382          this.approvalDate = TypeConvertor.castToDate(value); // DateType
7383        } else if (name.equals("lastReviewDate")) {
7384          this.lastReviewDate = TypeConvertor.castToDate(value); // DateType
7385        } else if (name.equals("effectivePeriod")) {
7386          this.effectivePeriod = TypeConvertor.castToPeriod(value); // Period
7387        } else if (name.equals("topic")) {
7388          this.getTopic().add(TypeConvertor.castToCodeableConcept(value));
7389        } else if (name.equals("author")) {
7390          this.getAuthor().add(TypeConvertor.castToContactDetail(value));
7391        } else if (name.equals("editor")) {
7392          this.getEditor().add(TypeConvertor.castToContactDetail(value));
7393        } else if (name.equals("reviewer")) {
7394          this.getReviewer().add(TypeConvertor.castToContactDetail(value));
7395        } else if (name.equals("endorser")) {
7396          this.getEndorser().add(TypeConvertor.castToContactDetail(value));
7397        } else if (name.equals("relatedArtifact")) {
7398          this.getRelatedArtifact().add(TypeConvertor.castToRelatedArtifact(value));
7399        } else if (name.equals("compose")) {
7400          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
7401        } else if (name.equals("expansion")) {
7402          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
7403        } else if (name.equals("scope")) {
7404          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
7405        } else
7406          return super.setProperty(name, value);
7407        return value;
7408      }
7409
7410  @Override
7411  public void removeChild(String name, Base value) throws FHIRException {
7412        if (name.equals("url")) {
7413          this.url = null;
7414        } else if (name.equals("identifier")) {
7415          this.getIdentifier().remove(value);
7416        } else if (name.equals("version")) {
7417          this.version = null;
7418        } else if (name.equals("versionAlgorithm[x]")) {
7419          this.versionAlgorithm = null;
7420        } else if (name.equals("name")) {
7421          this.name = null;
7422        } else if (name.equals("title")) {
7423          this.title = null;
7424        } else if (name.equals("status")) {
7425          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
7426          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
7427        } else if (name.equals("experimental")) {
7428          this.experimental = null;
7429        } else if (name.equals("date")) {
7430          this.date = null;
7431        } else if (name.equals("publisher")) {
7432          this.publisher = null;
7433        } else if (name.equals("contact")) {
7434          this.getContact().remove(value);
7435        } else if (name.equals("description")) {
7436          this.description = null;
7437        } else if (name.equals("useContext")) {
7438          this.getUseContext().remove(value);
7439        } else if (name.equals("jurisdiction")) {
7440          this.getJurisdiction().remove(value);
7441        } else if (name.equals("immutable")) {
7442          this.immutable = null;
7443        } else if (name.equals("purpose")) {
7444          this.purpose = null;
7445        } else if (name.equals("copyright")) {
7446          this.copyright = null;
7447        } else if (name.equals("copyrightLabel")) {
7448          this.copyrightLabel = null;
7449        } else if (name.equals("approvalDate")) {
7450          this.approvalDate = null;
7451        } else if (name.equals("lastReviewDate")) {
7452          this.lastReviewDate = null;
7453        } else if (name.equals("effectivePeriod")) {
7454          this.effectivePeriod = null;
7455        } else if (name.equals("topic")) {
7456          this.getTopic().remove(value);
7457        } else if (name.equals("author")) {
7458          this.getAuthor().remove(value);
7459        } else if (name.equals("editor")) {
7460          this.getEditor().remove(value);
7461        } else if (name.equals("reviewer")) {
7462          this.getReviewer().remove(value);
7463        } else if (name.equals("endorser")) {
7464          this.getEndorser().remove(value);
7465        } else if (name.equals("relatedArtifact")) {
7466          this.getRelatedArtifact().remove(value);
7467        } else if (name.equals("compose")) {
7468          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
7469        } else if (name.equals("expansion")) {
7470          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
7471        } else if (name.equals("scope")) {
7472          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
7473        } else
7474          super.removeChild(name, value);
7475        
7476      }
7477
7478      @Override
7479      public Base makeProperty(int hash, String name) throws FHIRException {
7480        switch (hash) {
7481        case 116079:  return getUrlElement();
7482        case -1618432855:  return addIdentifier(); 
7483        case 351608024:  return getVersionElement();
7484        case -115699031:  return getVersionAlgorithm();
7485        case 1508158071:  return getVersionAlgorithm();
7486        case 3373707:  return getNameElement();
7487        case 110371416:  return getTitleElement();
7488        case -892481550:  return getStatusElement();
7489        case -404562712:  return getExperimentalElement();
7490        case 3076014:  return getDateElement();
7491        case 1447404028:  return getPublisherElement();
7492        case 951526432:  return addContact(); 
7493        case -1724546052:  return getDescriptionElement();
7494        case -669707736:  return addUseContext(); 
7495        case -507075711:  return addJurisdiction(); 
7496        case 1596987778:  return getImmutableElement();
7497        case -220463842:  return getPurposeElement();
7498        case 1522889671:  return getCopyrightElement();
7499        case 765157229:  return getCopyrightLabelElement();
7500        case 223539345:  return getApprovalDateElement();
7501        case -1687512484:  return getLastReviewDateElement();
7502        case -403934648:  return getEffectivePeriod();
7503        case 110546223:  return addTopic(); 
7504        case -1406328437:  return addAuthor(); 
7505        case -1307827859:  return addEditor(); 
7506        case -261190139:  return addReviewer(); 
7507        case 1740277666:  return addEndorser(); 
7508        case 666807069:  return addRelatedArtifact(); 
7509        case 950497682:  return getCompose();
7510        case 17878207:  return getExpansion();
7511        case 109264468:  return getScope();
7512        default: return super.makeProperty(hash, name);
7513        }
7514
7515      }
7516
7517      @Override
7518      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
7519        switch (hash) {
7520        case 116079: /*url*/ return new String[] {"uri"};
7521        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
7522        case 351608024: /*version*/ return new String[] {"string"};
7523        case 1508158071: /*versionAlgorithm*/ return new String[] {"string", "Coding"};
7524        case 3373707: /*name*/ return new String[] {"string"};
7525        case 110371416: /*title*/ return new String[] {"string"};
7526        case -892481550: /*status*/ return new String[] {"code"};
7527        case -404562712: /*experimental*/ return new String[] {"boolean"};
7528        case 3076014: /*date*/ return new String[] {"dateTime"};
7529        case 1447404028: /*publisher*/ return new String[] {"string"};
7530        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
7531        case -1724546052: /*description*/ return new String[] {"markdown"};
7532        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
7533        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
7534        case 1596987778: /*immutable*/ return new String[] {"boolean"};
7535        case -220463842: /*purpose*/ return new String[] {"markdown"};
7536        case 1522889671: /*copyright*/ return new String[] {"markdown"};
7537        case 765157229: /*copyrightLabel*/ return new String[] {"string"};
7538        case 223539345: /*approvalDate*/ return new String[] {"date"};
7539        case -1687512484: /*lastReviewDate*/ return new String[] {"date"};
7540        case -403934648: /*effectivePeriod*/ return new String[] {"Period"};
7541        case 110546223: /*topic*/ return new String[] {"CodeableConcept"};
7542        case -1406328437: /*author*/ return new String[] {"ContactDetail"};
7543        case -1307827859: /*editor*/ return new String[] {"ContactDetail"};
7544        case -261190139: /*reviewer*/ return new String[] {"ContactDetail"};
7545        case 1740277666: /*endorser*/ return new String[] {"ContactDetail"};
7546        case 666807069: /*relatedArtifact*/ return new String[] {"RelatedArtifact"};
7547        case 950497682: /*compose*/ return new String[] {};
7548        case 17878207: /*expansion*/ return new String[] {};
7549        case 109264468: /*scope*/ return new String[] {};
7550        default: return super.getTypesForProperty(hash, name);
7551        }
7552
7553      }
7554
7555      @Override
7556      public Base addChild(String name) throws FHIRException {
7557        if (name.equals("url")) {
7558          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.url");
7559        }
7560        else if (name.equals("identifier")) {
7561          return addIdentifier();
7562        }
7563        else if (name.equals("version")) {
7564          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.version");
7565        }
7566        else if (name.equals("versionAlgorithmString")) {
7567          this.versionAlgorithm = new StringType();
7568          return this.versionAlgorithm;
7569        }
7570        else if (name.equals("versionAlgorithmCoding")) {
7571          this.versionAlgorithm = new Coding();
7572          return this.versionAlgorithm;
7573        }
7574        else if (name.equals("name")) {
7575          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.name");
7576        }
7577        else if (name.equals("title")) {
7578          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.title");
7579        }
7580        else if (name.equals("status")) {
7581          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.status");
7582        }
7583        else if (name.equals("experimental")) {
7584          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.experimental");
7585        }
7586        else if (name.equals("date")) {
7587          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.date");
7588        }
7589        else if (name.equals("publisher")) {
7590          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.publisher");
7591        }
7592        else if (name.equals("contact")) {
7593          return addContact();
7594        }
7595        else if (name.equals("description")) {
7596          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.description");
7597        }
7598        else if (name.equals("useContext")) {
7599          return addUseContext();
7600        }
7601        else if (name.equals("jurisdiction")) {
7602          return addJurisdiction();
7603        }
7604        else if (name.equals("immutable")) {
7605          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.immutable");
7606        }
7607        else if (name.equals("purpose")) {
7608          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.purpose");
7609        }
7610        else if (name.equals("copyright")) {
7611          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.copyright");
7612        }
7613        else if (name.equals("copyrightLabel")) {
7614          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.copyrightLabel");
7615        }
7616        else if (name.equals("approvalDate")) {
7617          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.approvalDate");
7618        }
7619        else if (name.equals("lastReviewDate")) {
7620          throw new FHIRException("Cannot call addChild on a singleton property ValueSet.lastReviewDate");
7621        }
7622        else if (name.equals("effectivePeriod")) {
7623          this.effectivePeriod = new Period();
7624          return this.effectivePeriod;
7625        }
7626        else if (name.equals("topic")) {
7627          return addTopic();
7628        }
7629        else if (name.equals("author")) {
7630          return addAuthor();
7631        }
7632        else if (name.equals("editor")) {
7633          return addEditor();
7634        }
7635        else if (name.equals("reviewer")) {
7636          return addReviewer();
7637        }
7638        else if (name.equals("endorser")) {
7639          return addEndorser();
7640        }
7641        else if (name.equals("relatedArtifact")) {
7642          return addRelatedArtifact();
7643        }
7644        else if (name.equals("compose")) {
7645          this.compose = new ValueSetComposeComponent();
7646          return this.compose;
7647        }
7648        else if (name.equals("expansion")) {
7649          this.expansion = new ValueSetExpansionComponent();
7650          return this.expansion;
7651        }
7652        else if (name.equals("scope")) {
7653          this.scope = new ValueSetScopeComponent();
7654          return this.scope;
7655        }
7656        else
7657          return super.addChild(name);
7658      }
7659
7660  public String fhirType() {
7661    return "ValueSet";
7662
7663  }
7664
7665      public ValueSet copy() {
7666        ValueSet dst = new ValueSet();
7667        copyValues(dst);
7668        return dst;
7669      }
7670
7671      public void copyValues(ValueSet dst) {
7672        super.copyValues(dst);
7673        dst.url = url == null ? null : url.copy();
7674        if (identifier != null) {
7675          dst.identifier = new ArrayList<Identifier>();
7676          for (Identifier i : identifier)
7677            dst.identifier.add(i.copy());
7678        };
7679        dst.version = version == null ? null : version.copy();
7680        dst.versionAlgorithm = versionAlgorithm == null ? null : versionAlgorithm.copy();
7681        dst.name = name == null ? null : name.copy();
7682        dst.title = title == null ? null : title.copy();
7683        dst.status = status == null ? null : status.copy();
7684        dst.experimental = experimental == null ? null : experimental.copy();
7685        dst.date = date == null ? null : date.copy();
7686        dst.publisher = publisher == null ? null : publisher.copy();
7687        if (contact != null) {
7688          dst.contact = new ArrayList<ContactDetail>();
7689          for (ContactDetail i : contact)
7690            dst.contact.add(i.copy());
7691        };
7692        dst.description = description == null ? null : description.copy();
7693        if (useContext != null) {
7694          dst.useContext = new ArrayList<UsageContext>();
7695          for (UsageContext i : useContext)
7696            dst.useContext.add(i.copy());
7697        };
7698        if (jurisdiction != null) {
7699          dst.jurisdiction = new ArrayList<CodeableConcept>();
7700          for (CodeableConcept i : jurisdiction)
7701            dst.jurisdiction.add(i.copy());
7702        };
7703        dst.immutable = immutable == null ? null : immutable.copy();
7704        dst.purpose = purpose == null ? null : purpose.copy();
7705        dst.copyright = copyright == null ? null : copyright.copy();
7706        dst.copyrightLabel = copyrightLabel == null ? null : copyrightLabel.copy();
7707        dst.approvalDate = approvalDate == null ? null : approvalDate.copy();
7708        dst.lastReviewDate = lastReviewDate == null ? null : lastReviewDate.copy();
7709        dst.effectivePeriod = effectivePeriod == null ? null : effectivePeriod.copy();
7710        if (topic != null) {
7711          dst.topic = new ArrayList<CodeableConcept>();
7712          for (CodeableConcept i : topic)
7713            dst.topic.add(i.copy());
7714        };
7715        if (author != null) {
7716          dst.author = new ArrayList<ContactDetail>();
7717          for (ContactDetail i : author)
7718            dst.author.add(i.copy());
7719        };
7720        if (editor != null) {
7721          dst.editor = new ArrayList<ContactDetail>();
7722          for (ContactDetail i : editor)
7723            dst.editor.add(i.copy());
7724        };
7725        if (reviewer != null) {
7726          dst.reviewer = new ArrayList<ContactDetail>();
7727          for (ContactDetail i : reviewer)
7728            dst.reviewer.add(i.copy());
7729        };
7730        if (endorser != null) {
7731          dst.endorser = new ArrayList<ContactDetail>();
7732          for (ContactDetail i : endorser)
7733            dst.endorser.add(i.copy());
7734        };
7735        if (relatedArtifact != null) {
7736          dst.relatedArtifact = new ArrayList<RelatedArtifact>();
7737          for (RelatedArtifact i : relatedArtifact)
7738            dst.relatedArtifact.add(i.copy());
7739        };
7740        dst.compose = compose == null ? null : compose.copy();
7741        dst.expansion = expansion == null ? null : expansion.copy();
7742        dst.scope = scope == null ? null : scope.copy();
7743      }
7744
7745      protected ValueSet typedCopy() {
7746        return copy();
7747      }
7748
7749      @Override
7750      public boolean equalsDeep(Base other_) {
7751        if (!super.equalsDeep(other_))
7752          return false;
7753        if (!(other_ instanceof ValueSet))
7754          return false;
7755        ValueSet o = (ValueSet) other_;
7756        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
7757           && compareDeep(versionAlgorithm, o.versionAlgorithm, true) && compareDeep(name, o.name, true) && compareDeep(title, o.title, true)
7758           && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true)
7759           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true)
7760           && compareDeep(useContext, o.useContext, true) && compareDeep(jurisdiction, o.jurisdiction, true)
7761           && compareDeep(immutable, o.immutable, true) && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
7762           && compareDeep(copyrightLabel, o.copyrightLabel, true) && compareDeep(approvalDate, o.approvalDate, true)
7763           && compareDeep(lastReviewDate, o.lastReviewDate, true) && compareDeep(effectivePeriod, o.effectivePeriod, true)
7764           && compareDeep(topic, o.topic, true) && compareDeep(author, o.author, true) && compareDeep(editor, o.editor, true)
7765           && compareDeep(reviewer, o.reviewer, true) && compareDeep(endorser, o.endorser, true) && compareDeep(relatedArtifact, o.relatedArtifact, true)
7766           && compareDeep(compose, o.compose, true) && compareDeep(expansion, o.expansion, true) && compareDeep(scope, o.scope, true)
7767          ;
7768      }
7769
7770      @Override
7771      public boolean equalsShallow(Base other_) {
7772        if (!super.equalsShallow(other_))
7773          return false;
7774        if (!(other_ instanceof ValueSet))
7775          return false;
7776        ValueSet o = (ValueSet) other_;
7777        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
7778           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
7779           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
7780           && compareValues(immutable, o.immutable, true) && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
7781           && compareValues(copyrightLabel, o.copyrightLabel, true) && compareValues(approvalDate, o.approvalDate, true)
7782           && compareValues(lastReviewDate, o.lastReviewDate, true);
7783      }
7784
7785      public boolean isEmpty() {
7786        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
7787          , versionAlgorithm, name, title, status, experimental, date, publisher, contact
7788          , description, useContext, jurisdiction, immutable, purpose, copyright, copyrightLabel
7789          , approvalDate, lastReviewDate, effectivePeriod, topic, author, editor, reviewer
7790          , endorser, relatedArtifact, compose, expansion, scope);
7791      }
7792
7793  @Override
7794  public ResourceType getResourceType() {
7795    return ResourceType.ValueSet;
7796   }
7797
7798 /**
7799   * Search parameter: <b>context-quantity</b>
7800   * <p>
7801   * Description: <b>Multiple Resources: 
7802
7803* [ActivityDefinition](activitydefinition.html): A quantity- or range-valued use context assigned to the activity definition
7804* [ActorDefinition](actordefinition.html): A quantity- or range-valued use context assigned to the Actor Definition
7805* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
7806* [ChargeItemDefinition](chargeitemdefinition.html): A quantity- or range-valued use context assigned to the charge item definition
7807* [Citation](citation.html): A quantity- or range-valued use context assigned to the citation
7808* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
7809* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
7810* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
7811* [ConditionDefinition](conditiondefinition.html): A quantity- or range-valued use context assigned to the condition definition
7812* [EventDefinition](eventdefinition.html): A quantity- or range-valued use context assigned to the event definition
7813* [Evidence](evidence.html): A quantity- or range-valued use context assigned to the evidence
7814* [EvidenceReport](evidencereport.html): A quantity- or range-valued use context assigned to the evidence report
7815* [EvidenceVariable](evidencevariable.html): A quantity- or range-valued use context assigned to the evidence variable
7816* [ExampleScenario](examplescenario.html): A quantity- or range-valued use context assigned to the example scenario
7817* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
7818* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
7819* [Library](library.html): A quantity- or range-valued use context assigned to the library
7820* [Measure](measure.html): A quantity- or range-valued use context assigned to the measure
7821* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
7822* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
7823* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
7824* [PlanDefinition](plandefinition.html): A quantity- or range-valued use context assigned to the plan definition
7825* [Questionnaire](questionnaire.html): A quantity- or range-valued use context assigned to the questionnaire
7826* [Requirements](requirements.html): A quantity- or range-valued use context assigned to the requirements
7827* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
7828* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
7829* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
7830* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
7831* [TestScript](testscript.html): A quantity- or range-valued use context assigned to the test script
7832* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
7833</b><br>
7834   * Type: <b>quantity</b><br>
7835   * 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>
7836   * </p>
7837   */
7838  @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" )
7839  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
7840 /**
7841   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
7842   * <p>
7843   * Description: <b>Multiple Resources: 
7844
7845* [ActivityDefinition](activitydefinition.html): A quantity- or range-valued use context assigned to the activity definition
7846* [ActorDefinition](actordefinition.html): A quantity- or range-valued use context assigned to the Actor Definition
7847* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
7848* [ChargeItemDefinition](chargeitemdefinition.html): A quantity- or range-valued use context assigned to the charge item definition
7849* [Citation](citation.html): A quantity- or range-valued use context assigned to the citation
7850* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
7851* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
7852* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
7853* [ConditionDefinition](conditiondefinition.html): A quantity- or range-valued use context assigned to the condition definition
7854* [EventDefinition](eventdefinition.html): A quantity- or range-valued use context assigned to the event definition
7855* [Evidence](evidence.html): A quantity- or range-valued use context assigned to the evidence
7856* [EvidenceReport](evidencereport.html): A quantity- or range-valued use context assigned to the evidence report
7857* [EvidenceVariable](evidencevariable.html): A quantity- or range-valued use context assigned to the evidence variable
7858* [ExampleScenario](examplescenario.html): A quantity- or range-valued use context assigned to the example scenario
7859* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
7860* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
7861* [Library](library.html): A quantity- or range-valued use context assigned to the library
7862* [Measure](measure.html): A quantity- or range-valued use context assigned to the measure
7863* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
7864* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
7865* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
7866* [PlanDefinition](plandefinition.html): A quantity- or range-valued use context assigned to the plan definition
7867* [Questionnaire](questionnaire.html): A quantity- or range-valued use context assigned to the questionnaire
7868* [Requirements](requirements.html): A quantity- or range-valued use context assigned to the requirements
7869* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
7870* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
7871* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
7872* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
7873* [TestScript](testscript.html): A quantity- or range-valued use context assigned to the test script
7874* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
7875</b><br>
7876   * Type: <b>quantity</b><br>
7877   * 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>
7878   * </p>
7879   */
7880  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
7881
7882 /**
7883   * Search parameter: <b>context-type-quantity</b>
7884   * <p>
7885   * Description: <b>Multiple Resources: 
7886
7887* [ActivityDefinition](activitydefinition.html): A use context type and quantity- or range-based value assigned to the activity definition
7888* [ActorDefinition](actordefinition.html): A use context type and quantity- or range-based value assigned to the Actor Definition
7889* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
7890* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and quantity- or range-based value assigned to the charge item definition
7891* [Citation](citation.html): A use context type and quantity- or range-based value assigned to the citation
7892* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
7893* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
7894* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
7895* [ConditionDefinition](conditiondefinition.html): A use context type and quantity- or range-based value assigned to the condition definition
7896* [EventDefinition](eventdefinition.html): A use context type and quantity- or range-based value assigned to the event definition
7897* [Evidence](evidence.html): A use context type and quantity- or range-based value assigned to the evidence
7898* [EvidenceReport](evidencereport.html): A use context type and quantity- or range-based value assigned to the evidence report
7899* [EvidenceVariable](evidencevariable.html): A use context type and quantity- or range-based value assigned to the evidence variable
7900* [ExampleScenario](examplescenario.html): A use context type and quantity- or range-based value assigned to the example scenario
7901* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
7902* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
7903* [Library](library.html): A use context type and quantity- or range-based value assigned to the library
7904* [Measure](measure.html): A use context type and quantity- or range-based value assigned to the measure
7905* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
7906* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
7907* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
7908* [PlanDefinition](plandefinition.html): A use context type and quantity- or range-based value assigned to the plan definition
7909* [Questionnaire](questionnaire.html): A use context type and quantity- or range-based value assigned to the questionnaire
7910* [Requirements](requirements.html): A use context type and quantity- or range-based value assigned to the requirements
7911* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
7912* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
7913* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
7914* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
7915* [TestScript](testscript.html): A use context type and quantity- or range-based value assigned to the test script
7916* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
7917</b><br>
7918   * Type: <b>composite</b><br>
7919   * 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>
7920   * </p>
7921   */
7922  @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"} )
7923  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
7924 /**
7925   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
7926   * <p>
7927   * Description: <b>Multiple Resources: 
7928
7929* [ActivityDefinition](activitydefinition.html): A use context type and quantity- or range-based value assigned to the activity definition
7930* [ActorDefinition](actordefinition.html): A use context type and quantity- or range-based value assigned to the Actor Definition
7931* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
7932* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and quantity- or range-based value assigned to the charge item definition
7933* [Citation](citation.html): A use context type and quantity- or range-based value assigned to the citation
7934* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
7935* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
7936* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
7937* [ConditionDefinition](conditiondefinition.html): A use context type and quantity- or range-based value assigned to the condition definition
7938* [EventDefinition](eventdefinition.html): A use context type and quantity- or range-based value assigned to the event definition
7939* [Evidence](evidence.html): A use context type and quantity- or range-based value assigned to the evidence
7940* [EvidenceReport](evidencereport.html): A use context type and quantity- or range-based value assigned to the evidence report
7941* [EvidenceVariable](evidencevariable.html): A use context type and quantity- or range-based value assigned to the evidence variable
7942* [ExampleScenario](examplescenario.html): A use context type and quantity- or range-based value assigned to the example scenario
7943* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
7944* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
7945* [Library](library.html): A use context type and quantity- or range-based value assigned to the library
7946* [Measure](measure.html): A use context type and quantity- or range-based value assigned to the measure
7947* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
7948* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
7949* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
7950* [PlanDefinition](plandefinition.html): A use context type and quantity- or range-based value assigned to the plan definition
7951* [Questionnaire](questionnaire.html): A use context type and quantity- or range-based value assigned to the questionnaire
7952* [Requirements](requirements.html): A use context type and quantity- or range-based value assigned to the requirements
7953* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
7954* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
7955* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
7956* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
7957* [TestScript](testscript.html): A use context type and quantity- or range-based value assigned to the test script
7958* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
7959</b><br>
7960   * Type: <b>composite</b><br>
7961   * 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>
7962   * </p>
7963   */
7964  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);
7965
7966 /**
7967   * Search parameter: <b>context-type-value</b>
7968   * <p>
7969   * Description: <b>Multiple Resources: 
7970
7971* [ActivityDefinition](activitydefinition.html): A use context type and value assigned to the activity definition
7972* [ActorDefinition](actordefinition.html): A use context type and value assigned to the Actor Definition
7973* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
7974* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and value assigned to the charge item definition
7975* [Citation](citation.html): A use context type and value assigned to the citation
7976* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
7977* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
7978* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
7979* [ConditionDefinition](conditiondefinition.html): A use context type and value assigned to the condition definition
7980* [EventDefinition](eventdefinition.html): A use context type and value assigned to the event definition
7981* [Evidence](evidence.html): A use context type and value assigned to the evidence
7982* [EvidenceReport](evidencereport.html): A use context type and value assigned to the evidence report
7983* [EvidenceVariable](evidencevariable.html): A use context type and value assigned to the evidence variable
7984* [ExampleScenario](examplescenario.html): A use context type and value assigned to the example scenario
7985* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
7986* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
7987* [Library](library.html): A use context type and value assigned to the library
7988* [Measure](measure.html): A use context type and value assigned to the measure
7989* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
7990* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
7991* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
7992* [PlanDefinition](plandefinition.html): A use context type and value assigned to the plan definition
7993* [Questionnaire](questionnaire.html): A use context type and value assigned to the questionnaire
7994* [Requirements](requirements.html): A use context type and value assigned to the requirements
7995* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
7996* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
7997* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
7998* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
7999* [TestScript](testscript.html): A use context type and value assigned to the test script
8000* [ValueSet](valueset.html): A use context type and value assigned to the value set
8001</b><br>
8002   * Type: <b>composite</b><br>
8003   * 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>
8004   * </p>
8005   */
8006  @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"} )
8007  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
8008 /**
8009   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
8010   * <p>
8011   * Description: <b>Multiple Resources: 
8012
8013* [ActivityDefinition](activitydefinition.html): A use context type and value assigned to the activity definition
8014* [ActorDefinition](actordefinition.html): A use context type and value assigned to the Actor Definition
8015* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
8016* [ChargeItemDefinition](chargeitemdefinition.html): A use context type and value assigned to the charge item definition
8017* [Citation](citation.html): A use context type and value assigned to the citation
8018* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
8019* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
8020* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
8021* [ConditionDefinition](conditiondefinition.html): A use context type and value assigned to the condition definition
8022* [EventDefinition](eventdefinition.html): A use context type and value assigned to the event definition
8023* [Evidence](evidence.html): A use context type and value assigned to the evidence
8024* [EvidenceReport](evidencereport.html): A use context type and value assigned to the evidence report
8025* [EvidenceVariable](evidencevariable.html): A use context type and value assigned to the evidence variable
8026* [ExampleScenario](examplescenario.html): A use context type and value assigned to the example scenario
8027* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
8028* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
8029* [Library](library.html): A use context type and value assigned to the library
8030* [Measure](measure.html): A use context type and value assigned to the measure
8031* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
8032* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
8033* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
8034* [PlanDefinition](plandefinition.html): A use context type and value assigned to the plan definition
8035* [Questionnaire](questionnaire.html): A use context type and value assigned to the questionnaire
8036* [Requirements](requirements.html): A use context type and value assigned to the requirements
8037* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
8038* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
8039* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
8040* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
8041* [TestScript](testscript.html): A use context type and value assigned to the test script
8042* [ValueSet](valueset.html): A use context type and value assigned to the value set
8043</b><br>
8044   * Type: <b>composite</b><br>
8045   * 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>
8046   * </p>
8047   */
8048  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);
8049
8050 /**
8051   * Search parameter: <b>context-type</b>
8052   * <p>
8053   * Description: <b>Multiple Resources: 
8054
8055* [ActivityDefinition](activitydefinition.html): A type of use context assigned to the activity definition
8056* [ActorDefinition](actordefinition.html): A type of use context assigned to the Actor Definition
8057* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
8058* [ChargeItemDefinition](chargeitemdefinition.html): A type of use context assigned to the charge item definition
8059* [Citation](citation.html): A type of use context assigned to the citation
8060* [CodeSystem](codesystem.html): A type of use context assigned to the code system
8061* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
8062* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
8063* [ConditionDefinition](conditiondefinition.html): A type of use context assigned to the condition definition
8064* [EventDefinition](eventdefinition.html): A type of use context assigned to the event definition
8065* [Evidence](evidence.html): A type of use context assigned to the evidence
8066* [EvidenceReport](evidencereport.html): A type of use context assigned to the evidence report
8067* [EvidenceVariable](evidencevariable.html): A type of use context assigned to the evidence variable
8068* [ExampleScenario](examplescenario.html): A type of use context assigned to the example scenario
8069* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
8070* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
8071* [Library](library.html): A type of use context assigned to the library
8072* [Measure](measure.html): A type of use context assigned to the measure
8073* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
8074* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
8075* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
8076* [PlanDefinition](plandefinition.html): A type of use context assigned to the plan definition
8077* [Questionnaire](questionnaire.html): A type of use context assigned to the questionnaire
8078* [Requirements](requirements.html): A type of use context assigned to the requirements
8079* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
8080* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
8081* [StructureMap](structuremap.html): A type of use context assigned to the structure map
8082* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
8083* [TestScript](testscript.html): A type of use context assigned to the test script
8084* [ValueSet](valueset.html): A type of use context assigned to the value set
8085</b><br>
8086   * Type: <b>token</b><br>
8087   * 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>
8088   * </p>
8089   */
8090  @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" )
8091  public static final String SP_CONTEXT_TYPE = "context-type";
8092 /**
8093   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
8094   * <p>
8095   * Description: <b>Multiple Resources: 
8096
8097* [ActivityDefinition](activitydefinition.html): A type of use context assigned to the activity definition
8098* [ActorDefinition](actordefinition.html): A type of use context assigned to the Actor Definition
8099* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
8100* [ChargeItemDefinition](chargeitemdefinition.html): A type of use context assigned to the charge item definition
8101* [Citation](citation.html): A type of use context assigned to the citation
8102* [CodeSystem](codesystem.html): A type of use context assigned to the code system
8103* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
8104* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
8105* [ConditionDefinition](conditiondefinition.html): A type of use context assigned to the condition definition
8106* [EventDefinition](eventdefinition.html): A type of use context assigned to the event definition
8107* [Evidence](evidence.html): A type of use context assigned to the evidence
8108* [EvidenceReport](evidencereport.html): A type of use context assigned to the evidence report
8109* [EvidenceVariable](evidencevariable.html): A type of use context assigned to the evidence variable
8110* [ExampleScenario](examplescenario.html): A type of use context assigned to the example scenario
8111* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
8112* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
8113* [Library](library.html): A type of use context assigned to the library
8114* [Measure](measure.html): A type of use context assigned to the measure
8115* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
8116* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
8117* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
8118* [PlanDefinition](plandefinition.html): A type of use context assigned to the plan definition
8119* [Questionnaire](questionnaire.html): A type of use context assigned to the questionnaire
8120* [Requirements](requirements.html): A type of use context assigned to the requirements
8121* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
8122* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
8123* [StructureMap](structuremap.html): A type of use context assigned to the structure map
8124* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
8125* [TestScript](testscript.html): A type of use context assigned to the test script
8126* [ValueSet](valueset.html): A type of use context assigned to the value set
8127</b><br>
8128   * Type: <b>token</b><br>
8129   * 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>
8130   * </p>
8131   */
8132  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
8133
8134 /**
8135   * Search parameter: <b>context</b>
8136   * <p>
8137   * Description: <b>Multiple Resources: 
8138
8139* [ActivityDefinition](activitydefinition.html): A use context assigned to the activity definition
8140* [ActorDefinition](actordefinition.html): A use context assigned to the Actor Definition
8141* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
8142* [ChargeItemDefinition](chargeitemdefinition.html): A use context assigned to the charge item definition
8143* [Citation](citation.html): A use context assigned to the citation
8144* [CodeSystem](codesystem.html): A use context assigned to the code system
8145* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
8146* [ConceptMap](conceptmap.html): A use context assigned to the concept map
8147* [ConditionDefinition](conditiondefinition.html): A use context assigned to the condition definition
8148* [EventDefinition](eventdefinition.html): A use context assigned to the event definition
8149* [Evidence](evidence.html): A use context assigned to the evidence
8150* [EvidenceReport](evidencereport.html): A use context assigned to the evidence report
8151* [EvidenceVariable](evidencevariable.html): A use context assigned to the evidence variable
8152* [ExampleScenario](examplescenario.html): A use context assigned to the example scenario
8153* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
8154* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
8155* [Library](library.html): A use context assigned to the library
8156* [Measure](measure.html): A use context assigned to the measure
8157* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
8158* [NamingSystem](namingsystem.html): A use context assigned to the naming system
8159* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
8160* [PlanDefinition](plandefinition.html): A use context assigned to the plan definition
8161* [Questionnaire](questionnaire.html): A use context assigned to the questionnaire
8162* [Requirements](requirements.html): A use context assigned to the requirements
8163* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
8164* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
8165* [StructureMap](structuremap.html): A use context assigned to the structure map
8166* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
8167* [TestScript](testscript.html): A use context assigned to the test script
8168* [ValueSet](valueset.html): A use context assigned to the value set
8169</b><br>
8170   * Type: <b>token</b><br>
8171   * 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>
8172   * </p>
8173   */
8174  @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" )
8175  public static final String SP_CONTEXT = "context";
8176 /**
8177   * <b>Fluent Client</b> search parameter constant for <b>context</b>
8178   * <p>
8179   * Description: <b>Multiple Resources: 
8180
8181* [ActivityDefinition](activitydefinition.html): A use context assigned to the activity definition
8182* [ActorDefinition](actordefinition.html): A use context assigned to the Actor Definition
8183* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
8184* [ChargeItemDefinition](chargeitemdefinition.html): A use context assigned to the charge item definition
8185* [Citation](citation.html): A use context assigned to the citation
8186* [CodeSystem](codesystem.html): A use context assigned to the code system
8187* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
8188* [ConceptMap](conceptmap.html): A use context assigned to the concept map
8189* [ConditionDefinition](conditiondefinition.html): A use context assigned to the condition definition
8190* [EventDefinition](eventdefinition.html): A use context assigned to the event definition
8191* [Evidence](evidence.html): A use context assigned to the evidence
8192* [EvidenceReport](evidencereport.html): A use context assigned to the evidence report
8193* [EvidenceVariable](evidencevariable.html): A use context assigned to the evidence variable
8194* [ExampleScenario](examplescenario.html): A use context assigned to the example scenario
8195* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
8196* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
8197* [Library](library.html): A use context assigned to the library
8198* [Measure](measure.html): A use context assigned to the measure
8199* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
8200* [NamingSystem](namingsystem.html): A use context assigned to the naming system
8201* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
8202* [PlanDefinition](plandefinition.html): A use context assigned to the plan definition
8203* [Questionnaire](questionnaire.html): A use context assigned to the questionnaire
8204* [Requirements](requirements.html): A use context assigned to the requirements
8205* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
8206* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
8207* [StructureMap](structuremap.html): A use context assigned to the structure map
8208* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
8209* [TestScript](testscript.html): A use context assigned to the test script
8210* [ValueSet](valueset.html): A use context assigned to the value set
8211</b><br>
8212   * Type: <b>token</b><br>
8213   * 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>
8214   * </p>
8215   */
8216  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
8217
8218 /**
8219   * Search parameter: <b>date</b>
8220   * <p>
8221   * Description: <b>Multiple Resources: 
8222
8223* [ActivityDefinition](activitydefinition.html): The activity definition publication date
8224* [ActorDefinition](actordefinition.html): The Actor Definition publication date
8225* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
8226* [ChargeItemDefinition](chargeitemdefinition.html): The charge item definition publication date
8227* [Citation](citation.html): The citation publication date
8228* [CodeSystem](codesystem.html): The code system publication date
8229* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
8230* [ConceptMap](conceptmap.html): The concept map publication date
8231* [ConditionDefinition](conditiondefinition.html): The condition definition publication date
8232* [EventDefinition](eventdefinition.html): The event definition publication date
8233* [Evidence](evidence.html): The evidence publication date
8234* [EvidenceVariable](evidencevariable.html): The evidence variable publication date
8235* [ExampleScenario](examplescenario.html): The example scenario publication date
8236* [GraphDefinition](graphdefinition.html): The graph definition publication date
8237* [ImplementationGuide](implementationguide.html): The implementation guide publication date
8238* [Library](library.html): The library publication date
8239* [Measure](measure.html): The measure publication date
8240* [MessageDefinition](messagedefinition.html): The message definition publication date
8241* [NamingSystem](namingsystem.html): The naming system publication date
8242* [OperationDefinition](operationdefinition.html): The operation definition publication date
8243* [PlanDefinition](plandefinition.html): The plan definition publication date
8244* [Questionnaire](questionnaire.html): The questionnaire publication date
8245* [Requirements](requirements.html): The requirements publication date
8246* [SearchParameter](searchparameter.html): The search parameter publication date
8247* [StructureDefinition](structuredefinition.html): The structure definition publication date
8248* [StructureMap](structuremap.html): The structure map publication date
8249* [SubscriptionTopic](subscriptiontopic.html): Date status first applied
8250* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
8251* [TestScript](testscript.html): The test script publication date
8252* [ValueSet](valueset.html): The value set publication date
8253</b><br>
8254   * Type: <b>date</b><br>
8255   * 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>
8256   * </p>
8257   */
8258  @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" )
8259  public static final String SP_DATE = "date";
8260 /**
8261   * <b>Fluent Client</b> search parameter constant for <b>date</b>
8262   * <p>
8263   * Description: <b>Multiple Resources: 
8264
8265* [ActivityDefinition](activitydefinition.html): The activity definition publication date
8266* [ActorDefinition](actordefinition.html): The Actor Definition publication date
8267* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
8268* [ChargeItemDefinition](chargeitemdefinition.html): The charge item definition publication date
8269* [Citation](citation.html): The citation publication date
8270* [CodeSystem](codesystem.html): The code system publication date
8271* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
8272* [ConceptMap](conceptmap.html): The concept map publication date
8273* [ConditionDefinition](conditiondefinition.html): The condition definition publication date
8274* [EventDefinition](eventdefinition.html): The event definition publication date
8275* [Evidence](evidence.html): The evidence publication date
8276* [EvidenceVariable](evidencevariable.html): The evidence variable publication date
8277* [ExampleScenario](examplescenario.html): The example scenario publication date
8278* [GraphDefinition](graphdefinition.html): The graph definition publication date
8279* [ImplementationGuide](implementationguide.html): The implementation guide publication date
8280* [Library](library.html): The library publication date
8281* [Measure](measure.html): The measure publication date
8282* [MessageDefinition](messagedefinition.html): The message definition publication date
8283* [NamingSystem](namingsystem.html): The naming system publication date
8284* [OperationDefinition](operationdefinition.html): The operation definition publication date
8285* [PlanDefinition](plandefinition.html): The plan definition publication date
8286* [Questionnaire](questionnaire.html): The questionnaire publication date
8287* [Requirements](requirements.html): The requirements publication date
8288* [SearchParameter](searchparameter.html): The search parameter publication date
8289* [StructureDefinition](structuredefinition.html): The structure definition publication date
8290* [StructureMap](structuremap.html): The structure map publication date
8291* [SubscriptionTopic](subscriptiontopic.html): Date status first applied
8292* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
8293* [TestScript](testscript.html): The test script publication date
8294* [ValueSet](valueset.html): The value set publication date
8295</b><br>
8296   * Type: <b>date</b><br>
8297   * 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>
8298   * </p>
8299   */
8300  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
8301
8302 /**
8303   * Search parameter: <b>description</b>
8304   * <p>
8305   * Description: <b>Multiple Resources: 
8306
8307* [ActivityDefinition](activitydefinition.html): The description of the activity definition
8308* [ActorDefinition](actordefinition.html): The description of the Actor Definition
8309* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
8310* [ChargeItemDefinition](chargeitemdefinition.html): The description of the charge item definition
8311* [Citation](citation.html): The description of the citation
8312* [CodeSystem](codesystem.html): The description of the code system
8313* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
8314* [ConceptMap](conceptmap.html): The description of the concept map
8315* [ConditionDefinition](conditiondefinition.html): The description of the condition definition
8316* [EventDefinition](eventdefinition.html): The description of the event definition
8317* [Evidence](evidence.html): The description of the evidence
8318* [EvidenceVariable](evidencevariable.html): The description of the evidence variable
8319* [GraphDefinition](graphdefinition.html): The description of the graph definition
8320* [ImplementationGuide](implementationguide.html): The description of the implementation guide
8321* [Library](library.html): The description of the library
8322* [Measure](measure.html): The description of the measure
8323* [MessageDefinition](messagedefinition.html): The description of the message definition
8324* [NamingSystem](namingsystem.html): The description of the naming system
8325* [OperationDefinition](operationdefinition.html): The description of the operation definition
8326* [PlanDefinition](plandefinition.html): The description of the plan definition
8327* [Questionnaire](questionnaire.html): The description of the questionnaire
8328* [Requirements](requirements.html): The description of the requirements
8329* [SearchParameter](searchparameter.html): The description of the search parameter
8330* [StructureDefinition](structuredefinition.html): The description of the structure definition
8331* [StructureMap](structuremap.html): The description of the structure map
8332* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
8333* [TestScript](testscript.html): The description of the test script
8334* [ValueSet](valueset.html): The description of the value set
8335</b><br>
8336   * Type: <b>string</b><br>
8337   * 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>
8338   * </p>
8339   */
8340  @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](structurem