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 Fri, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
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 CanonicalResource {
055
056    @Block()
057    public static class ValueSetComposeComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
060         */
061        @Child(name = "lockedDate", type = {DateType.class}, order=1, min=0, max=1, modifier=false, summary=true)
062        @Description(shortDefinition="Fixed date for references with no specified version (transitive)", formalDefinition="The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version." )
063        protected DateType lockedDate;
064
065        /**
066         * Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
067         */
068        @Child(name = "inactive", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=true)
069        @Description(shortDefinition="Whether inactive codes are in the value set", formalDefinition="Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included)." )
070        protected BooleanType inactive;
071
072        /**
073         * Include one or more codes from a code system or other value set(s).
074         */
075        @Child(name = "include", type = {}, order=3, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
076        @Description(shortDefinition="Include one or more codes from a code system or other value set(s)", formalDefinition="Include one or more codes from a code system or other value set(s)." )
077        protected List<ConceptSetComponent> include;
078
079        /**
080         * Exclude one or more codes from the value set based on code system filters and/or other value sets.
081         */
082        @Child(name = "exclude", type = {ConceptSetComponent.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
083        @Description(shortDefinition="Explicitly exclude codes from a code system or other value sets", formalDefinition="Exclude one or more codes from the value set based on code system filters and/or other value sets." )
084        protected List<ConceptSetComponent> exclude;
085
086        /**
087         * A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.
088         */
089        @Child(name = "property", type = {StringType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
090        @Description(shortDefinition="Property to return if client doesn't override", formalDefinition="A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server." )
091        protected List<StringType> property;
092
093        private static final long serialVersionUID = -15414259L;
094
095    /**
096     * Constructor
097     */
098      public ValueSetComposeComponent() {
099        super();
100      }
101
102    /**
103     * Constructor
104     */
105      public ValueSetComposeComponent(ConceptSetComponent include) {
106        super();
107        this.addInclude(include);
108      }
109
110        /**
111         * @return {@link #lockedDate} (The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
112         */
113        public DateType getLockedDateElement() { 
114          if (this.lockedDate == null)
115            if (Configuration.errorOnAutoCreate())
116              throw new Error("Attempt to auto-create ValueSetComposeComponent.lockedDate");
117            else if (Configuration.doAutoCreate())
118              this.lockedDate = new DateType(); // bb
119          return this.lockedDate;
120        }
121
122        public boolean hasLockedDateElement() { 
123          return this.lockedDate != null && !this.lockedDate.isEmpty();
124        }
125
126        public boolean hasLockedDate() { 
127          return this.lockedDate != null && !this.lockedDate.isEmpty();
128        }
129
130        /**
131         * @param value {@link #lockedDate} (The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.). This is the underlying object with id, value and extensions. The accessor "getLockedDate" gives direct access to the value
132         */
133        public ValueSetComposeComponent setLockedDateElement(DateType value) { 
134          this.lockedDate = value;
135          return this;
136        }
137
138        /**
139         * @return The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
140         */
141        public Date getLockedDate() { 
142          return this.lockedDate == null ? null : this.lockedDate.getValue();
143        }
144
145        /**
146         * @param value The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.
147         */
148        public ValueSetComposeComponent setLockedDate(Date value) { 
149          if (value == null)
150            this.lockedDate = null;
151          else {
152            if (this.lockedDate == null)
153              this.lockedDate = new DateType();
154            this.lockedDate.setValue(value);
155          }
156          return this;
157        }
158
159        /**
160         * @return {@link #inactive} (Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
161         */
162        public BooleanType getInactiveElement() { 
163          if (this.inactive == null)
164            if (Configuration.errorOnAutoCreate())
165              throw new Error("Attempt to auto-create ValueSetComposeComponent.inactive");
166            else if (Configuration.doAutoCreate())
167              this.inactive = new BooleanType(); // bb
168          return this.inactive;
169        }
170
171        public boolean hasInactiveElement() { 
172          return this.inactive != null && !this.inactive.isEmpty();
173        }
174
175        public boolean hasInactive() { 
176          return this.inactive != null && !this.inactive.isEmpty();
177        }
178
179        /**
180         * @param value {@link #inactive} (Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).). This is the underlying object with id, value and extensions. The accessor "getInactive" gives direct access to the value
181         */
182        public ValueSetComposeComponent setInactiveElement(BooleanType value) { 
183          this.inactive = value;
184          return this;
185        }
186
187        /**
188         * @return Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
189         */
190        public boolean getInactive() { 
191          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
192        }
193
194        /**
195         * @param value Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).
196         */
197        public ValueSetComposeComponent setInactive(boolean value) { 
198            if (this.inactive == null)
199              this.inactive = new BooleanType();
200            this.inactive.setValue(value);
201          return this;
202        }
203
204        /**
205         * @return {@link #include} (Include one or more codes from a code system or other value set(s).)
206         */
207        public List<ConceptSetComponent> getInclude() { 
208          if (this.include == null)
209            this.include = new ArrayList<ConceptSetComponent>();
210          return this.include;
211        }
212
213        /**
214         * @return Returns a reference to <code>this</code> for easy method chaining
215         */
216        public ValueSetComposeComponent setInclude(List<ConceptSetComponent> theInclude) { 
217          this.include = theInclude;
218          return this;
219        }
220
221        public boolean hasInclude() { 
222          if (this.include == null)
223            return false;
224          for (ConceptSetComponent item : this.include)
225            if (!item.isEmpty())
226              return true;
227          return false;
228        }
229
230        public ConceptSetComponent addInclude() { //3
231          ConceptSetComponent t = new ConceptSetComponent();
232          if (this.include == null)
233            this.include = new ArrayList<ConceptSetComponent>();
234          this.include.add(t);
235          return t;
236        }
237
238        public ValueSetComposeComponent addInclude(ConceptSetComponent t) { //3
239          if (t == null)
240            return this;
241          if (this.include == null)
242            this.include = new ArrayList<ConceptSetComponent>();
243          this.include.add(t);
244          return this;
245        }
246
247        /**
248         * @return The first repetition of repeating field {@link #include}, creating it if it does not already exist {3}
249         */
250        public ConceptSetComponent getIncludeFirstRep() { 
251          if (getInclude().isEmpty()) {
252            addInclude();
253          }
254          return getInclude().get(0);
255        }
256
257        /**
258         * @return {@link #exclude} (Exclude one or more codes from the value set based on code system filters and/or other value sets.)
259         */
260        public List<ConceptSetComponent> getExclude() { 
261          if (this.exclude == null)
262            this.exclude = new ArrayList<ConceptSetComponent>();
263          return this.exclude;
264        }
265
266        /**
267         * @return Returns a reference to <code>this</code> for easy method chaining
268         */
269        public ValueSetComposeComponent setExclude(List<ConceptSetComponent> theExclude) { 
270          this.exclude = theExclude;
271          return this;
272        }
273
274        public boolean hasExclude() { 
275          if (this.exclude == null)
276            return false;
277          for (ConceptSetComponent item : this.exclude)
278            if (!item.isEmpty())
279              return true;
280          return false;
281        }
282
283        public ConceptSetComponent addExclude() { //3
284          ConceptSetComponent t = new ConceptSetComponent();
285          if (this.exclude == null)
286            this.exclude = new ArrayList<ConceptSetComponent>();
287          this.exclude.add(t);
288          return t;
289        }
290
291        public ValueSetComposeComponent addExclude(ConceptSetComponent t) { //3
292          if (t == null)
293            return this;
294          if (this.exclude == null)
295            this.exclude = new ArrayList<ConceptSetComponent>();
296          this.exclude.add(t);
297          return this;
298        }
299
300        /**
301         * @return The first repetition of repeating field {@link #exclude}, creating it if it does not already exist {3}
302         */
303        public ConceptSetComponent getExcludeFirstRep() { 
304          if (getExclude().isEmpty()) {
305            addExclude();
306          }
307          return getExclude().get(0);
308        }
309
310        /**
311         * @return {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
312         */
313        public List<StringType> getProperty() { 
314          if (this.property == null)
315            this.property = new ArrayList<StringType>();
316          return this.property;
317        }
318
319        /**
320         * @return Returns a reference to <code>this</code> for easy method chaining
321         */
322        public ValueSetComposeComponent setProperty(List<StringType> theProperty) { 
323          this.property = theProperty;
324          return this;
325        }
326
327        public boolean hasProperty() { 
328          if (this.property == null)
329            return false;
330          for (StringType item : this.property)
331            if (!item.isEmpty())
332              return true;
333          return false;
334        }
335
336        /**
337         * @return {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
338         */
339        public StringType addPropertyElement() {//2 
340          StringType t = new StringType();
341          if (this.property == null)
342            this.property = new ArrayList<StringType>();
343          this.property.add(t);
344          return t;
345        }
346
347        /**
348         * @param value {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
349         */
350        public ValueSetComposeComponent addProperty(String value) { //1
351          StringType t = new StringType();
352          t.setValue(value);
353          if (this.property == null)
354            this.property = new ArrayList<StringType>();
355          this.property.add(t);
356          return this;
357        }
358
359        /**
360         * @param value {@link #property} (A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.)
361         */
362        public boolean hasProperty(String value) { 
363          if (this.property == null)
364            return false;
365          for (StringType v : this.property)
366            if (v.getValue().equals(value)) // string
367              return true;
368          return false;
369        }
370
371        protected void listChildren(List<Property> children) {
372          super.listChildren(children);
373          children.add(new Property("lockedDate", "date", "The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", 0, 1, lockedDate));
374          children.add(new Property("inactive", "boolean", "Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", 0, 1, inactive));
375          children.add(new Property("include", "", "Include one or more codes from a code system or other value set(s).", 0, java.lang.Integer.MAX_VALUE, include));
376          children.add(new Property("exclude", "@ValueSet.compose.include", "Exclude one or more codes from the value set based on code system filters and/or other value sets.", 0, java.lang.Integer.MAX_VALUE, exclude));
377          children.add(new Property("property", "string", "A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.", 0, java.lang.Integer.MAX_VALUE, property));
378        }
379
380        @Override
381        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
382          switch (_hash) {
383          case 1391591896: /*lockedDate*/  return new Property("lockedDate", "date", "The Locked Date is  the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", 0, 1, lockedDate);
384          case 24665195: /*inactive*/  return new Property("inactive", "boolean", "Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", 0, 1, inactive);
385          case 1942574248: /*include*/  return new Property("include", "", "Include one or more codes from a code system or other value set(s).", 0, java.lang.Integer.MAX_VALUE, include);
386          case -1321148966: /*exclude*/  return new Property("exclude", "@ValueSet.compose.include", "Exclude one or more codes from the value set based on code system filters and/or other value sets.", 0, java.lang.Integer.MAX_VALUE, exclude);
387          case -993141291: /*property*/  return new Property("property", "string", "A property to return in the expansion, if the client doesn't ask for any particular properties. May be either a code from the code system definition (convenient) or a the formal URI that refers to the property. The special value '*' means all properties known to the server.", 0, java.lang.Integer.MAX_VALUE, property);
388          default: return super.getNamedProperty(_hash, _name, _checkValid);
389          }
390
391        }
392
393      @Override
394      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
395        switch (hash) {
396        case 1391591896: /*lockedDate*/ return this.lockedDate == null ? new Base[0] : new Base[] {this.lockedDate}; // DateType
397        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
398        case 1942574248: /*include*/ return this.include == null ? new Base[0] : this.include.toArray(new Base[this.include.size()]); // ConceptSetComponent
399        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : this.exclude.toArray(new Base[this.exclude.size()]); // ConceptSetComponent
400        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // StringType
401        default: return super.getProperty(hash, name, checkValid);
402        }
403
404      }
405
406      @Override
407      public Base setProperty(int hash, String name, Base value) throws FHIRException {
408        switch (hash) {
409        case 1391591896: // lockedDate
410          this.lockedDate = TypeConvertor.castToDate(value); // DateType
411          return value;
412        case 24665195: // inactive
413          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
414          return value;
415        case 1942574248: // include
416          this.getInclude().add((ConceptSetComponent) value); // ConceptSetComponent
417          return value;
418        case -1321148966: // exclude
419          this.getExclude().add((ConceptSetComponent) value); // ConceptSetComponent
420          return value;
421        case -993141291: // property
422          this.getProperty().add(TypeConvertor.castToString(value)); // StringType
423          return value;
424        default: return super.setProperty(hash, name, value);
425        }
426
427      }
428
429      @Override
430      public Base setProperty(String name, Base value) throws FHIRException {
431        if (name.equals("lockedDate")) {
432          this.lockedDate = TypeConvertor.castToDate(value); // DateType
433        } else if (name.equals("inactive")) {
434          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
435        } else if (name.equals("include")) {
436          this.getInclude().add((ConceptSetComponent) value);
437        } else if (name.equals("exclude")) {
438          this.getExclude().add((ConceptSetComponent) value);
439        } else if (name.equals("property")) {
440          this.getProperty().add(TypeConvertor.castToString(value));
441        } else
442          return super.setProperty(name, value);
443        return value;
444      }
445
446      @Override
447      public Base makeProperty(int hash, String name) throws FHIRException {
448        switch (hash) {
449        case 1391591896:  return getLockedDateElement();
450        case 24665195:  return getInactiveElement();
451        case 1942574248:  return addInclude(); 
452        case -1321148966:  return addExclude(); 
453        case -993141291:  return addPropertyElement();
454        default: return super.makeProperty(hash, name);
455        }
456
457      }
458
459      @Override
460      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
461        switch (hash) {
462        case 1391591896: /*lockedDate*/ return new String[] {"date"};
463        case 24665195: /*inactive*/ return new String[] {"boolean"};
464        case 1942574248: /*include*/ return new String[] {};
465        case -1321148966: /*exclude*/ return new String[] {"@ValueSet.compose.include"};
466        case -993141291: /*property*/ return new String[] {"string"};
467        default: return super.getTypesForProperty(hash, name);
468        }
469
470      }
471
472      @Override
473      public Base addChild(String name) throws FHIRException {
474        if (name.equals("lockedDate")) {
475          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.lockedDate");
476        }
477        else if (name.equals("inactive")) {
478          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.inactive");
479        }
480        else if (name.equals("include")) {
481          return addInclude();
482        }
483        else if (name.equals("exclude")) {
484          return addExclude();
485        }
486        else if (name.equals("property")) {
487          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.property");
488        }
489        else
490          return super.addChild(name);
491      }
492
493      public ValueSetComposeComponent copy() {
494        ValueSetComposeComponent dst = new ValueSetComposeComponent();
495        copyValues(dst);
496        return dst;
497      }
498
499      public void copyValues(ValueSetComposeComponent dst) {
500        super.copyValues(dst);
501        dst.lockedDate = lockedDate == null ? null : lockedDate.copy();
502        dst.inactive = inactive == null ? null : inactive.copy();
503        if (include != null) {
504          dst.include = new ArrayList<ConceptSetComponent>();
505          for (ConceptSetComponent i : include)
506            dst.include.add(i.copy());
507        };
508        if (exclude != null) {
509          dst.exclude = new ArrayList<ConceptSetComponent>();
510          for (ConceptSetComponent i : exclude)
511            dst.exclude.add(i.copy());
512        };
513        if (property != null) {
514          dst.property = new ArrayList<StringType>();
515          for (StringType i : property)
516            dst.property.add(i.copy());
517        };
518      }
519
520      @Override
521      public boolean equalsDeep(Base other_) {
522        if (!super.equalsDeep(other_))
523          return false;
524        if (!(other_ instanceof ValueSetComposeComponent))
525          return false;
526        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
527        return compareDeep(lockedDate, o.lockedDate, true) && compareDeep(inactive, o.inactive, true) && compareDeep(include, o.include, true)
528           && compareDeep(exclude, o.exclude, true) && compareDeep(property, o.property, true);
529      }
530
531      @Override
532      public boolean equalsShallow(Base other_) {
533        if (!super.equalsShallow(other_))
534          return false;
535        if (!(other_ instanceof ValueSetComposeComponent))
536          return false;
537        ValueSetComposeComponent o = (ValueSetComposeComponent) other_;
538        return compareValues(lockedDate, o.lockedDate, true) && compareValues(inactive, o.inactive, true) && compareValues(property, o.property, true)
539          ;
540      }
541
542      public boolean isEmpty() {
543        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(lockedDate, inactive, include
544          , exclude, property);
545      }
546
547  public String fhirType() {
548    return "ValueSet.compose";
549
550  }
551
552  }
553
554    @Block()
555    public static class ConceptSetComponent extends BackboneElement implements IBaseBackboneElement {
556        /**
557         * An absolute URI which is the code system from which the selected codes come from.
558         */
559        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=true)
560        @Description(shortDefinition="The system the codes come from", formalDefinition="An absolute URI which is the code system from which the selected codes come from." )
561        protected UriType system;
562
563        /**
564         * The version of the code system that the codes are selected from, or the special version '*' for all versions.
565         */
566        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
567        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system that the codes are selected from, or the special version '*' for all versions." )
568        protected StringType version;
569
570        /**
571         * Specifies a concept to be included or excluded.
572         */
573        @Child(name = "concept", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
574        @Description(shortDefinition="A concept defined in the system", formalDefinition="Specifies a concept to be included or excluded." )
575        protected List<ConceptReferenceComponent> concept;
576
577        /**
578         * Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.
579         */
580        @Child(name = "filter", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
581        @Description(shortDefinition="Select codes/concepts by their properties (including relationships)", formalDefinition="Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true." )
582        protected List<ConceptSetFilterComponent> filter;
583
584        /**
585         * Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.
586         */
587        @Child(name = "valueSet", type = {CanonicalType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
588        @Description(shortDefinition="Select the contents included in this value set", formalDefinition="Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets." )
589        protected List<CanonicalType> valueSet;
590
591        /**
592         * A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
593         */
594        @Child(name = "copyright", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
595        @Description(shortDefinition="A copyright statement for the specific code system included in the value set", formalDefinition="A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present)." )
596        protected StringType copyright;
597
598        private static final long serialVersionUID = -517139062L;
599
600    /**
601     * Constructor
602     */
603      public ConceptSetComponent() {
604        super();
605      }
606
607        /**
608         * @return {@link #system} (An absolute URI which is the code system from which the selected codes come from.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
609         */
610        public UriType getSystemElement() { 
611          if (this.system == null)
612            if (Configuration.errorOnAutoCreate())
613              throw new Error("Attempt to auto-create ConceptSetComponent.system");
614            else if (Configuration.doAutoCreate())
615              this.system = new UriType(); // bb
616          return this.system;
617        }
618
619        public boolean hasSystemElement() { 
620          return this.system != null && !this.system.isEmpty();
621        }
622
623        public boolean hasSystem() { 
624          return this.system != null && !this.system.isEmpty();
625        }
626
627        /**
628         * @param value {@link #system} (An absolute URI which is the code system from which the selected codes come from.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
629         */
630        public ConceptSetComponent setSystemElement(UriType value) { 
631          this.system = value;
632          return this;
633        }
634
635        /**
636         * @return An absolute URI which is the code system from which the selected codes come from.
637         */
638        public String getSystem() { 
639          return this.system == null ? null : this.system.getValue();
640        }
641
642        /**
643         * @param value An absolute URI which is the code system from which the selected codes come from.
644         */
645        public ConceptSetComponent setSystem(String value) { 
646          if (Utilities.noString(value))
647            this.system = null;
648          else {
649            if (this.system == null)
650              this.system = new UriType();
651            this.system.setValue(value);
652          }
653          return this;
654        }
655
656        /**
657         * @return {@link #version} (The version of the code system that the codes are selected from, or the special version '*' for all versions.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
658         */
659        public StringType getVersionElement() { 
660          if (this.version == null)
661            if (Configuration.errorOnAutoCreate())
662              throw new Error("Attempt to auto-create ConceptSetComponent.version");
663            else if (Configuration.doAutoCreate())
664              this.version = new StringType(); // bb
665          return this.version;
666        }
667
668        public boolean hasVersionElement() { 
669          return this.version != null && !this.version.isEmpty();
670        }
671
672        public boolean hasVersion() { 
673          return this.version != null && !this.version.isEmpty();
674        }
675
676        /**
677         * @param value {@link #version} (The version of the code system that the codes are selected from, or the special version '*' for all versions.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
678         */
679        public ConceptSetComponent setVersionElement(StringType value) { 
680          this.version = value;
681          return this;
682        }
683
684        /**
685         * @return The version of the code system that the codes are selected from, or the special version '*' for all versions.
686         */
687        public String getVersion() { 
688          return this.version == null ? null : this.version.getValue();
689        }
690
691        /**
692         * @param value The version of the code system that the codes are selected from, or the special version '*' for all versions.
693         */
694        public ConceptSetComponent setVersion(String value) { 
695          if (Utilities.noString(value))
696            this.version = null;
697          else {
698            if (this.version == null)
699              this.version = new StringType();
700            this.version.setValue(value);
701          }
702          return this;
703        }
704
705        /**
706         * @return {@link #concept} (Specifies a concept to be included or excluded.)
707         */
708        public List<ConceptReferenceComponent> getConcept() { 
709          if (this.concept == null)
710            this.concept = new ArrayList<ConceptReferenceComponent>();
711          return this.concept;
712        }
713
714        /**
715         * @return Returns a reference to <code>this</code> for easy method chaining
716         */
717        public ConceptSetComponent setConcept(List<ConceptReferenceComponent> theConcept) { 
718          this.concept = theConcept;
719          return this;
720        }
721
722        public boolean hasConcept() { 
723          if (this.concept == null)
724            return false;
725          for (ConceptReferenceComponent item : this.concept)
726            if (!item.isEmpty())
727              return true;
728          return false;
729        }
730
731        public ConceptReferenceComponent addConcept() { //3
732          ConceptReferenceComponent t = new ConceptReferenceComponent();
733          if (this.concept == null)
734            this.concept = new ArrayList<ConceptReferenceComponent>();
735          this.concept.add(t);
736          return t;
737        }
738
739        public ConceptSetComponent addConcept(ConceptReferenceComponent t) { //3
740          if (t == null)
741            return this;
742          if (this.concept == null)
743            this.concept = new ArrayList<ConceptReferenceComponent>();
744          this.concept.add(t);
745          return this;
746        }
747
748        /**
749         * @return The first repetition of repeating field {@link #concept}, creating it if it does not already exist {3}
750         */
751        public ConceptReferenceComponent getConceptFirstRep() { 
752          if (getConcept().isEmpty()) {
753            addConcept();
754          }
755          return getConcept().get(0);
756        }
757
758        /**
759         * @return {@link #filter} (Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.)
760         */
761        public List<ConceptSetFilterComponent> getFilter() { 
762          if (this.filter == null)
763            this.filter = new ArrayList<ConceptSetFilterComponent>();
764          return this.filter;
765        }
766
767        /**
768         * @return Returns a reference to <code>this</code> for easy method chaining
769         */
770        public ConceptSetComponent setFilter(List<ConceptSetFilterComponent> theFilter) { 
771          this.filter = theFilter;
772          return this;
773        }
774
775        public boolean hasFilter() { 
776          if (this.filter == null)
777            return false;
778          for (ConceptSetFilterComponent item : this.filter)
779            if (!item.isEmpty())
780              return true;
781          return false;
782        }
783
784        public ConceptSetFilterComponent addFilter() { //3
785          ConceptSetFilterComponent t = new ConceptSetFilterComponent();
786          if (this.filter == null)
787            this.filter = new ArrayList<ConceptSetFilterComponent>();
788          this.filter.add(t);
789          return t;
790        }
791
792        public ConceptSetComponent addFilter(ConceptSetFilterComponent t) { //3
793          if (t == null)
794            return this;
795          if (this.filter == null)
796            this.filter = new ArrayList<ConceptSetFilterComponent>();
797          this.filter.add(t);
798          return this;
799        }
800
801        /**
802         * @return The first repetition of repeating field {@link #filter}, creating it if it does not already exist {3}
803         */
804        public ConceptSetFilterComponent getFilterFirstRep() { 
805          if (getFilter().isEmpty()) {
806            addFilter();
807          }
808          return getFilter().get(0);
809        }
810
811        /**
812         * @return {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
813         */
814        public List<CanonicalType> getValueSet() { 
815          if (this.valueSet == null)
816            this.valueSet = new ArrayList<CanonicalType>();
817          return this.valueSet;
818        }
819
820        /**
821         * @return Returns a reference to <code>this</code> for easy method chaining
822         */
823        public ConceptSetComponent setValueSet(List<CanonicalType> theValueSet) { 
824          this.valueSet = theValueSet;
825          return this;
826        }
827
828        public boolean hasValueSet() { 
829          if (this.valueSet == null)
830            return false;
831          for (CanonicalType item : this.valueSet)
832            if (!item.isEmpty())
833              return true;
834          return false;
835        }
836
837        /**
838         * @return {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
839         */
840        public CanonicalType addValueSetElement() {//2 
841          CanonicalType t = new CanonicalType();
842          if (this.valueSet == null)
843            this.valueSet = new ArrayList<CanonicalType>();
844          this.valueSet.add(t);
845          return t;
846        }
847
848        /**
849         * @param value {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
850         */
851        public ConceptSetComponent addValueSet(String value) { //1
852          CanonicalType t = new CanonicalType();
853          t.setValue(value);
854          if (this.valueSet == null)
855            this.valueSet = new ArrayList<CanonicalType>();
856          this.valueSet.add(t);
857          return this;
858        }
859
860        /**
861         * @param value {@link #valueSet} (Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.)
862         */
863        public boolean hasValueSet(String value) { 
864          if (this.valueSet == null)
865            return false;
866          for (CanonicalType v : this.valueSet)
867            if (v.getValue().equals(value)) // canonical
868              return true;
869          return false;
870        }
871
872        /**
873         * @return {@link #copyright} (A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
874         */
875        public StringType getCopyrightElement() { 
876          if (this.copyright == null)
877            if (Configuration.errorOnAutoCreate())
878              throw new Error("Attempt to auto-create ConceptSetComponent.copyright");
879            else if (Configuration.doAutoCreate())
880              this.copyright = new StringType(); // bb
881          return this.copyright;
882        }
883
884        public boolean hasCopyrightElement() { 
885          return this.copyright != null && !this.copyright.isEmpty();
886        }
887
888        public boolean hasCopyright() { 
889          return this.copyright != null && !this.copyright.isEmpty();
890        }
891
892        /**
893         * @param value {@link #copyright} (A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
894         */
895        public ConceptSetComponent setCopyrightElement(StringType value) { 
896          this.copyright = value;
897          return this;
898        }
899
900        /**
901         * @return A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
902         */
903        public String getCopyright() { 
904          return this.copyright == null ? null : this.copyright.getValue();
905        }
906
907        /**
908         * @param value A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).
909         */
910        public ConceptSetComponent setCopyright(String value) { 
911          if (Utilities.noString(value))
912            this.copyright = null;
913          else {
914            if (this.copyright == null)
915              this.copyright = new StringType();
916            this.copyright.setValue(value);
917          }
918          return this;
919        }
920
921        protected void listChildren(List<Property> children) {
922          super.listChildren(children);
923          children.add(new Property("system", "uri", "An absolute URI which is the code system from which the selected codes come from.", 0, 1, system));
924          children.add(new Property("version", "string", "The version of the code system that the codes are selected from, or the special version '*' for all versions.", 0, 1, version));
925          children.add(new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept));
926          children.add(new Property("filter", "", "Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.", 0, java.lang.Integer.MAX_VALUE, filter));
927          children.add(new Property("valueSet", "canonical(ValueSet)", "Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.", 0, java.lang.Integer.MAX_VALUE, valueSet));
928          children.add(new Property("copyright", "string", "A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).", 0, 1, copyright));
929        }
930
931        @Override
932        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
933          switch (_hash) {
934          case -887328209: /*system*/  return new Property("system", "uri", "An absolute URI which is the code system from which the selected codes come from.", 0, 1, system);
935          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system that the codes are selected from, or the special version '*' for all versions.", 0, 1, version);
936          case 951024232: /*concept*/  return new Property("concept", "", "Specifies a concept to be included or excluded.", 0, java.lang.Integer.MAX_VALUE, concept);
937          case -1274492040: /*filter*/  return new Property("filter", "", "Select concepts by specifying a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified within the include, they SHALL all be true.", 0, java.lang.Integer.MAX_VALUE, filter);
938          case -1410174671: /*valueSet*/  return new Property("valueSet", "canonical(ValueSet)", "Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url.  If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets.", 0, java.lang.Integer.MAX_VALUE, valueSet);
939          case 1522889671: /*copyright*/  return new Property("copyright", "string", "A copyright statement for the specific code system asserted by the containing ValueSet.compose.include element's system value (if the associated ValueSet.compose.include.version element is not present); or the code system and version combination (if the associated ValueSet.compose.include.version element is present).", 0, 1, copyright);
940          default: return super.getNamedProperty(_hash, _name, _checkValid);
941          }
942
943        }
944
945      @Override
946      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
947        switch (hash) {
948        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
949        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
950        case 951024232: /*concept*/ return this.concept == null ? new Base[0] : this.concept.toArray(new Base[this.concept.size()]); // ConceptReferenceComponent
951        case -1274492040: /*filter*/ return this.filter == null ? new Base[0] : this.filter.toArray(new Base[this.filter.size()]); // ConceptSetFilterComponent
952        case -1410174671: /*valueSet*/ return this.valueSet == null ? new Base[0] : this.valueSet.toArray(new Base[this.valueSet.size()]); // CanonicalType
953        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // StringType
954        default: return super.getProperty(hash, name, checkValid);
955        }
956
957      }
958
959      @Override
960      public Base setProperty(int hash, String name, Base value) throws FHIRException {
961        switch (hash) {
962        case -887328209: // system
963          this.system = TypeConvertor.castToUri(value); // UriType
964          return value;
965        case 351608024: // version
966          this.version = TypeConvertor.castToString(value); // StringType
967          return value;
968        case 951024232: // concept
969          this.getConcept().add((ConceptReferenceComponent) value); // ConceptReferenceComponent
970          return value;
971        case -1274492040: // filter
972          this.getFilter().add((ConceptSetFilterComponent) value); // ConceptSetFilterComponent
973          return value;
974        case -1410174671: // valueSet
975          this.getValueSet().add(TypeConvertor.castToCanonical(value)); // CanonicalType
976          return value;
977        case 1522889671: // copyright
978          this.copyright = TypeConvertor.castToString(value); // StringType
979          return value;
980        default: return super.setProperty(hash, name, value);
981        }
982
983      }
984
985      @Override
986      public Base setProperty(String name, Base value) throws FHIRException {
987        if (name.equals("system")) {
988          this.system = TypeConvertor.castToUri(value); // UriType
989        } else if (name.equals("version")) {
990          this.version = TypeConvertor.castToString(value); // StringType
991        } else if (name.equals("concept")) {
992          this.getConcept().add((ConceptReferenceComponent) value);
993        } else if (name.equals("filter")) {
994          this.getFilter().add((ConceptSetFilterComponent) value);
995        } else if (name.equals("valueSet")) {
996          this.getValueSet().add(TypeConvertor.castToCanonical(value));
997        } else if (name.equals("copyright")) {
998          this.copyright = TypeConvertor.castToString(value); // StringType
999        } else
1000          return super.setProperty(name, value);
1001        return value;
1002      }
1003
1004      @Override
1005      public Base makeProperty(int hash, String name) throws FHIRException {
1006        switch (hash) {
1007        case -887328209:  return getSystemElement();
1008        case 351608024:  return getVersionElement();
1009        case 951024232:  return addConcept(); 
1010        case -1274492040:  return addFilter(); 
1011        case -1410174671:  return addValueSetElement();
1012        case 1522889671:  return getCopyrightElement();
1013        default: return super.makeProperty(hash, name);
1014        }
1015
1016      }
1017
1018      @Override
1019      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1020        switch (hash) {
1021        case -887328209: /*system*/ return new String[] {"uri"};
1022        case 351608024: /*version*/ return new String[] {"string"};
1023        case 951024232: /*concept*/ return new String[] {};
1024        case -1274492040: /*filter*/ return new String[] {};
1025        case -1410174671: /*valueSet*/ return new String[] {"canonical"};
1026        case 1522889671: /*copyright*/ return new String[] {"string"};
1027        default: return super.getTypesForProperty(hash, name);
1028        }
1029
1030      }
1031
1032      @Override
1033      public Base addChild(String name) throws FHIRException {
1034        if (name.equals("system")) {
1035          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.system");
1036        }
1037        else if (name.equals("version")) {
1038          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.version");
1039        }
1040        else if (name.equals("concept")) {
1041          return addConcept();
1042        }
1043        else if (name.equals("filter")) {
1044          return addFilter();
1045        }
1046        else if (name.equals("valueSet")) {
1047          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.valueSet");
1048        }
1049        else if (name.equals("copyright")) {
1050          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.copyright");
1051        }
1052        else
1053          return super.addChild(name);
1054      }
1055
1056      public ConceptSetComponent copy() {
1057        ConceptSetComponent dst = new ConceptSetComponent();
1058        copyValues(dst);
1059        return dst;
1060      }
1061
1062      public void copyValues(ConceptSetComponent dst) {
1063        super.copyValues(dst);
1064        dst.system = system == null ? null : system.copy();
1065        dst.version = version == null ? null : version.copy();
1066        if (concept != null) {
1067          dst.concept = new ArrayList<ConceptReferenceComponent>();
1068          for (ConceptReferenceComponent i : concept)
1069            dst.concept.add(i.copy());
1070        };
1071        if (filter != null) {
1072          dst.filter = new ArrayList<ConceptSetFilterComponent>();
1073          for (ConceptSetFilterComponent i : filter)
1074            dst.filter.add(i.copy());
1075        };
1076        if (valueSet != null) {
1077          dst.valueSet = new ArrayList<CanonicalType>();
1078          for (CanonicalType i : valueSet)
1079            dst.valueSet.add(i.copy());
1080        };
1081        dst.copyright = copyright == null ? null : copyright.copy();
1082      }
1083
1084      @Override
1085      public boolean equalsDeep(Base other_) {
1086        if (!super.equalsDeep(other_))
1087          return false;
1088        if (!(other_ instanceof ConceptSetComponent))
1089          return false;
1090        ConceptSetComponent o = (ConceptSetComponent) other_;
1091        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(concept, o.concept, true)
1092           && compareDeep(filter, o.filter, true) && compareDeep(valueSet, o.valueSet, true) && compareDeep(copyright, o.copyright, true)
1093          ;
1094      }
1095
1096      @Override
1097      public boolean equalsShallow(Base other_) {
1098        if (!super.equalsShallow(other_))
1099          return false;
1100        if (!(other_ instanceof ConceptSetComponent))
1101          return false;
1102        ConceptSetComponent o = (ConceptSetComponent) other_;
1103        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(valueSet, o.valueSet, true)
1104           && compareValues(copyright, o.copyright, true);
1105      }
1106
1107      public boolean isEmpty() {
1108        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version, concept
1109          , filter, valueSet, copyright);
1110      }
1111
1112  public String fhirType() {
1113    return "ValueSet.compose.include";
1114
1115  }
1116
1117  }
1118
1119    @Block()
1120    public static class ConceptReferenceComponent extends BackboneElement implements IBaseBackboneElement {
1121        /**
1122         * Specifies a code for the concept to be included or excluded.
1123         */
1124        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1125        @Description(shortDefinition="Code or expression from system", formalDefinition="Specifies a code for the concept to be included or excluded." )
1126        protected CodeType code;
1127
1128        /**
1129         * The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1130         */
1131        @Child(name = "display", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1132        @Description(shortDefinition="Text to display for this code for this value set in this valueset", formalDefinition="The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system." )
1133        protected StringType display;
1134
1135        /**
1136         * Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.
1137         */
1138        @Child(name = "designation", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1139        @Description(shortDefinition="Additional representations for this concept", formalDefinition="Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc." )
1140        protected List<ConceptReferenceDesignationComponent> designation;
1141
1142        private static final long serialVersionUID = 260579971L;
1143
1144    /**
1145     * Constructor
1146     */
1147      public ConceptReferenceComponent() {
1148        super();
1149      }
1150
1151    /**
1152     * Constructor
1153     */
1154      public ConceptReferenceComponent(String code) {
1155        super();
1156        this.setCode(code);
1157      }
1158
1159        /**
1160         * @return {@link #code} (Specifies a code for the concept to be included or excluded.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1161         */
1162        public CodeType getCodeElement() { 
1163          if (this.code == null)
1164            if (Configuration.errorOnAutoCreate())
1165              throw new Error("Attempt to auto-create ConceptReferenceComponent.code");
1166            else if (Configuration.doAutoCreate())
1167              this.code = new CodeType(); // bb
1168          return this.code;
1169        }
1170
1171        public boolean hasCodeElement() { 
1172          return this.code != null && !this.code.isEmpty();
1173        }
1174
1175        public boolean hasCode() { 
1176          return this.code != null && !this.code.isEmpty();
1177        }
1178
1179        /**
1180         * @param value {@link #code} (Specifies a code for the concept to be included or excluded.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1181         */
1182        public ConceptReferenceComponent setCodeElement(CodeType value) { 
1183          this.code = value;
1184          return this;
1185        }
1186
1187        /**
1188         * @return Specifies a code for the concept to be included or excluded.
1189         */
1190        public String getCode() { 
1191          return this.code == null ? null : this.code.getValue();
1192        }
1193
1194        /**
1195         * @param value Specifies a code for the concept to be included or excluded.
1196         */
1197        public ConceptReferenceComponent setCode(String value) { 
1198            if (this.code == null)
1199              this.code = new CodeType();
1200            this.code.setValue(value);
1201          return this;
1202        }
1203
1204        /**
1205         * @return {@link #display} (The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
1206         */
1207        public StringType getDisplayElement() { 
1208          if (this.display == null)
1209            if (Configuration.errorOnAutoCreate())
1210              throw new Error("Attempt to auto-create ConceptReferenceComponent.display");
1211            else if (Configuration.doAutoCreate())
1212              this.display = new StringType(); // bb
1213          return this.display;
1214        }
1215
1216        public boolean hasDisplayElement() { 
1217          return this.display != null && !this.display.isEmpty();
1218        }
1219
1220        public boolean hasDisplay() { 
1221          return this.display != null && !this.display.isEmpty();
1222        }
1223
1224        /**
1225         * @param value {@link #display} (The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.). This is the underlying object with id, value and extensions. The accessor "getDisplay" gives direct access to the value
1226         */
1227        public ConceptReferenceComponent setDisplayElement(StringType value) { 
1228          this.display = value;
1229          return this;
1230        }
1231
1232        /**
1233         * @return The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1234         */
1235        public String getDisplay() { 
1236          return this.display == null ? null : this.display.getValue();
1237        }
1238
1239        /**
1240         * @param value The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.
1241         */
1242        public ConceptReferenceComponent setDisplay(String value) { 
1243          if (Utilities.noString(value))
1244            this.display = null;
1245          else {
1246            if (this.display == null)
1247              this.display = new StringType();
1248            this.display.setValue(value);
1249          }
1250          return this;
1251        }
1252
1253        /**
1254         * @return {@link #designation} (Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.)
1255         */
1256        public List<ConceptReferenceDesignationComponent> getDesignation() { 
1257          if (this.designation == null)
1258            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1259          return this.designation;
1260        }
1261
1262        /**
1263         * @return Returns a reference to <code>this</code> for easy method chaining
1264         */
1265        public ConceptReferenceComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
1266          this.designation = theDesignation;
1267          return this;
1268        }
1269
1270        public boolean hasDesignation() { 
1271          if (this.designation == null)
1272            return false;
1273          for (ConceptReferenceDesignationComponent item : this.designation)
1274            if (!item.isEmpty())
1275              return true;
1276          return false;
1277        }
1278
1279        public ConceptReferenceDesignationComponent addDesignation() { //3
1280          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
1281          if (this.designation == null)
1282            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1283          this.designation.add(t);
1284          return t;
1285        }
1286
1287        public ConceptReferenceComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
1288          if (t == null)
1289            return this;
1290          if (this.designation == null)
1291            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1292          this.designation.add(t);
1293          return this;
1294        }
1295
1296        /**
1297         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
1298         */
1299        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
1300          if (getDesignation().isEmpty()) {
1301            addDesignation();
1302          }
1303          return getDesignation().get(0);
1304        }
1305
1306        protected void listChildren(List<Property> children) {
1307          super.listChildren(children);
1308          children.add(new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code));
1309          children.add(new Property("display", "string", "The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", 0, 1, display));
1310          children.add(new Property("designation", "", "Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", 0, java.lang.Integer.MAX_VALUE, designation));
1311        }
1312
1313        @Override
1314        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1315          switch (_hash) {
1316          case 3059181: /*code*/  return new Property("code", "code", "Specifies a code for the concept to be included or excluded.", 0, 1, code);
1317          case 1671764162: /*display*/  return new Property("display", "string", "The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", 0, 1, display);
1318          case -900931593: /*designation*/  return new Property("designation", "", "Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", 0, java.lang.Integer.MAX_VALUE, designation);
1319          default: return super.getNamedProperty(_hash, _name, _checkValid);
1320          }
1321
1322        }
1323
1324      @Override
1325      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1326        switch (hash) {
1327        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1328        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
1329        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
1330        default: return super.getProperty(hash, name, checkValid);
1331        }
1332
1333      }
1334
1335      @Override
1336      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1337        switch (hash) {
1338        case 3059181: // code
1339          this.code = TypeConvertor.castToCode(value); // CodeType
1340          return value;
1341        case 1671764162: // display
1342          this.display = TypeConvertor.castToString(value); // StringType
1343          return value;
1344        case -900931593: // designation
1345          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
1346          return value;
1347        default: return super.setProperty(hash, name, value);
1348        }
1349
1350      }
1351
1352      @Override
1353      public Base setProperty(String name, Base value) throws FHIRException {
1354        if (name.equals("code")) {
1355          this.code = TypeConvertor.castToCode(value); // CodeType
1356        } else if (name.equals("display")) {
1357          this.display = TypeConvertor.castToString(value); // StringType
1358        } else if (name.equals("designation")) {
1359          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
1360        } else
1361          return super.setProperty(name, value);
1362        return value;
1363      }
1364
1365      @Override
1366      public Base makeProperty(int hash, String name) throws FHIRException {
1367        switch (hash) {
1368        case 3059181:  return getCodeElement();
1369        case 1671764162:  return getDisplayElement();
1370        case -900931593:  return addDesignation(); 
1371        default: return super.makeProperty(hash, name);
1372        }
1373
1374      }
1375
1376      @Override
1377      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1378        switch (hash) {
1379        case 3059181: /*code*/ return new String[] {"code"};
1380        case 1671764162: /*display*/ return new String[] {"string"};
1381        case -900931593: /*designation*/ return new String[] {};
1382        default: return super.getTypesForProperty(hash, name);
1383        }
1384
1385      }
1386
1387      @Override
1388      public Base addChild(String name) throws FHIRException {
1389        if (name.equals("code")) {
1390          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.concept.code");
1391        }
1392        else if (name.equals("display")) {
1393          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.concept.display");
1394        }
1395        else if (name.equals("designation")) {
1396          return addDesignation();
1397        }
1398        else
1399          return super.addChild(name);
1400      }
1401
1402      public ConceptReferenceComponent copy() {
1403        ConceptReferenceComponent dst = new ConceptReferenceComponent();
1404        copyValues(dst);
1405        return dst;
1406      }
1407
1408      public void copyValues(ConceptReferenceComponent dst) {
1409        super.copyValues(dst);
1410        dst.code = code == null ? null : code.copy();
1411        dst.display = display == null ? null : display.copy();
1412        if (designation != null) {
1413          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
1414          for (ConceptReferenceDesignationComponent i : designation)
1415            dst.designation.add(i.copy());
1416        };
1417      }
1418
1419      @Override
1420      public boolean equalsDeep(Base other_) {
1421        if (!super.equalsDeep(other_))
1422          return false;
1423        if (!(other_ instanceof ConceptReferenceComponent))
1424          return false;
1425        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1426        return compareDeep(code, o.code, true) && compareDeep(display, o.display, true) && compareDeep(designation, o.designation, true)
1427          ;
1428      }
1429
1430      @Override
1431      public boolean equalsShallow(Base other_) {
1432        if (!super.equalsShallow(other_))
1433          return false;
1434        if (!(other_ instanceof ConceptReferenceComponent))
1435          return false;
1436        ConceptReferenceComponent o = (ConceptReferenceComponent) other_;
1437        return compareValues(code, o.code, true) && compareValues(display, o.display, true);
1438      }
1439
1440      public boolean isEmpty() {
1441        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, display, designation
1442          );
1443      }
1444
1445  public String fhirType() {
1446    return "ValueSet.compose.include.concept";
1447
1448  }
1449
1450  }
1451
1452    @Block()
1453    public static class ConceptReferenceDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1454        /**
1455         * The language this designation is defined for.
1456         */
1457        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1458        @Description(shortDefinition="Human language of the designation", formalDefinition="The language this designation is defined for." )
1459        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1460        protected CodeType language;
1461
1462        /**
1463         * A code that represents types of uses of designations.
1464         */
1465        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=false)
1466        @Description(shortDefinition="Types of uses of designations", formalDefinition="A code that represents types of uses of designations." )
1467        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1468        protected Coding use;
1469
1470        /**
1471         * The text value for this designation.
1472         */
1473        @Child(name = "value", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=false)
1474        @Description(shortDefinition="The text value for this designation", formalDefinition="The text value for this designation." )
1475        protected StringType value;
1476
1477        private static final long serialVersionUID = 1515662414L;
1478
1479    /**
1480     * Constructor
1481     */
1482      public ConceptReferenceDesignationComponent() {
1483        super();
1484      }
1485
1486    /**
1487     * Constructor
1488     */
1489      public ConceptReferenceDesignationComponent(String value) {
1490        super();
1491        this.setValue(value);
1492      }
1493
1494        /**
1495         * @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
1496         */
1497        public CodeType getLanguageElement() { 
1498          if (this.language == null)
1499            if (Configuration.errorOnAutoCreate())
1500              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.language");
1501            else if (Configuration.doAutoCreate())
1502              this.language = new CodeType(); // bb
1503          return this.language;
1504        }
1505
1506        public boolean hasLanguageElement() { 
1507          return this.language != null && !this.language.isEmpty();
1508        }
1509
1510        public boolean hasLanguage() { 
1511          return this.language != null && !this.language.isEmpty();
1512        }
1513
1514        /**
1515         * @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
1516         */
1517        public ConceptReferenceDesignationComponent setLanguageElement(CodeType value) { 
1518          this.language = value;
1519          return this;
1520        }
1521
1522        /**
1523         * @return The language this designation is defined for.
1524         */
1525        public String getLanguage() { 
1526          return this.language == null ? null : this.language.getValue();
1527        }
1528
1529        /**
1530         * @param value The language this designation is defined for.
1531         */
1532        public ConceptReferenceDesignationComponent setLanguage(String value) { 
1533          if (Utilities.noString(value))
1534            this.language = null;
1535          else {
1536            if (this.language == null)
1537              this.language = new CodeType();
1538            this.language.setValue(value);
1539          }
1540          return this;
1541        }
1542
1543        /**
1544         * @return {@link #use} (A code that represents types of uses of designations.)
1545         */
1546        public Coding getUse() { 
1547          if (this.use == null)
1548            if (Configuration.errorOnAutoCreate())
1549              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.use");
1550            else if (Configuration.doAutoCreate())
1551              this.use = new Coding(); // cc
1552          return this.use;
1553        }
1554
1555        public boolean hasUse() { 
1556          return this.use != null && !this.use.isEmpty();
1557        }
1558
1559        /**
1560         * @param value {@link #use} (A code that represents types of uses of designations.)
1561         */
1562        public ConceptReferenceDesignationComponent setUse(Coding value) { 
1563          this.use = value;
1564          return this;
1565        }
1566
1567        /**
1568         * @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
1569         */
1570        public StringType getValueElement() { 
1571          if (this.value == null)
1572            if (Configuration.errorOnAutoCreate())
1573              throw new Error("Attempt to auto-create ConceptReferenceDesignationComponent.value");
1574            else if (Configuration.doAutoCreate())
1575              this.value = new StringType(); // bb
1576          return this.value;
1577        }
1578
1579        public boolean hasValueElement() { 
1580          return this.value != null && !this.value.isEmpty();
1581        }
1582
1583        public boolean hasValue() { 
1584          return this.value != null && !this.value.isEmpty();
1585        }
1586
1587        /**
1588         * @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
1589         */
1590        public ConceptReferenceDesignationComponent setValueElement(StringType value) { 
1591          this.value = value;
1592          return this;
1593        }
1594
1595        /**
1596         * @return The text value for this designation.
1597         */
1598        public String getValue() { 
1599          return this.value == null ? null : this.value.getValue();
1600        }
1601
1602        /**
1603         * @param value The text value for this designation.
1604         */
1605        public ConceptReferenceDesignationComponent setValue(String value) { 
1606            if (this.value == null)
1607              this.value = new StringType();
1608            this.value.setValue(value);
1609          return this;
1610        }
1611
1612        protected void listChildren(List<Property> children) {
1613          super.listChildren(children);
1614          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1615          children.add(new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use));
1616          children.add(new Property("value", "string", "The text value for this designation.", 0, 1, value));
1617        }
1618
1619        @Override
1620        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1621          switch (_hash) {
1622          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1623          case 116103: /*use*/  return new Property("use", "Coding", "A code that represents types of uses of designations.", 0, 1, use);
1624          case 111972721: /*value*/  return new Property("value", "string", "The text value for this designation.", 0, 1, value);
1625          default: return super.getNamedProperty(_hash, _name, _checkValid);
1626          }
1627
1628        }
1629
1630      @Override
1631      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1632        switch (hash) {
1633        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1634        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1635        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
1636        default: return super.getProperty(hash, name, checkValid);
1637        }
1638
1639      }
1640
1641      @Override
1642      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1643        switch (hash) {
1644        case -1613589672: // language
1645          this.language = TypeConvertor.castToCode(value); // CodeType
1646          return value;
1647        case 116103: // use
1648          this.use = TypeConvertor.castToCoding(value); // Coding
1649          return value;
1650        case 111972721: // value
1651          this.value = TypeConvertor.castToString(value); // StringType
1652          return value;
1653        default: return super.setProperty(hash, name, value);
1654        }
1655
1656      }
1657
1658      @Override
1659      public Base setProperty(String name, Base value) throws FHIRException {
1660        if (name.equals("language")) {
1661          this.language = TypeConvertor.castToCode(value); // CodeType
1662        } else if (name.equals("use")) {
1663          this.use = TypeConvertor.castToCoding(value); // Coding
1664        } else if (name.equals("value")) {
1665          this.value = TypeConvertor.castToString(value); // StringType
1666        } else
1667          return super.setProperty(name, value);
1668        return value;
1669      }
1670
1671      @Override
1672      public Base makeProperty(int hash, String name) throws FHIRException {
1673        switch (hash) {
1674        case -1613589672:  return getLanguageElement();
1675        case 116103:  return getUse();
1676        case 111972721:  return getValueElement();
1677        default: return super.makeProperty(hash, name);
1678        }
1679
1680      }
1681
1682      @Override
1683      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1684        switch (hash) {
1685        case -1613589672: /*language*/ return new String[] {"code"};
1686        case 116103: /*use*/ return new String[] {"Coding"};
1687        case 111972721: /*value*/ return new String[] {"string"};
1688        default: return super.getTypesForProperty(hash, name);
1689        }
1690
1691      }
1692
1693      @Override
1694      public Base addChild(String name) throws FHIRException {
1695        if (name.equals("language")) {
1696          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.concept.designation.language");
1697        }
1698        else if (name.equals("use")) {
1699          this.use = new Coding();
1700          return this.use;
1701        }
1702        else if (name.equals("value")) {
1703          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.concept.designation.value");
1704        }
1705        else
1706          return super.addChild(name);
1707      }
1708
1709      public ConceptReferenceDesignationComponent copy() {
1710        ConceptReferenceDesignationComponent dst = new ConceptReferenceDesignationComponent();
1711        copyValues(dst);
1712        return dst;
1713      }
1714
1715      public void copyValues(ConceptReferenceDesignationComponent dst) {
1716        super.copyValues(dst);
1717        dst.language = language == null ? null : language.copy();
1718        dst.use = use == null ? null : use.copy();
1719        dst.value = value == null ? null : value.copy();
1720      }
1721
1722      @Override
1723      public boolean equalsDeep(Base other_) {
1724        if (!super.equalsDeep(other_))
1725          return false;
1726        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1727          return false;
1728        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1729        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true) && compareDeep(value, o.value, true)
1730          ;
1731      }
1732
1733      @Override
1734      public boolean equalsShallow(Base other_) {
1735        if (!super.equalsShallow(other_))
1736          return false;
1737        if (!(other_ instanceof ConceptReferenceDesignationComponent))
1738          return false;
1739        ConceptReferenceDesignationComponent o = (ConceptReferenceDesignationComponent) other_;
1740        return compareValues(language, o.language, true) && compareValues(value, o.value, true);
1741      }
1742
1743      public boolean isEmpty() {
1744        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use, value);
1745      }
1746
1747  public String fhirType() {
1748    return "ValueSet.compose.include.concept.designation";
1749
1750  }
1751
1752  }
1753
1754    @Block()
1755    public static class ConceptSetFilterComponent extends BackboneElement implements IBaseBackboneElement {
1756        /**
1757         * A code that identifies a property or a filter defined in the code system.
1758         */
1759        @Child(name = "property", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
1760        @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." )
1761        protected CodeType property;
1762
1763        /**
1764         * The kind of operation to perform as a part of the filter criteria.
1765         */
1766        @Child(name = "op", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1767        @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." )
1768        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/filter-operator")
1769        protected Enumeration<FilterOperator> op;
1770
1771        /**
1772         * 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'.
1773         */
1774        @Child(name = "value", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1775        @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'." )
1776        protected StringType value;
1777
1778        private static final long serialVersionUID = 1259153492L;
1779
1780    /**
1781     * Constructor
1782     */
1783      public ConceptSetFilterComponent() {
1784        super();
1785      }
1786
1787    /**
1788     * Constructor
1789     */
1790      public ConceptSetFilterComponent(String property, FilterOperator op, String value) {
1791        super();
1792        this.setProperty(property);
1793        this.setOp(op);
1794        this.setValue(value);
1795      }
1796
1797        /**
1798         * @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
1799         */
1800        public CodeType getPropertyElement() { 
1801          if (this.property == null)
1802            if (Configuration.errorOnAutoCreate())
1803              throw new Error("Attempt to auto-create ConceptSetFilterComponent.property");
1804            else if (Configuration.doAutoCreate())
1805              this.property = new CodeType(); // bb
1806          return this.property;
1807        }
1808
1809        public boolean hasPropertyElement() { 
1810          return this.property != null && !this.property.isEmpty();
1811        }
1812
1813        public boolean hasProperty() { 
1814          return this.property != null && !this.property.isEmpty();
1815        }
1816
1817        /**
1818         * @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
1819         */
1820        public ConceptSetFilterComponent setPropertyElement(CodeType value) { 
1821          this.property = value;
1822          return this;
1823        }
1824
1825        /**
1826         * @return A code that identifies a property or a filter defined in the code system.
1827         */
1828        public String getProperty() { 
1829          return this.property == null ? null : this.property.getValue();
1830        }
1831
1832        /**
1833         * @param value A code that identifies a property or a filter defined in the code system.
1834         */
1835        public ConceptSetFilterComponent setProperty(String value) { 
1836            if (this.property == null)
1837              this.property = new CodeType();
1838            this.property.setValue(value);
1839          return this;
1840        }
1841
1842        /**
1843         * @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
1844         */
1845        public Enumeration<FilterOperator> getOpElement() { 
1846          if (this.op == null)
1847            if (Configuration.errorOnAutoCreate())
1848              throw new Error("Attempt to auto-create ConceptSetFilterComponent.op");
1849            else if (Configuration.doAutoCreate())
1850              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory()); // bb
1851          return this.op;
1852        }
1853
1854        public boolean hasOpElement() { 
1855          return this.op != null && !this.op.isEmpty();
1856        }
1857
1858        public boolean hasOp() { 
1859          return this.op != null && !this.op.isEmpty();
1860        }
1861
1862        /**
1863         * @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
1864         */
1865        public ConceptSetFilterComponent setOpElement(Enumeration<FilterOperator> value) { 
1866          this.op = value;
1867          return this;
1868        }
1869
1870        /**
1871         * @return The kind of operation to perform as a part of the filter criteria.
1872         */
1873        public FilterOperator getOp() { 
1874          return this.op == null ? null : this.op.getValue();
1875        }
1876
1877        /**
1878         * @param value The kind of operation to perform as a part of the filter criteria.
1879         */
1880        public ConceptSetFilterComponent setOp(FilterOperator value) { 
1881            if (this.op == null)
1882              this.op = new Enumeration<FilterOperator>(new FilterOperatorEnumFactory());
1883            this.op.setValue(value);
1884          return this;
1885        }
1886
1887        /**
1888         * @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
1889         */
1890        public StringType getValueElement() { 
1891          if (this.value == null)
1892            if (Configuration.errorOnAutoCreate())
1893              throw new Error("Attempt to auto-create ConceptSetFilterComponent.value");
1894            else if (Configuration.doAutoCreate())
1895              this.value = new StringType(); // bb
1896          return this.value;
1897        }
1898
1899        public boolean hasValueElement() { 
1900          return this.value != null && !this.value.isEmpty();
1901        }
1902
1903        public boolean hasValue() { 
1904          return this.value != null && !this.value.isEmpty();
1905        }
1906
1907        /**
1908         * @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
1909         */
1910        public ConceptSetFilterComponent setValueElement(StringType value) { 
1911          this.value = value;
1912          return this;
1913        }
1914
1915        /**
1916         * @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'.
1917         */
1918        public String getValue() { 
1919          return this.value == null ? null : this.value.getValue();
1920        }
1921
1922        /**
1923         * @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'.
1924         */
1925        public ConceptSetFilterComponent setValue(String value) { 
1926            if (this.value == null)
1927              this.value = new StringType();
1928            this.value.setValue(value);
1929          return this;
1930        }
1931
1932        protected void listChildren(List<Property> children) {
1933          super.listChildren(children);
1934          children.add(new Property("property", "code", "A code that identifies a property or a filter defined in the code system.", 0, 1, property));
1935          children.add(new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op));
1936          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));
1937        }
1938
1939        @Override
1940        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1941          switch (_hash) {
1942          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);
1943          case 3553: /*op*/  return new Property("op", "code", "The kind of operation to perform as a part of the filter criteria.", 0, 1, op);
1944          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);
1945          default: return super.getNamedProperty(_hash, _name, _checkValid);
1946          }
1947
1948        }
1949
1950      @Override
1951      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1952        switch (hash) {
1953        case -993141291: /*property*/ return this.property == null ? new Base[0] : new Base[] {this.property}; // CodeType
1954        case 3553: /*op*/ return this.op == null ? new Base[0] : new Base[] {this.op}; // Enumeration<FilterOperator>
1955        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
1956        default: return super.getProperty(hash, name, checkValid);
1957        }
1958
1959      }
1960
1961      @Override
1962      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1963        switch (hash) {
1964        case -993141291: // property
1965          this.property = TypeConvertor.castToCode(value); // CodeType
1966          return value;
1967        case 3553: // op
1968          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
1969          this.op = (Enumeration) value; // Enumeration<FilterOperator>
1970          return value;
1971        case 111972721: // value
1972          this.value = TypeConvertor.castToString(value); // StringType
1973          return value;
1974        default: return super.setProperty(hash, name, value);
1975        }
1976
1977      }
1978
1979      @Override
1980      public Base setProperty(String name, Base value) throws FHIRException {
1981        if (name.equals("property")) {
1982          this.property = TypeConvertor.castToCode(value); // CodeType
1983        } else if (name.equals("op")) {
1984          value = new FilterOperatorEnumFactory().fromType(TypeConvertor.castToCode(value));
1985          this.op = (Enumeration) value; // Enumeration<FilterOperator>
1986        } else if (name.equals("value")) {
1987          this.value = TypeConvertor.castToString(value); // StringType
1988        } else
1989          return super.setProperty(name, value);
1990        return value;
1991      }
1992
1993      @Override
1994      public Base makeProperty(int hash, String name) throws FHIRException {
1995        switch (hash) {
1996        case -993141291:  return getPropertyElement();
1997        case 3553:  return getOpElement();
1998        case 111972721:  return getValueElement();
1999        default: return super.makeProperty(hash, name);
2000        }
2001
2002      }
2003
2004      @Override
2005      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2006        switch (hash) {
2007        case -993141291: /*property*/ return new String[] {"code"};
2008        case 3553: /*op*/ return new String[] {"code"};
2009        case 111972721: /*value*/ return new String[] {"string"};
2010        default: return super.getTypesForProperty(hash, name);
2011        }
2012
2013      }
2014
2015      @Override
2016      public Base addChild(String name) throws FHIRException {
2017        if (name.equals("property")) {
2018          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.filter.property");
2019        }
2020        else if (name.equals("op")) {
2021          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.filter.op");
2022        }
2023        else if (name.equals("value")) {
2024          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.compose.include.filter.value");
2025        }
2026        else
2027          return super.addChild(name);
2028      }
2029
2030      public ConceptSetFilterComponent copy() {
2031        ConceptSetFilterComponent dst = new ConceptSetFilterComponent();
2032        copyValues(dst);
2033        return dst;
2034      }
2035
2036      public void copyValues(ConceptSetFilterComponent dst) {
2037        super.copyValues(dst);
2038        dst.property = property == null ? null : property.copy();
2039        dst.op = op == null ? null : op.copy();
2040        dst.value = value == null ? null : value.copy();
2041      }
2042
2043      @Override
2044      public boolean equalsDeep(Base other_) {
2045        if (!super.equalsDeep(other_))
2046          return false;
2047        if (!(other_ instanceof ConceptSetFilterComponent))
2048          return false;
2049        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2050        return compareDeep(property, o.property, true) && compareDeep(op, o.op, true) && compareDeep(value, o.value, true)
2051          ;
2052      }
2053
2054      @Override
2055      public boolean equalsShallow(Base other_) {
2056        if (!super.equalsShallow(other_))
2057          return false;
2058        if (!(other_ instanceof ConceptSetFilterComponent))
2059          return false;
2060        ConceptSetFilterComponent o = (ConceptSetFilterComponent) other_;
2061        return compareValues(property, o.property, true) && compareValues(op, o.op, true) && compareValues(value, o.value, true)
2062          ;
2063      }
2064
2065      public boolean isEmpty() {
2066        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(property, op, value);
2067      }
2068
2069  public String fhirType() {
2070    return "ValueSet.compose.include.filter";
2071
2072  }
2073
2074  }
2075
2076    @Block()
2077    public static class ValueSetExpansionComponent extends BackboneElement implements IBaseBackboneElement {
2078        /**
2079         * 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.
2080         */
2081        @Child(name = "identifier", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
2082        @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." )
2083        protected UriType identifier;
2084
2085        /**
2086         * The time at which the expansion was produced by the expanding system.
2087         */
2088        @Child(name = "timestamp", type = {DateTimeType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2089        @Description(shortDefinition="Time ValueSet expansion happened", formalDefinition="The time at which the expansion was produced by the expanding system." )
2090        protected DateTimeType timestamp;
2091
2092        /**
2093         * 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.
2094         */
2095        @Child(name = "total", type = {IntegerType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2096        @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." )
2097        protected IntegerType total;
2098
2099        /**
2100         * 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.
2101         */
2102        @Child(name = "offset", type = {IntegerType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2103        @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." )
2104        protected IntegerType offset;
2105
2106        /**
2107         * 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.
2108         */
2109        @Child(name = "parameter", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2110        @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." )
2111        protected List<ValueSetExpansionParameterComponent> parameter;
2112
2113        /**
2114         * A property defines an additional slot through which additional information can be provided about a concept.
2115         */
2116        @Child(name = "property", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2117        @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." )
2118        protected List<ValueSetExpansionPropertyComponent> property;
2119
2120        /**
2121         * The codes that are contained in the value set expansion.
2122         */
2123        @Child(name = "contains", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2124        @Description(shortDefinition="Codes in the value set", formalDefinition="The codes that are contained in the value set expansion." )
2125        protected List<ValueSetExpansionContainsComponent> contains;
2126
2127        private static final long serialVersionUID = 12372258L;
2128
2129    /**
2130     * Constructor
2131     */
2132      public ValueSetExpansionComponent() {
2133        super();
2134      }
2135
2136    /**
2137     * Constructor
2138     */
2139      public ValueSetExpansionComponent(Date timestamp) {
2140        super();
2141        this.setTimestamp(timestamp);
2142      }
2143
2144        /**
2145         * @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
2146         */
2147        public UriType getIdentifierElement() { 
2148          if (this.identifier == null)
2149            if (Configuration.errorOnAutoCreate())
2150              throw new Error("Attempt to auto-create ValueSetExpansionComponent.identifier");
2151            else if (Configuration.doAutoCreate())
2152              this.identifier = new UriType(); // bb
2153          return this.identifier;
2154        }
2155
2156        public boolean hasIdentifierElement() { 
2157          return this.identifier != null && !this.identifier.isEmpty();
2158        }
2159
2160        public boolean hasIdentifier() { 
2161          return this.identifier != null && !this.identifier.isEmpty();
2162        }
2163
2164        /**
2165         * @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
2166         */
2167        public ValueSetExpansionComponent setIdentifierElement(UriType value) { 
2168          this.identifier = value;
2169          return this;
2170        }
2171
2172        /**
2173         * @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.
2174         */
2175        public String getIdentifier() { 
2176          return this.identifier == null ? null : this.identifier.getValue();
2177        }
2178
2179        /**
2180         * @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.
2181         */
2182        public ValueSetExpansionComponent setIdentifier(String value) { 
2183          if (Utilities.noString(value))
2184            this.identifier = null;
2185          else {
2186            if (this.identifier == null)
2187              this.identifier = new UriType();
2188            this.identifier.setValue(value);
2189          }
2190          return this;
2191        }
2192
2193        /**
2194         * @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
2195         */
2196        public DateTimeType getTimestampElement() { 
2197          if (this.timestamp == null)
2198            if (Configuration.errorOnAutoCreate())
2199              throw new Error("Attempt to auto-create ValueSetExpansionComponent.timestamp");
2200            else if (Configuration.doAutoCreate())
2201              this.timestamp = new DateTimeType(); // bb
2202          return this.timestamp;
2203        }
2204
2205        public boolean hasTimestampElement() { 
2206          return this.timestamp != null && !this.timestamp.isEmpty();
2207        }
2208
2209        public boolean hasTimestamp() { 
2210          return this.timestamp != null && !this.timestamp.isEmpty();
2211        }
2212
2213        /**
2214         * @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
2215         */
2216        public ValueSetExpansionComponent setTimestampElement(DateTimeType value) { 
2217          this.timestamp = value;
2218          return this;
2219        }
2220
2221        /**
2222         * @return The time at which the expansion was produced by the expanding system.
2223         */
2224        public Date getTimestamp() { 
2225          return this.timestamp == null ? null : this.timestamp.getValue();
2226        }
2227
2228        /**
2229         * @param value The time at which the expansion was produced by the expanding system.
2230         */
2231        public ValueSetExpansionComponent setTimestamp(Date value) { 
2232            if (this.timestamp == null)
2233              this.timestamp = new DateTimeType();
2234            this.timestamp.setValue(value);
2235          return this;
2236        }
2237
2238        /**
2239         * @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
2240         */
2241        public IntegerType getTotalElement() { 
2242          if (this.total == null)
2243            if (Configuration.errorOnAutoCreate())
2244              throw new Error("Attempt to auto-create ValueSetExpansionComponent.total");
2245            else if (Configuration.doAutoCreate())
2246              this.total = new IntegerType(); // bb
2247          return this.total;
2248        }
2249
2250        public boolean hasTotalElement() { 
2251          return this.total != null && !this.total.isEmpty();
2252        }
2253
2254        public boolean hasTotal() { 
2255          return this.total != null && !this.total.isEmpty();
2256        }
2257
2258        /**
2259         * @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
2260         */
2261        public ValueSetExpansionComponent setTotalElement(IntegerType value) { 
2262          this.total = value;
2263          return this;
2264        }
2265
2266        /**
2267         * @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.
2268         */
2269        public int getTotal() { 
2270          return this.total == null || this.total.isEmpty() ? 0 : this.total.getValue();
2271        }
2272
2273        /**
2274         * @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.
2275         */
2276        public ValueSetExpansionComponent setTotal(int value) { 
2277            if (this.total == null)
2278              this.total = new IntegerType();
2279            this.total.setValue(value);
2280          return this;
2281        }
2282
2283        /**
2284         * @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
2285         */
2286        public IntegerType getOffsetElement() { 
2287          if (this.offset == null)
2288            if (Configuration.errorOnAutoCreate())
2289              throw new Error("Attempt to auto-create ValueSetExpansionComponent.offset");
2290            else if (Configuration.doAutoCreate())
2291              this.offset = new IntegerType(); // bb
2292          return this.offset;
2293        }
2294
2295        public boolean hasOffsetElement() { 
2296          return this.offset != null && !this.offset.isEmpty();
2297        }
2298
2299        public boolean hasOffset() { 
2300          return this.offset != null && !this.offset.isEmpty();
2301        }
2302
2303        /**
2304         * @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
2305         */
2306        public ValueSetExpansionComponent setOffsetElement(IntegerType value) { 
2307          this.offset = value;
2308          return this;
2309        }
2310
2311        /**
2312         * @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.
2313         */
2314        public int getOffset() { 
2315          return this.offset == null || this.offset.isEmpty() ? 0 : this.offset.getValue();
2316        }
2317
2318        /**
2319         * @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.
2320         */
2321        public ValueSetExpansionComponent setOffset(int value) { 
2322            if (this.offset == null)
2323              this.offset = new IntegerType();
2324            this.offset.setValue(value);
2325          return this;
2326        }
2327
2328        /**
2329         * @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.)
2330         */
2331        public List<ValueSetExpansionParameterComponent> getParameter() { 
2332          if (this.parameter == null)
2333            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2334          return this.parameter;
2335        }
2336
2337        /**
2338         * @return Returns a reference to <code>this</code> for easy method chaining
2339         */
2340        public ValueSetExpansionComponent setParameter(List<ValueSetExpansionParameterComponent> theParameter) { 
2341          this.parameter = theParameter;
2342          return this;
2343        }
2344
2345        public boolean hasParameter() { 
2346          if (this.parameter == null)
2347            return false;
2348          for (ValueSetExpansionParameterComponent item : this.parameter)
2349            if (!item.isEmpty())
2350              return true;
2351          return false;
2352        }
2353
2354        public ValueSetExpansionParameterComponent addParameter() { //3
2355          ValueSetExpansionParameterComponent t = new ValueSetExpansionParameterComponent();
2356          if (this.parameter == null)
2357            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2358          this.parameter.add(t);
2359          return t;
2360        }
2361
2362        public ValueSetExpansionComponent addParameter(ValueSetExpansionParameterComponent t) { //3
2363          if (t == null)
2364            return this;
2365          if (this.parameter == null)
2366            this.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2367          this.parameter.add(t);
2368          return this;
2369        }
2370
2371        /**
2372         * @return The first repetition of repeating field {@link #parameter}, creating it if it does not already exist {3}
2373         */
2374        public ValueSetExpansionParameterComponent getParameterFirstRep() { 
2375          if (getParameter().isEmpty()) {
2376            addParameter();
2377          }
2378          return getParameter().get(0);
2379        }
2380
2381        /**
2382         * @return {@link #property} (A property defines an additional slot through which additional information can be provided about a concept.)
2383         */
2384        public List<ValueSetExpansionPropertyComponent> getProperty() { 
2385          if (this.property == null)
2386            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2387          return this.property;
2388        }
2389
2390        /**
2391         * @return Returns a reference to <code>this</code> for easy method chaining
2392         */
2393        public ValueSetExpansionComponent setProperty(List<ValueSetExpansionPropertyComponent> theProperty) { 
2394          this.property = theProperty;
2395          return this;
2396        }
2397
2398        public boolean hasProperty() { 
2399          if (this.property == null)
2400            return false;
2401          for (ValueSetExpansionPropertyComponent item : this.property)
2402            if (!item.isEmpty())
2403              return true;
2404          return false;
2405        }
2406
2407        public ValueSetExpansionPropertyComponent addProperty() { //3
2408          ValueSetExpansionPropertyComponent t = new ValueSetExpansionPropertyComponent();
2409          if (this.property == null)
2410            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2411          this.property.add(t);
2412          return t;
2413        }
2414
2415        public ValueSetExpansionComponent addProperty(ValueSetExpansionPropertyComponent t) { //3
2416          if (t == null)
2417            return this;
2418          if (this.property == null)
2419            this.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2420          this.property.add(t);
2421          return this;
2422        }
2423
2424        /**
2425         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
2426         */
2427        public ValueSetExpansionPropertyComponent getPropertyFirstRep() { 
2428          if (getProperty().isEmpty()) {
2429            addProperty();
2430          }
2431          return getProperty().get(0);
2432        }
2433
2434        /**
2435         * @return {@link #contains} (The codes that are contained in the value set expansion.)
2436         */
2437        public List<ValueSetExpansionContainsComponent> getContains() { 
2438          if (this.contains == null)
2439            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2440          return this.contains;
2441        }
2442
2443        /**
2444         * @return Returns a reference to <code>this</code> for easy method chaining
2445         */
2446        public ValueSetExpansionComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
2447          this.contains = theContains;
2448          return this;
2449        }
2450
2451        public boolean hasContains() { 
2452          if (this.contains == null)
2453            return false;
2454          for (ValueSetExpansionContainsComponent item : this.contains)
2455            if (!item.isEmpty())
2456              return true;
2457          return false;
2458        }
2459
2460        public ValueSetExpansionContainsComponent addContains() { //3
2461          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
2462          if (this.contains == null)
2463            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2464          this.contains.add(t);
2465          return t;
2466        }
2467
2468        public ValueSetExpansionComponent addContains(ValueSetExpansionContainsComponent t) { //3
2469          if (t == null)
2470            return this;
2471          if (this.contains == null)
2472            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2473          this.contains.add(t);
2474          return this;
2475        }
2476
2477        /**
2478         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
2479         */
2480        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
2481          if (getContains().isEmpty()) {
2482            addContains();
2483          }
2484          return getContains().get(0);
2485        }
2486
2487        protected void listChildren(List<Property> children) {
2488          super.listChildren(children);
2489          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));
2490          children.add(new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp));
2491          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));
2492          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));
2493          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));
2494          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));
2495          children.add(new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains));
2496        }
2497
2498        @Override
2499        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2500          switch (_hash) {
2501          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);
2502          case 55126294: /*timestamp*/  return new Property("timestamp", "dateTime", "The time at which the expansion was produced by the expanding system.", 0, 1, timestamp);
2503          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);
2504          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);
2505          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);
2506          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);
2507          case -567445985: /*contains*/  return new Property("contains", "", "The codes that are contained in the value set expansion.", 0, java.lang.Integer.MAX_VALUE, contains);
2508          default: return super.getNamedProperty(_hash, _name, _checkValid);
2509          }
2510
2511        }
2512
2513      @Override
2514      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2515        switch (hash) {
2516        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // UriType
2517        case 55126294: /*timestamp*/ return this.timestamp == null ? new Base[0] : new Base[] {this.timestamp}; // DateTimeType
2518        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // IntegerType
2519        case -1019779949: /*offset*/ return this.offset == null ? new Base[0] : new Base[] {this.offset}; // IntegerType
2520        case 1954460585: /*parameter*/ return this.parameter == null ? new Base[0] : this.parameter.toArray(new Base[this.parameter.size()]); // ValueSetExpansionParameterComponent
2521        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ValueSetExpansionPropertyComponent
2522        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
2523        default: return super.getProperty(hash, name, checkValid);
2524        }
2525
2526      }
2527
2528      @Override
2529      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2530        switch (hash) {
2531        case -1618432855: // identifier
2532          this.identifier = TypeConvertor.castToUri(value); // UriType
2533          return value;
2534        case 55126294: // timestamp
2535          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2536          return value;
2537        case 110549828: // total
2538          this.total = TypeConvertor.castToInteger(value); // IntegerType
2539          return value;
2540        case -1019779949: // offset
2541          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2542          return value;
2543        case 1954460585: // parameter
2544          this.getParameter().add((ValueSetExpansionParameterComponent) value); // ValueSetExpansionParameterComponent
2545          return value;
2546        case -993141291: // property
2547          this.getProperty().add((ValueSetExpansionPropertyComponent) value); // ValueSetExpansionPropertyComponent
2548          return value;
2549        case -567445985: // contains
2550          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
2551          return value;
2552        default: return super.setProperty(hash, name, value);
2553        }
2554
2555      }
2556
2557      @Override
2558      public Base setProperty(String name, Base value) throws FHIRException {
2559        if (name.equals("identifier")) {
2560          this.identifier = TypeConvertor.castToUri(value); // UriType
2561        } else if (name.equals("timestamp")) {
2562          this.timestamp = TypeConvertor.castToDateTime(value); // DateTimeType
2563        } else if (name.equals("total")) {
2564          this.total = TypeConvertor.castToInteger(value); // IntegerType
2565        } else if (name.equals("offset")) {
2566          this.offset = TypeConvertor.castToInteger(value); // IntegerType
2567        } else if (name.equals("parameter")) {
2568          this.getParameter().add((ValueSetExpansionParameterComponent) value);
2569        } else if (name.equals("property")) {
2570          this.getProperty().add((ValueSetExpansionPropertyComponent) value);
2571        } else if (name.equals("contains")) {
2572          this.getContains().add((ValueSetExpansionContainsComponent) value);
2573        } else
2574          return super.setProperty(name, value);
2575        return value;
2576      }
2577
2578      @Override
2579      public Base makeProperty(int hash, String name) throws FHIRException {
2580        switch (hash) {
2581        case -1618432855:  return getIdentifierElement();
2582        case 55126294:  return getTimestampElement();
2583        case 110549828:  return getTotalElement();
2584        case -1019779949:  return getOffsetElement();
2585        case 1954460585:  return addParameter(); 
2586        case -993141291:  return addProperty(); 
2587        case -567445985:  return addContains(); 
2588        default: return super.makeProperty(hash, name);
2589        }
2590
2591      }
2592
2593      @Override
2594      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2595        switch (hash) {
2596        case -1618432855: /*identifier*/ return new String[] {"uri"};
2597        case 55126294: /*timestamp*/ return new String[] {"dateTime"};
2598        case 110549828: /*total*/ return new String[] {"integer"};
2599        case -1019779949: /*offset*/ return new String[] {"integer"};
2600        case 1954460585: /*parameter*/ return new String[] {};
2601        case -993141291: /*property*/ return new String[] {};
2602        case -567445985: /*contains*/ return new String[] {};
2603        default: return super.getTypesForProperty(hash, name);
2604        }
2605
2606      }
2607
2608      @Override
2609      public Base addChild(String name) throws FHIRException {
2610        if (name.equals("identifier")) {
2611          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.identifier");
2612        }
2613        else if (name.equals("timestamp")) {
2614          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.timestamp");
2615        }
2616        else if (name.equals("total")) {
2617          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.total");
2618        }
2619        else if (name.equals("offset")) {
2620          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.offset");
2621        }
2622        else if (name.equals("parameter")) {
2623          return addParameter();
2624        }
2625        else if (name.equals("property")) {
2626          return addProperty();
2627        }
2628        else if (name.equals("contains")) {
2629          return addContains();
2630        }
2631        else
2632          return super.addChild(name);
2633      }
2634
2635      public ValueSetExpansionComponent copy() {
2636        ValueSetExpansionComponent dst = new ValueSetExpansionComponent();
2637        copyValues(dst);
2638        return dst;
2639      }
2640
2641      public void copyValues(ValueSetExpansionComponent dst) {
2642        super.copyValues(dst);
2643        dst.identifier = identifier == null ? null : identifier.copy();
2644        dst.timestamp = timestamp == null ? null : timestamp.copy();
2645        dst.total = total == null ? null : total.copy();
2646        dst.offset = offset == null ? null : offset.copy();
2647        if (parameter != null) {
2648          dst.parameter = new ArrayList<ValueSetExpansionParameterComponent>();
2649          for (ValueSetExpansionParameterComponent i : parameter)
2650            dst.parameter.add(i.copy());
2651        };
2652        if (property != null) {
2653          dst.property = new ArrayList<ValueSetExpansionPropertyComponent>();
2654          for (ValueSetExpansionPropertyComponent i : property)
2655            dst.property.add(i.copy());
2656        };
2657        if (contains != null) {
2658          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
2659          for (ValueSetExpansionContainsComponent i : contains)
2660            dst.contains.add(i.copy());
2661        };
2662      }
2663
2664      @Override
2665      public boolean equalsDeep(Base other_) {
2666        if (!super.equalsDeep(other_))
2667          return false;
2668        if (!(other_ instanceof ValueSetExpansionComponent))
2669          return false;
2670        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2671        return compareDeep(identifier, o.identifier, true) && compareDeep(timestamp, o.timestamp, true)
2672           && compareDeep(total, o.total, true) && compareDeep(offset, o.offset, true) && compareDeep(parameter, o.parameter, true)
2673           && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true);
2674      }
2675
2676      @Override
2677      public boolean equalsShallow(Base other_) {
2678        if (!super.equalsShallow(other_))
2679          return false;
2680        if (!(other_ instanceof ValueSetExpansionComponent))
2681          return false;
2682        ValueSetExpansionComponent o = (ValueSetExpansionComponent) other_;
2683        return compareValues(identifier, o.identifier, true) && compareValues(timestamp, o.timestamp, true)
2684           && compareValues(total, o.total, true) && compareValues(offset, o.offset, true);
2685      }
2686
2687      public boolean isEmpty() {
2688        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, timestamp, total
2689          , offset, parameter, property, contains);
2690      }
2691
2692  public String fhirType() {
2693    return "ValueSet.expansion";
2694
2695  }
2696
2697  }
2698
2699    @Block()
2700    public static class ValueSetExpansionParameterComponent extends BackboneElement implements IBaseBackboneElement {
2701        /**
2702         * 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.
2703         */
2704        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2705        @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." )
2706        protected StringType name;
2707
2708        /**
2709         * The value of the parameter.
2710         */
2711        @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)
2712        @Description(shortDefinition="Value of the named parameter", formalDefinition="The value of the parameter." )
2713        protected DataType value;
2714
2715        private static final long serialVersionUID = 1839679495L;
2716
2717    /**
2718     * Constructor
2719     */
2720      public ValueSetExpansionParameterComponent() {
2721        super();
2722      }
2723
2724    /**
2725     * Constructor
2726     */
2727      public ValueSetExpansionParameterComponent(String name) {
2728        super();
2729        this.setName(name);
2730      }
2731
2732        /**
2733         * @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
2734         */
2735        public StringType getNameElement() { 
2736          if (this.name == null)
2737            if (Configuration.errorOnAutoCreate())
2738              throw new Error("Attempt to auto-create ValueSetExpansionParameterComponent.name");
2739            else if (Configuration.doAutoCreate())
2740              this.name = new StringType(); // bb
2741          return this.name;
2742        }
2743
2744        public boolean hasNameElement() { 
2745          return this.name != null && !this.name.isEmpty();
2746        }
2747
2748        public boolean hasName() { 
2749          return this.name != null && !this.name.isEmpty();
2750        }
2751
2752        /**
2753         * @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
2754         */
2755        public ValueSetExpansionParameterComponent setNameElement(StringType value) { 
2756          this.name = value;
2757          return this;
2758        }
2759
2760        /**
2761         * @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.
2762         */
2763        public String getName() { 
2764          return this.name == null ? null : this.name.getValue();
2765        }
2766
2767        /**
2768         * @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.
2769         */
2770        public ValueSetExpansionParameterComponent setName(String value) { 
2771            if (this.name == null)
2772              this.name = new StringType();
2773            this.name.setValue(value);
2774          return this;
2775        }
2776
2777        /**
2778         * @return {@link #value} (The value of the parameter.)
2779         */
2780        public DataType getValue() { 
2781          return this.value;
2782        }
2783
2784        /**
2785         * @return {@link #value} (The value of the parameter.)
2786         */
2787        public StringType getValueStringType() throws FHIRException { 
2788          if (this.value == null)
2789            this.value = new StringType();
2790          if (!(this.value instanceof StringType))
2791            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2792          return (StringType) this.value;
2793        }
2794
2795        public boolean hasValueStringType() { 
2796          return this != null && this.value instanceof StringType;
2797        }
2798
2799        /**
2800         * @return {@link #value} (The value of the parameter.)
2801         */
2802        public BooleanType getValueBooleanType() throws FHIRException { 
2803          if (this.value == null)
2804            this.value = new BooleanType();
2805          if (!(this.value instanceof BooleanType))
2806            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2807          return (BooleanType) this.value;
2808        }
2809
2810        public boolean hasValueBooleanType() { 
2811          return this != null && this.value instanceof BooleanType;
2812        }
2813
2814        /**
2815         * @return {@link #value} (The value of the parameter.)
2816         */
2817        public IntegerType getValueIntegerType() throws FHIRException { 
2818          if (this.value == null)
2819            this.value = new IntegerType();
2820          if (!(this.value instanceof IntegerType))
2821            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2822          return (IntegerType) this.value;
2823        }
2824
2825        public boolean hasValueIntegerType() { 
2826          return this != null && this.value instanceof IntegerType;
2827        }
2828
2829        /**
2830         * @return {@link #value} (The value of the parameter.)
2831         */
2832        public DecimalType getValueDecimalType() throws FHIRException { 
2833          if (this.value == null)
2834            this.value = new DecimalType();
2835          if (!(this.value instanceof DecimalType))
2836            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
2837          return (DecimalType) this.value;
2838        }
2839
2840        public boolean hasValueDecimalType() { 
2841          return this != null && this.value instanceof DecimalType;
2842        }
2843
2844        /**
2845         * @return {@link #value} (The value of the parameter.)
2846         */
2847        public UriType getValueUriType() throws FHIRException { 
2848          if (this.value == null)
2849            this.value = new UriType();
2850          if (!(this.value instanceof UriType))
2851            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.value.getClass().getName()+" was encountered");
2852          return (UriType) this.value;
2853        }
2854
2855        public boolean hasValueUriType() { 
2856          return this != null && this.value instanceof UriType;
2857        }
2858
2859        /**
2860         * @return {@link #value} (The value of the parameter.)
2861         */
2862        public CodeType getValueCodeType() throws FHIRException { 
2863          if (this.value == null)
2864            this.value = new CodeType();
2865          if (!(this.value instanceof CodeType))
2866            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
2867          return (CodeType) this.value;
2868        }
2869
2870        public boolean hasValueCodeType() { 
2871          return this != null && this.value instanceof CodeType;
2872        }
2873
2874        /**
2875         * @return {@link #value} (The value of the parameter.)
2876         */
2877        public DateTimeType getValueDateTimeType() throws FHIRException { 
2878          if (this.value == null)
2879            this.value = new DateTimeType();
2880          if (!(this.value instanceof DateTimeType))
2881            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2882          return (DateTimeType) this.value;
2883        }
2884
2885        public boolean hasValueDateTimeType() { 
2886          return this != null && this.value instanceof DateTimeType;
2887        }
2888
2889        public boolean hasValue() { 
2890          return this.value != null && !this.value.isEmpty();
2891        }
2892
2893        /**
2894         * @param value {@link #value} (The value of the parameter.)
2895         */
2896        public ValueSetExpansionParameterComponent setValue(DataType value) { 
2897          if (value != null && !(value instanceof StringType || value instanceof BooleanType || value instanceof IntegerType || value instanceof DecimalType || value instanceof UriType || value instanceof CodeType || value instanceof DateTimeType))
2898            throw new Error("Not the right type for ValueSet.expansion.parameter.value[x]: "+value.fhirType());
2899          this.value = value;
2900          return this;
2901        }
2902
2903        protected void listChildren(List<Property> children) {
2904          super.listChildren(children);
2905          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));
2906          children.add(new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value));
2907        }
2908
2909        @Override
2910        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2911          switch (_hash) {
2912          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);
2913          case -1410166417: /*value[x]*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
2914          case 111972721: /*value*/  return new Property("value[x]", "string|boolean|integer|decimal|uri|code|dateTime", "The value of the parameter.", 0, 1, value);
2915          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of the parameter.", 0, 1, value);
2916          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of the parameter.", 0, 1, value);
2917          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of the parameter.", 0, 1, value);
2918          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of the parameter.", 0, 1, value);
2919          case -1410172357: /*valueUri*/  return new Property("value[x]", "uri", "The value of the parameter.", 0, 1, value);
2920          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of the parameter.", 0, 1, value);
2921          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of the parameter.", 0, 1, value);
2922          default: return super.getNamedProperty(_hash, _name, _checkValid);
2923          }
2924
2925        }
2926
2927      @Override
2928      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2929        switch (hash) {
2930        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2931        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
2932        default: return super.getProperty(hash, name, checkValid);
2933        }
2934
2935      }
2936
2937      @Override
2938      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2939        switch (hash) {
2940        case 3373707: // name
2941          this.name = TypeConvertor.castToString(value); // StringType
2942          return value;
2943        case 111972721: // value
2944          this.value = TypeConvertor.castToType(value); // DataType
2945          return value;
2946        default: return super.setProperty(hash, name, value);
2947        }
2948
2949      }
2950
2951      @Override
2952      public Base setProperty(String name, Base value) throws FHIRException {
2953        if (name.equals("name")) {
2954          this.name = TypeConvertor.castToString(value); // StringType
2955        } else if (name.equals("value[x]")) {
2956          this.value = TypeConvertor.castToType(value); // DataType
2957        } else
2958          return super.setProperty(name, value);
2959        return value;
2960      }
2961
2962      @Override
2963      public Base makeProperty(int hash, String name) throws FHIRException {
2964        switch (hash) {
2965        case 3373707:  return getNameElement();
2966        case -1410166417:  return getValue();
2967        case 111972721:  return getValue();
2968        default: return super.makeProperty(hash, name);
2969        }
2970
2971      }
2972
2973      @Override
2974      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2975        switch (hash) {
2976        case 3373707: /*name*/ return new String[] {"string"};
2977        case 111972721: /*value*/ return new String[] {"string", "boolean", "integer", "decimal", "uri", "code", "dateTime"};
2978        default: return super.getTypesForProperty(hash, name);
2979        }
2980
2981      }
2982
2983      @Override
2984      public Base addChild(String name) throws FHIRException {
2985        if (name.equals("name")) {
2986          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.parameter.name");
2987        }
2988        else if (name.equals("valueString")) {
2989          this.value = new StringType();
2990          return this.value;
2991        }
2992        else if (name.equals("valueBoolean")) {
2993          this.value = new BooleanType();
2994          return this.value;
2995        }
2996        else if (name.equals("valueInteger")) {
2997          this.value = new IntegerType();
2998          return this.value;
2999        }
3000        else if (name.equals("valueDecimal")) {
3001          this.value = new DecimalType();
3002          return this.value;
3003        }
3004        else if (name.equals("valueUri")) {
3005          this.value = new UriType();
3006          return this.value;
3007        }
3008        else if (name.equals("valueCode")) {
3009          this.value = new CodeType();
3010          return this.value;
3011        }
3012        else if (name.equals("valueDateTime")) {
3013          this.value = new DateTimeType();
3014          return this.value;
3015        }
3016        else
3017          return super.addChild(name);
3018      }
3019
3020      public ValueSetExpansionParameterComponent copy() {
3021        ValueSetExpansionParameterComponent dst = new ValueSetExpansionParameterComponent();
3022        copyValues(dst);
3023        return dst;
3024      }
3025
3026      public void copyValues(ValueSetExpansionParameterComponent dst) {
3027        super.copyValues(dst);
3028        dst.name = name == null ? null : name.copy();
3029        dst.value = value == null ? null : value.copy();
3030      }
3031
3032      @Override
3033      public boolean equalsDeep(Base other_) {
3034        if (!super.equalsDeep(other_))
3035          return false;
3036        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3037          return false;
3038        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3039        return compareDeep(name, o.name, true) && compareDeep(value, o.value, true);
3040      }
3041
3042      @Override
3043      public boolean equalsShallow(Base other_) {
3044        if (!super.equalsShallow(other_))
3045          return false;
3046        if (!(other_ instanceof ValueSetExpansionParameterComponent))
3047          return false;
3048        ValueSetExpansionParameterComponent o = (ValueSetExpansionParameterComponent) other_;
3049        return compareValues(name, o.name, true);
3050      }
3051
3052      public boolean isEmpty() {
3053        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, value);
3054      }
3055
3056  public String fhirType() {
3057    return "ValueSet.expansion.parameter";
3058
3059  }
3060
3061  }
3062
3063    @Block()
3064    public static class ValueSetExpansionPropertyComponent extends BackboneElement implements IBaseBackboneElement {
3065        /**
3066         * A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3067         */
3068        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3069        @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." )
3070        protected CodeType code;
3071
3072        /**
3073         * Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3074         */
3075        @Child(name = "uri", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3076        @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." )
3077        protected UriType uri;
3078
3079        private static final long serialVersionUID = 929575836L;
3080
3081    /**
3082     * Constructor
3083     */
3084      public ValueSetExpansionPropertyComponent() {
3085        super();
3086      }
3087
3088    /**
3089     * Constructor
3090     */
3091      public ValueSetExpansionPropertyComponent(String code) {
3092        super();
3093        this.setCode(code);
3094      }
3095
3096        /**
3097         * @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
3098         */
3099        public CodeType getCodeElement() { 
3100          if (this.code == null)
3101            if (Configuration.errorOnAutoCreate())
3102              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.code");
3103            else if (Configuration.doAutoCreate())
3104              this.code = new CodeType(); // bb
3105          return this.code;
3106        }
3107
3108        public boolean hasCodeElement() { 
3109          return this.code != null && !this.code.isEmpty();
3110        }
3111
3112        public boolean hasCode() { 
3113          return this.code != null && !this.code.isEmpty();
3114        }
3115
3116        /**
3117         * @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
3118         */
3119        public ValueSetExpansionPropertyComponent setCodeElement(CodeType value) { 
3120          this.code = value;
3121          return this;
3122        }
3123
3124        /**
3125         * @return A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3126         */
3127        public String getCode() { 
3128          return this.code == null ? null : this.code.getValue();
3129        }
3130
3131        /**
3132         * @param value A code that is used to identify the property. The code is used in ValueSet.expansion.contains.property.code.
3133         */
3134        public ValueSetExpansionPropertyComponent setCode(String value) { 
3135            if (this.code == null)
3136              this.code = new CodeType();
3137            this.code.setValue(value);
3138          return this;
3139        }
3140
3141        /**
3142         * @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
3143         */
3144        public UriType getUriElement() { 
3145          if (this.uri == null)
3146            if (Configuration.errorOnAutoCreate())
3147              throw new Error("Attempt to auto-create ValueSetExpansionPropertyComponent.uri");
3148            else if (Configuration.doAutoCreate())
3149              this.uri = new UriType(); // bb
3150          return this.uri;
3151        }
3152
3153        public boolean hasUriElement() { 
3154          return this.uri != null && !this.uri.isEmpty();
3155        }
3156
3157        public boolean hasUri() { 
3158          return this.uri != null && !this.uri.isEmpty();
3159        }
3160
3161        /**
3162         * @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
3163         */
3164        public ValueSetExpansionPropertyComponent setUriElement(UriType value) { 
3165          this.uri = value;
3166          return this;
3167        }
3168
3169        /**
3170         * @return Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.
3171         */
3172        public String getUri() { 
3173          return this.uri == null ? null : this.uri.getValue();
3174        }
3175
3176        /**
3177         * @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.
3178         */
3179        public ValueSetExpansionPropertyComponent setUri(String value) { 
3180          if (Utilities.noString(value))
3181            this.uri = null;
3182          else {
3183            if (this.uri == null)
3184              this.uri = new UriType();
3185            this.uri.setValue(value);
3186          }
3187          return this;
3188        }
3189
3190        protected void listChildren(List<Property> children) {
3191          super.listChildren(children);
3192          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));
3193          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));
3194        }
3195
3196        @Override
3197        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3198          switch (_hash) {
3199          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);
3200          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);
3201          default: return super.getNamedProperty(_hash, _name, _checkValid);
3202          }
3203
3204        }
3205
3206      @Override
3207      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3208        switch (hash) {
3209        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3210        case 116076: /*uri*/ return this.uri == null ? new Base[0] : new Base[] {this.uri}; // UriType
3211        default: return super.getProperty(hash, name, checkValid);
3212        }
3213
3214      }
3215
3216      @Override
3217      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3218        switch (hash) {
3219        case 3059181: // code
3220          this.code = TypeConvertor.castToCode(value); // CodeType
3221          return value;
3222        case 116076: // uri
3223          this.uri = TypeConvertor.castToUri(value); // UriType
3224          return value;
3225        default: return super.setProperty(hash, name, value);
3226        }
3227
3228      }
3229
3230      @Override
3231      public Base setProperty(String name, Base value) throws FHIRException {
3232        if (name.equals("code")) {
3233          this.code = TypeConvertor.castToCode(value); // CodeType
3234        } else if (name.equals("uri")) {
3235          this.uri = TypeConvertor.castToUri(value); // UriType
3236        } else
3237          return super.setProperty(name, value);
3238        return value;
3239      }
3240
3241      @Override
3242      public Base makeProperty(int hash, String name) throws FHIRException {
3243        switch (hash) {
3244        case 3059181:  return getCodeElement();
3245        case 116076:  return getUriElement();
3246        default: return super.makeProperty(hash, name);
3247        }
3248
3249      }
3250
3251      @Override
3252      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3253        switch (hash) {
3254        case 3059181: /*code*/ return new String[] {"code"};
3255        case 116076: /*uri*/ return new String[] {"uri"};
3256        default: return super.getTypesForProperty(hash, name);
3257        }
3258
3259      }
3260
3261      @Override
3262      public Base addChild(String name) throws FHIRException {
3263        if (name.equals("code")) {
3264          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.property.code");
3265        }
3266        else if (name.equals("uri")) {
3267          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.property.uri");
3268        }
3269        else
3270          return super.addChild(name);
3271      }
3272
3273      public ValueSetExpansionPropertyComponent copy() {
3274        ValueSetExpansionPropertyComponent dst = new ValueSetExpansionPropertyComponent();
3275        copyValues(dst);
3276        return dst;
3277      }
3278
3279      public void copyValues(ValueSetExpansionPropertyComponent dst) {
3280        super.copyValues(dst);
3281        dst.code = code == null ? null : code.copy();
3282        dst.uri = uri == null ? null : uri.copy();
3283      }
3284
3285      @Override
3286      public boolean equalsDeep(Base other_) {
3287        if (!super.equalsDeep(other_))
3288          return false;
3289        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3290          return false;
3291        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3292        return compareDeep(code, o.code, true) && compareDeep(uri, o.uri, true);
3293      }
3294
3295      @Override
3296      public boolean equalsShallow(Base other_) {
3297        if (!super.equalsShallow(other_))
3298          return false;
3299        if (!(other_ instanceof ValueSetExpansionPropertyComponent))
3300          return false;
3301        ValueSetExpansionPropertyComponent o = (ValueSetExpansionPropertyComponent) other_;
3302        return compareValues(code, o.code, true) && compareValues(uri, o.uri, true);
3303      }
3304
3305      public boolean isEmpty() {
3306        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, uri);
3307      }
3308
3309  public String fhirType() {
3310    return "ValueSet.expansion.property";
3311
3312  }
3313
3314  }
3315
3316    @Block()
3317    public static class ValueSetExpansionContainsComponent extends BackboneElement implements IBaseBackboneElement {
3318        /**
3319         * An absolute URI which is the code system in which the code for this item in the expansion is defined.
3320         */
3321        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
3322        @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." )
3323        protected UriType system;
3324
3325        /**
3326         * If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.
3327         */
3328        @Child(name = "abstract", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3329        @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." )
3330        protected BooleanType abstract_;
3331
3332        /**
3333         * 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 an concept is inactive (and it may depend on the context of use).
3334         */
3335        @Child(name = "inactive", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
3336        @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 an concept is inactive (and it may depend on the context of use)." )
3337        protected BooleanType inactive;
3338
3339        /**
3340         * 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.
3341         */
3342        @Child(name = "version", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
3343        @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." )
3344        protected StringType version;
3345
3346        /**
3347         * 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.
3348         */
3349        @Child(name = "code", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
3350        @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." )
3351        protected CodeType code;
3352
3353        /**
3354         * The recommended display for this item in the expansion.
3355         */
3356        @Child(name = "display", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
3357        @Description(shortDefinition="User display for the concept", formalDefinition="The recommended display for this item in the expansion." )
3358        protected StringType display;
3359
3360        /**
3361         * 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.
3362         */
3363        @Child(name = "designation", type = {ConceptReferenceDesignationComponent.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3364        @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." )
3365        protected List<ConceptReferenceDesignationComponent> designation;
3366
3367        /**
3368         * A property value for this concept.
3369         */
3370        @Child(name = "property", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3371        @Description(shortDefinition="Property value for the concept", formalDefinition="A property value for this concept." )
3372        protected List<ConceptPropertyComponent> property;
3373
3374        /**
3375         * Other codes and entries contained under this entry in the hierarchy.
3376         */
3377        @Child(name = "contains", type = {ValueSetExpansionContainsComponent.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3378        @Description(shortDefinition="Codes contained under this entry", formalDefinition="Other codes and entries contained under this entry in the hierarchy." )
3379        protected List<ValueSetExpansionContainsComponent> contains;
3380
3381        private static final long serialVersionUID = -1370569439L;
3382
3383    /**
3384     * Constructor
3385     */
3386      public ValueSetExpansionContainsComponent() {
3387        super();
3388      }
3389
3390        /**
3391         * @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
3392         */
3393        public UriType getSystemElement() { 
3394          if (this.system == null)
3395            if (Configuration.errorOnAutoCreate())
3396              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.system");
3397            else if (Configuration.doAutoCreate())
3398              this.system = new UriType(); // bb
3399          return this.system;
3400        }
3401
3402        public boolean hasSystemElement() { 
3403          return this.system != null && !this.system.isEmpty();
3404        }
3405
3406        public boolean hasSystem() { 
3407          return this.system != null && !this.system.isEmpty();
3408        }
3409
3410        /**
3411         * @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
3412         */
3413        public ValueSetExpansionContainsComponent setSystemElement(UriType value) { 
3414          this.system = value;
3415          return this;
3416        }
3417
3418        /**
3419         * @return An absolute URI which is the code system in which the code for this item in the expansion is defined.
3420         */
3421        public String getSystem() { 
3422          return this.system == null ? null : this.system.getValue();
3423        }
3424
3425        /**
3426         * @param value An absolute URI which is the code system in which the code for this item in the expansion is defined.
3427         */
3428        public ValueSetExpansionContainsComponent setSystem(String value) { 
3429          if (Utilities.noString(value))
3430            this.system = null;
3431          else {
3432            if (this.system == null)
3433              this.system = new UriType();
3434            this.system.setValue(value);
3435          }
3436          return this;
3437        }
3438
3439        /**
3440         * @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
3441         */
3442        public BooleanType getAbstractElement() { 
3443          if (this.abstract_ == null)
3444            if (Configuration.errorOnAutoCreate())
3445              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.abstract_");
3446            else if (Configuration.doAutoCreate())
3447              this.abstract_ = new BooleanType(); // bb
3448          return this.abstract_;
3449        }
3450
3451        public boolean hasAbstractElement() { 
3452          return this.abstract_ != null && !this.abstract_.isEmpty();
3453        }
3454
3455        public boolean hasAbstract() { 
3456          return this.abstract_ != null && !this.abstract_.isEmpty();
3457        }
3458
3459        /**
3460         * @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
3461         */
3462        public ValueSetExpansionContainsComponent setAbstractElement(BooleanType value) { 
3463          this.abstract_ = value;
3464          return this;
3465        }
3466
3467        /**
3468         * @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.
3469         */
3470        public boolean getAbstract() { 
3471          return this.abstract_ == null || this.abstract_.isEmpty() ? false : this.abstract_.getValue();
3472        }
3473
3474        /**
3475         * @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.
3476         */
3477        public ValueSetExpansionContainsComponent setAbstract(boolean value) { 
3478            if (this.abstract_ == null)
3479              this.abstract_ = new BooleanType();
3480            this.abstract_.setValue(value);
3481          return this;
3482        }
3483
3484        /**
3485         * @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 an 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
3486         */
3487        public BooleanType getInactiveElement() { 
3488          if (this.inactive == null)
3489            if (Configuration.errorOnAutoCreate())
3490              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.inactive");
3491            else if (Configuration.doAutoCreate())
3492              this.inactive = new BooleanType(); // bb
3493          return this.inactive;
3494        }
3495
3496        public boolean hasInactiveElement() { 
3497          return this.inactive != null && !this.inactive.isEmpty();
3498        }
3499
3500        public boolean hasInactive() { 
3501          return this.inactive != null && !this.inactive.isEmpty();
3502        }
3503
3504        /**
3505         * @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 an 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
3506         */
3507        public ValueSetExpansionContainsComponent setInactiveElement(BooleanType value) { 
3508          this.inactive = value;
3509          return this;
3510        }
3511
3512        /**
3513         * @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 an concept is inactive (and it may depend on the context of use).
3514         */
3515        public boolean getInactive() { 
3516          return this.inactive == null || this.inactive.isEmpty() ? false : this.inactive.getValue();
3517        }
3518
3519        /**
3520         * @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 an concept is inactive (and it may depend on the context of use).
3521         */
3522        public ValueSetExpansionContainsComponent setInactive(boolean value) { 
3523            if (this.inactive == null)
3524              this.inactive = new BooleanType();
3525            this.inactive.setValue(value);
3526          return this;
3527        }
3528
3529        /**
3530         * @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
3531         */
3532        public StringType getVersionElement() { 
3533          if (this.version == null)
3534            if (Configuration.errorOnAutoCreate())
3535              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.version");
3536            else if (Configuration.doAutoCreate())
3537              this.version = new StringType(); // bb
3538          return this.version;
3539        }
3540
3541        public boolean hasVersionElement() { 
3542          return this.version != null && !this.version.isEmpty();
3543        }
3544
3545        public boolean hasVersion() { 
3546          return this.version != null && !this.version.isEmpty();
3547        }
3548
3549        /**
3550         * @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
3551         */
3552        public ValueSetExpansionContainsComponent setVersionElement(StringType value) { 
3553          this.version = value;
3554          return this;
3555        }
3556
3557        /**
3558         * @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.
3559         */
3560        public String getVersion() { 
3561          return this.version == null ? null : this.version.getValue();
3562        }
3563
3564        /**
3565         * @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.
3566         */
3567        public ValueSetExpansionContainsComponent setVersion(String value) { 
3568          if (Utilities.noString(value))
3569            this.version = null;
3570          else {
3571            if (this.version == null)
3572              this.version = new StringType();
3573            this.version.setValue(value);
3574          }
3575          return this;
3576        }
3577
3578        /**
3579         * @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
3580         */
3581        public CodeType getCodeElement() { 
3582          if (this.code == null)
3583            if (Configuration.errorOnAutoCreate())
3584              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.code");
3585            else if (Configuration.doAutoCreate())
3586              this.code = new CodeType(); // bb
3587          return this.code;
3588        }
3589
3590        public boolean hasCodeElement() { 
3591          return this.code != null && !this.code.isEmpty();
3592        }
3593
3594        public boolean hasCode() { 
3595          return this.code != null && !this.code.isEmpty();
3596        }
3597
3598        /**
3599         * @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
3600         */
3601        public ValueSetExpansionContainsComponent setCodeElement(CodeType value) { 
3602          this.code = value;
3603          return this;
3604        }
3605
3606        /**
3607         * @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.
3608         */
3609        public String getCode() { 
3610          return this.code == null ? null : this.code.getValue();
3611        }
3612
3613        /**
3614         * @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.
3615         */
3616        public ValueSetExpansionContainsComponent setCode(String value) { 
3617          if (Utilities.noString(value))
3618            this.code = null;
3619          else {
3620            if (this.code == null)
3621              this.code = new CodeType();
3622            this.code.setValue(value);
3623          }
3624          return this;
3625        }
3626
3627        /**
3628         * @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
3629         */
3630        public StringType getDisplayElement() { 
3631          if (this.display == null)
3632            if (Configuration.errorOnAutoCreate())
3633              throw new Error("Attempt to auto-create ValueSetExpansionContainsComponent.display");
3634            else if (Configuration.doAutoCreate())
3635              this.display = new StringType(); // bb
3636          return this.display;
3637        }
3638
3639        public boolean hasDisplayElement() { 
3640          return this.display != null && !this.display.isEmpty();
3641        }
3642
3643        public boolean hasDisplay() { 
3644          return this.display != null && !this.display.isEmpty();
3645        }
3646
3647        /**
3648         * @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
3649         */
3650        public ValueSetExpansionContainsComponent setDisplayElement(StringType value) { 
3651          this.display = value;
3652          return this;
3653        }
3654
3655        /**
3656         * @return The recommended display for this item in the expansion.
3657         */
3658        public String getDisplay() { 
3659          return this.display == null ? null : this.display.getValue();
3660        }
3661
3662        /**
3663         * @param value The recommended display for this item in the expansion.
3664         */
3665        public ValueSetExpansionContainsComponent setDisplay(String value) { 
3666          if (Utilities.noString(value))
3667            this.display = null;
3668          else {
3669            if (this.display == null)
3670              this.display = new StringType();
3671            this.display.setValue(value);
3672          }
3673          return this;
3674        }
3675
3676        /**
3677         * @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.)
3678         */
3679        public List<ConceptReferenceDesignationComponent> getDesignation() { 
3680          if (this.designation == null)
3681            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3682          return this.designation;
3683        }
3684
3685        /**
3686         * @return Returns a reference to <code>this</code> for easy method chaining
3687         */
3688        public ValueSetExpansionContainsComponent setDesignation(List<ConceptReferenceDesignationComponent> theDesignation) { 
3689          this.designation = theDesignation;
3690          return this;
3691        }
3692
3693        public boolean hasDesignation() { 
3694          if (this.designation == null)
3695            return false;
3696          for (ConceptReferenceDesignationComponent item : this.designation)
3697            if (!item.isEmpty())
3698              return true;
3699          return false;
3700        }
3701
3702        public ConceptReferenceDesignationComponent addDesignation() { //3
3703          ConceptReferenceDesignationComponent t = new ConceptReferenceDesignationComponent();
3704          if (this.designation == null)
3705            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3706          this.designation.add(t);
3707          return t;
3708        }
3709
3710        public ValueSetExpansionContainsComponent addDesignation(ConceptReferenceDesignationComponent t) { //3
3711          if (t == null)
3712            return this;
3713          if (this.designation == null)
3714            this.designation = new ArrayList<ConceptReferenceDesignationComponent>();
3715          this.designation.add(t);
3716          return this;
3717        }
3718
3719        /**
3720         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist {3}
3721         */
3722        public ConceptReferenceDesignationComponent getDesignationFirstRep() { 
3723          if (getDesignation().isEmpty()) {
3724            addDesignation();
3725          }
3726          return getDesignation().get(0);
3727        }
3728
3729        /**
3730         * @return {@link #property} (A property value for this concept.)
3731         */
3732        public List<ConceptPropertyComponent> getProperty() { 
3733          if (this.property == null)
3734            this.property = new ArrayList<ConceptPropertyComponent>();
3735          return this.property;
3736        }
3737
3738        /**
3739         * @return Returns a reference to <code>this</code> for easy method chaining
3740         */
3741        public ValueSetExpansionContainsComponent setProperty(List<ConceptPropertyComponent> theProperty) { 
3742          this.property = theProperty;
3743          return this;
3744        }
3745
3746        public boolean hasProperty() { 
3747          if (this.property == null)
3748            return false;
3749          for (ConceptPropertyComponent item : this.property)
3750            if (!item.isEmpty())
3751              return true;
3752          return false;
3753        }
3754
3755        public ConceptPropertyComponent addProperty() { //3
3756          ConceptPropertyComponent t = new ConceptPropertyComponent();
3757          if (this.property == null)
3758            this.property = new ArrayList<ConceptPropertyComponent>();
3759          this.property.add(t);
3760          return t;
3761        }
3762
3763        public ValueSetExpansionContainsComponent addProperty(ConceptPropertyComponent t) { //3
3764          if (t == null)
3765            return this;
3766          if (this.property == null)
3767            this.property = new ArrayList<ConceptPropertyComponent>();
3768          this.property.add(t);
3769          return this;
3770        }
3771
3772        /**
3773         * @return The first repetition of repeating field {@link #property}, creating it if it does not already exist {3}
3774         */
3775        public ConceptPropertyComponent getPropertyFirstRep() { 
3776          if (getProperty().isEmpty()) {
3777            addProperty();
3778          }
3779          return getProperty().get(0);
3780        }
3781
3782        /**
3783         * @return {@link #contains} (Other codes and entries contained under this entry in the hierarchy.)
3784         */
3785        public List<ValueSetExpansionContainsComponent> getContains() { 
3786          if (this.contains == null)
3787            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3788          return this.contains;
3789        }
3790
3791        /**
3792         * @return Returns a reference to <code>this</code> for easy method chaining
3793         */
3794        public ValueSetExpansionContainsComponent setContains(List<ValueSetExpansionContainsComponent> theContains) { 
3795          this.contains = theContains;
3796          return this;
3797        }
3798
3799        public boolean hasContains() { 
3800          if (this.contains == null)
3801            return false;
3802          for (ValueSetExpansionContainsComponent item : this.contains)
3803            if (!item.isEmpty())
3804              return true;
3805          return false;
3806        }
3807
3808        public ValueSetExpansionContainsComponent addContains() { //3
3809          ValueSetExpansionContainsComponent t = new ValueSetExpansionContainsComponent();
3810          if (this.contains == null)
3811            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3812          this.contains.add(t);
3813          return t;
3814        }
3815
3816        public ValueSetExpansionContainsComponent addContains(ValueSetExpansionContainsComponent t) { //3
3817          if (t == null)
3818            return this;
3819          if (this.contains == null)
3820            this.contains = new ArrayList<ValueSetExpansionContainsComponent>();
3821          this.contains.add(t);
3822          return this;
3823        }
3824
3825        /**
3826         * @return The first repetition of repeating field {@link #contains}, creating it if it does not already exist {3}
3827         */
3828        public ValueSetExpansionContainsComponent getContainsFirstRep() { 
3829          if (getContains().isEmpty()) {
3830            addContains();
3831          }
3832          return getContains().get(0);
3833        }
3834
3835        protected void listChildren(List<Property> children) {
3836          super.listChildren(children);
3837          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));
3838          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_));
3839          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 an concept is inactive (and it may depend on the context of use).", 0, 1, inactive));
3840          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));
3841          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));
3842          children.add(new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display));
3843          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));
3844          children.add(new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property));
3845          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));
3846        }
3847
3848        @Override
3849        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3850          switch (_hash) {
3851          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);
3852          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_);
3853          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 an concept is inactive (and it may depend on the context of use).", 0, 1, inactive);
3854          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);
3855          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);
3856          case 1671764162: /*display*/  return new Property("display", "string", "The recommended display for this item in the expansion.", 0, 1, display);
3857          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);
3858          case -993141291: /*property*/  return new Property("property", "", "A property value for this concept.", 0, java.lang.Integer.MAX_VALUE, property);
3859          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);
3860          default: return super.getNamedProperty(_hash, _name, _checkValid);
3861          }
3862
3863        }
3864
3865      @Override
3866      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3867        switch (hash) {
3868        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
3869        case 1732898850: /*abstract*/ return this.abstract_ == null ? new Base[0] : new Base[] {this.abstract_}; // BooleanType
3870        case 24665195: /*inactive*/ return this.inactive == null ? new Base[0] : new Base[] {this.inactive}; // BooleanType
3871        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
3872        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
3873        case 1671764162: /*display*/ return this.display == null ? new Base[0] : new Base[] {this.display}; // StringType
3874        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // ConceptReferenceDesignationComponent
3875        case -993141291: /*property*/ return this.property == null ? new Base[0] : this.property.toArray(new Base[this.property.size()]); // ConceptPropertyComponent
3876        case -567445985: /*contains*/ return this.contains == null ? new Base[0] : this.contains.toArray(new Base[this.contains.size()]); // ValueSetExpansionContainsComponent
3877        default: return super.getProperty(hash, name, checkValid);
3878        }
3879
3880      }
3881
3882      @Override
3883      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3884        switch (hash) {
3885        case -887328209: // system
3886          this.system = TypeConvertor.castToUri(value); // UriType
3887          return value;
3888        case 1732898850: // abstract
3889          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
3890          return value;
3891        case 24665195: // inactive
3892          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
3893          return value;
3894        case 351608024: // version
3895          this.version = TypeConvertor.castToString(value); // StringType
3896          return value;
3897        case 3059181: // code
3898          this.code = TypeConvertor.castToCode(value); // CodeType
3899          return value;
3900        case 1671764162: // display
3901          this.display = TypeConvertor.castToString(value); // StringType
3902          return value;
3903        case -900931593: // designation
3904          this.getDesignation().add((ConceptReferenceDesignationComponent) value); // ConceptReferenceDesignationComponent
3905          return value;
3906        case -993141291: // property
3907          this.getProperty().add((ConceptPropertyComponent) value); // ConceptPropertyComponent
3908          return value;
3909        case -567445985: // contains
3910          this.getContains().add((ValueSetExpansionContainsComponent) value); // ValueSetExpansionContainsComponent
3911          return value;
3912        default: return super.setProperty(hash, name, value);
3913        }
3914
3915      }
3916
3917      @Override
3918      public Base setProperty(String name, Base value) throws FHIRException {
3919        if (name.equals("system")) {
3920          this.system = TypeConvertor.castToUri(value); // UriType
3921        } else if (name.equals("abstract")) {
3922          this.abstract_ = TypeConvertor.castToBoolean(value); // BooleanType
3923        } else if (name.equals("inactive")) {
3924          this.inactive = TypeConvertor.castToBoolean(value); // BooleanType
3925        } else if (name.equals("version")) {
3926          this.version = TypeConvertor.castToString(value); // StringType
3927        } else if (name.equals("code")) {
3928          this.code = TypeConvertor.castToCode(value); // CodeType
3929        } else if (name.equals("display")) {
3930          this.display = TypeConvertor.castToString(value); // StringType
3931        } else if (name.equals("designation")) {
3932          this.getDesignation().add((ConceptReferenceDesignationComponent) value);
3933        } else if (name.equals("property")) {
3934          this.getProperty().add((ConceptPropertyComponent) value);
3935        } else if (name.equals("contains")) {
3936          this.getContains().add((ValueSetExpansionContainsComponent) value);
3937        } else
3938          return super.setProperty(name, value);
3939        return value;
3940      }
3941
3942      @Override
3943      public Base makeProperty(int hash, String name) throws FHIRException {
3944        switch (hash) {
3945        case -887328209:  return getSystemElement();
3946        case 1732898850:  return getAbstractElement();
3947        case 24665195:  return getInactiveElement();
3948        case 351608024:  return getVersionElement();
3949        case 3059181:  return getCodeElement();
3950        case 1671764162:  return getDisplayElement();
3951        case -900931593:  return addDesignation(); 
3952        case -993141291:  return addProperty(); 
3953        case -567445985:  return addContains(); 
3954        default: return super.makeProperty(hash, name);
3955        }
3956
3957      }
3958
3959      @Override
3960      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3961        switch (hash) {
3962        case -887328209: /*system*/ return new String[] {"uri"};
3963        case 1732898850: /*abstract*/ return new String[] {"boolean"};
3964        case 24665195: /*inactive*/ return new String[] {"boolean"};
3965        case 351608024: /*version*/ return new String[] {"string"};
3966        case 3059181: /*code*/ return new String[] {"code"};
3967        case 1671764162: /*display*/ return new String[] {"string"};
3968        case -900931593: /*designation*/ return new String[] {"@ValueSet.compose.include.concept.designation"};
3969        case -993141291: /*property*/ return new String[] {};
3970        case -567445985: /*contains*/ return new String[] {"@ValueSet.expansion.contains"};
3971        default: return super.getTypesForProperty(hash, name);
3972        }
3973
3974      }
3975
3976      @Override
3977      public Base addChild(String name) throws FHIRException {
3978        if (name.equals("system")) {
3979          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.system");
3980        }
3981        else if (name.equals("abstract")) {
3982          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.abstract");
3983        }
3984        else if (name.equals("inactive")) {
3985          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.inactive");
3986        }
3987        else if (name.equals("version")) {
3988          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.version");
3989        }
3990        else if (name.equals("code")) {
3991          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.code");
3992        }
3993        else if (name.equals("display")) {
3994          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.display");
3995        }
3996        else if (name.equals("designation")) {
3997          return addDesignation();
3998        }
3999        else if (name.equals("property")) {
4000          return addProperty();
4001        }
4002        else if (name.equals("contains")) {
4003          return addContains();
4004        }
4005        else
4006          return super.addChild(name);
4007      }
4008
4009      public ValueSetExpansionContainsComponent copy() {
4010        ValueSetExpansionContainsComponent dst = new ValueSetExpansionContainsComponent();
4011        copyValues(dst);
4012        return dst;
4013      }
4014
4015      public void copyValues(ValueSetExpansionContainsComponent dst) {
4016        super.copyValues(dst);
4017        dst.system = system == null ? null : system.copy();
4018        dst.abstract_ = abstract_ == null ? null : abstract_.copy();
4019        dst.inactive = inactive == null ? null : inactive.copy();
4020        dst.version = version == null ? null : version.copy();
4021        dst.code = code == null ? null : code.copy();
4022        dst.display = display == null ? null : display.copy();
4023        if (designation != null) {
4024          dst.designation = new ArrayList<ConceptReferenceDesignationComponent>();
4025          for (ConceptReferenceDesignationComponent i : designation)
4026            dst.designation.add(i.copy());
4027        };
4028        if (property != null) {
4029          dst.property = new ArrayList<ConceptPropertyComponent>();
4030          for (ConceptPropertyComponent i : property)
4031            dst.property.add(i.copy());
4032        };
4033        if (contains != null) {
4034          dst.contains = new ArrayList<ValueSetExpansionContainsComponent>();
4035          for (ValueSetExpansionContainsComponent i : contains)
4036            dst.contains.add(i.copy());
4037        };
4038      }
4039
4040      @Override
4041      public boolean equalsDeep(Base other_) {
4042        if (!super.equalsDeep(other_))
4043          return false;
4044        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4045          return false;
4046        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4047        return compareDeep(system, o.system, true) && compareDeep(abstract_, o.abstract_, true) && compareDeep(inactive, o.inactive, true)
4048           && compareDeep(version, o.version, true) && compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
4049           && compareDeep(designation, o.designation, true) && compareDeep(property, o.property, true) && compareDeep(contains, o.contains, true)
4050          ;
4051      }
4052
4053      @Override
4054      public boolean equalsShallow(Base other_) {
4055        if (!super.equalsShallow(other_))
4056          return false;
4057        if (!(other_ instanceof ValueSetExpansionContainsComponent))
4058          return false;
4059        ValueSetExpansionContainsComponent o = (ValueSetExpansionContainsComponent) other_;
4060        return compareValues(system, o.system, true) && compareValues(abstract_, o.abstract_, true) && compareValues(inactive, o.inactive, true)
4061           && compareValues(version, o.version, true) && compareValues(code, o.code, true) && compareValues(display, o.display, true)
4062          ;
4063      }
4064
4065      public boolean isEmpty() {
4066        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, abstract_, inactive
4067          , version, code, display, designation, property, contains);
4068      }
4069
4070  public String fhirType() {
4071    return "ValueSet.expansion.contains";
4072
4073  }
4074
4075  }
4076
4077    @Block()
4078    public static class ConceptPropertyComponent extends BackboneElement implements IBaseBackboneElement {
4079        /**
4080         * A code that is a reference to ValueSet.expansion.property.code.
4081         */
4082        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
4083        @Description(shortDefinition="Reference to ValueSet.expansion.property.code", formalDefinition="A code that is a reference to ValueSet.expansion.property.code." )
4084        protected CodeType code;
4085
4086        /**
4087         * The value of this property.
4088         */
4089        @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)
4090        @Description(shortDefinition="Value of the property for this concept", formalDefinition="The value of this property." )
4091        protected DataType value;
4092
4093        private static final long serialVersionUID = -422546419L;
4094
4095    /**
4096     * Constructor
4097     */
4098      public ConceptPropertyComponent() {
4099        super();
4100      }
4101
4102    /**
4103     * Constructor
4104     */
4105      public ConceptPropertyComponent(String code, DataType value) {
4106        super();
4107        this.setCode(code);
4108        this.setValue(value);
4109      }
4110
4111        /**
4112         * @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
4113         */
4114        public CodeType getCodeElement() { 
4115          if (this.code == null)
4116            if (Configuration.errorOnAutoCreate())
4117              throw new Error("Attempt to auto-create ConceptPropertyComponent.code");
4118            else if (Configuration.doAutoCreate())
4119              this.code = new CodeType(); // bb
4120          return this.code;
4121        }
4122
4123        public boolean hasCodeElement() { 
4124          return this.code != null && !this.code.isEmpty();
4125        }
4126
4127        public boolean hasCode() { 
4128          return this.code != null && !this.code.isEmpty();
4129        }
4130
4131        /**
4132         * @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
4133         */
4134        public ConceptPropertyComponent setCodeElement(CodeType value) { 
4135          this.code = value;
4136          return this;
4137        }
4138
4139        /**
4140         * @return A code that is a reference to ValueSet.expansion.property.code.
4141         */
4142        public String getCode() { 
4143          return this.code == null ? null : this.code.getValue();
4144        }
4145
4146        /**
4147         * @param value A code that is a reference to ValueSet.expansion.property.code.
4148         */
4149        public ConceptPropertyComponent setCode(String value) { 
4150            if (this.code == null)
4151              this.code = new CodeType();
4152            this.code.setValue(value);
4153          return this;
4154        }
4155
4156        /**
4157         * @return {@link #value} (The value of this property.)
4158         */
4159        public DataType getValue() { 
4160          return this.value;
4161        }
4162
4163        /**
4164         * @return {@link #value} (The value of this property.)
4165         */
4166        public CodeType getValueCodeType() throws FHIRException { 
4167          if (this.value == null)
4168            this.value = new CodeType();
4169          if (!(this.value instanceof CodeType))
4170            throw new FHIRException("Type mismatch: the type CodeType was expected, but "+this.value.getClass().getName()+" was encountered");
4171          return (CodeType) this.value;
4172        }
4173
4174        public boolean hasValueCodeType() { 
4175          return this != null && this.value instanceof CodeType;
4176        }
4177
4178        /**
4179         * @return {@link #value} (The value of this property.)
4180         */
4181        public Coding getValueCoding() throws FHIRException { 
4182          if (this.value == null)
4183            this.value = new Coding();
4184          if (!(this.value instanceof Coding))
4185            throw new FHIRException("Type mismatch: the type Coding was expected, but "+this.value.getClass().getName()+" was encountered");
4186          return (Coding) this.value;
4187        }
4188
4189        public boolean hasValueCoding() { 
4190          return this != null && this.value instanceof Coding;
4191        }
4192
4193        /**
4194         * @return {@link #value} (The value of this property.)
4195         */
4196        public StringType getValueStringType() throws FHIRException { 
4197          if (this.value == null)
4198            this.value = new StringType();
4199          if (!(this.value instanceof StringType))
4200            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
4201          return (StringType) this.value;
4202        }
4203
4204        public boolean hasValueStringType() { 
4205          return this != null && this.value instanceof StringType;
4206        }
4207
4208        /**
4209         * @return {@link #value} (The value of this property.)
4210         */
4211        public IntegerType getValueIntegerType() throws FHIRException { 
4212          if (this.value == null)
4213            this.value = new IntegerType();
4214          if (!(this.value instanceof IntegerType))
4215            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
4216          return (IntegerType) this.value;
4217        }
4218
4219        public boolean hasValueIntegerType() { 
4220          return this != null && this.value instanceof IntegerType;
4221        }
4222
4223        /**
4224         * @return {@link #value} (The value of this property.)
4225         */
4226        public BooleanType getValueBooleanType() throws FHIRException { 
4227          if (this.value == null)
4228            this.value = new BooleanType();
4229          if (!(this.value instanceof BooleanType))
4230            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
4231          return (BooleanType) this.value;
4232        }
4233
4234        public boolean hasValueBooleanType() { 
4235          return this != null && this.value instanceof BooleanType;
4236        }
4237
4238        /**
4239         * @return {@link #value} (The value of this property.)
4240         */
4241        public DateTimeType getValueDateTimeType() throws FHIRException { 
4242          if (this.value == null)
4243            this.value = new DateTimeType();
4244          if (!(this.value instanceof DateTimeType))
4245            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
4246          return (DateTimeType) this.value;
4247        }
4248
4249        public boolean hasValueDateTimeType() { 
4250          return this != null && this.value instanceof DateTimeType;
4251        }
4252
4253        /**
4254         * @return {@link #value} (The value of this property.)
4255         */
4256        public DecimalType getValueDecimalType() throws FHIRException { 
4257          if (this.value == null)
4258            this.value = new DecimalType();
4259          if (!(this.value instanceof DecimalType))
4260            throw new FHIRException("Type mismatch: the type DecimalType was expected, but "+this.value.getClass().getName()+" was encountered");
4261          return (DecimalType) this.value;
4262        }
4263
4264        public boolean hasValueDecimalType() { 
4265          return this != null && this.value instanceof DecimalType;
4266        }
4267
4268        public boolean hasValue() { 
4269          return this.value != null && !this.value.isEmpty();
4270        }
4271
4272        /**
4273         * @param value {@link #value} (The value of this property.)
4274         */
4275        public ConceptPropertyComponent setValue(DataType value) { 
4276          if (value != null && !(value instanceof CodeType || value instanceof Coding || value instanceof StringType || value instanceof IntegerType || value instanceof BooleanType || value instanceof DateTimeType || value instanceof DecimalType))
4277            throw new Error("Not the right type for ValueSet.expansion.contains.property.value[x]: "+value.fhirType());
4278          this.value = value;
4279          return this;
4280        }
4281
4282        protected void listChildren(List<Property> children) {
4283          super.listChildren(children);
4284          children.add(new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code));
4285          children.add(new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value));
4286        }
4287
4288        @Override
4289        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4290          switch (_hash) {
4291          case 3059181: /*code*/  return new Property("code", "code", "A code that is a reference to ValueSet.expansion.property.code.", 0, 1, code);
4292          case -1410166417: /*value[x]*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4293          case 111972721: /*value*/  return new Property("value[x]", "code|Coding|string|integer|boolean|dateTime|decimal", "The value of this property.", 0, 1, value);
4294          case -766209282: /*valueCode*/  return new Property("value[x]", "code", "The value of this property.", 0, 1, value);
4295          case -1887705029: /*valueCoding*/  return new Property("value[x]", "Coding", "The value of this property.", 0, 1, value);
4296          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The value of this property.", 0, 1, value);
4297          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The value of this property.", 0, 1, value);
4298          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The value of this property.", 0, 1, value);
4299          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The value of this property.", 0, 1, value);
4300          case -2083993440: /*valueDecimal*/  return new Property("value[x]", "decimal", "The value of this property.", 0, 1, value);
4301          default: return super.getNamedProperty(_hash, _name, _checkValid);
4302          }
4303
4304        }
4305
4306      @Override
4307      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4308        switch (hash) {
4309        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
4310        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
4311        default: return super.getProperty(hash, name, checkValid);
4312        }
4313
4314      }
4315
4316      @Override
4317      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4318        switch (hash) {
4319        case 3059181: // code
4320          this.code = TypeConvertor.castToCode(value); // CodeType
4321          return value;
4322        case 111972721: // value
4323          this.value = TypeConvertor.castToType(value); // DataType
4324          return value;
4325        default: return super.setProperty(hash, name, value);
4326        }
4327
4328      }
4329
4330      @Override
4331      public Base setProperty(String name, Base value) throws FHIRException {
4332        if (name.equals("code")) {
4333          this.code = TypeConvertor.castToCode(value); // CodeType
4334        } else if (name.equals("value[x]")) {
4335          this.value = TypeConvertor.castToType(value); // DataType
4336        } else
4337          return super.setProperty(name, value);
4338        return value;
4339      }
4340
4341      @Override
4342      public Base makeProperty(int hash, String name) throws FHIRException {
4343        switch (hash) {
4344        case 3059181:  return getCodeElement();
4345        case -1410166417:  return getValue();
4346        case 111972721:  return getValue();
4347        default: return super.makeProperty(hash, name);
4348        }
4349
4350      }
4351
4352      @Override
4353      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4354        switch (hash) {
4355        case 3059181: /*code*/ return new String[] {"code"};
4356        case 111972721: /*value*/ return new String[] {"code", "Coding", "string", "integer", "boolean", "dateTime", "decimal"};
4357        default: return super.getTypesForProperty(hash, name);
4358        }
4359
4360      }
4361
4362      @Override
4363      public Base addChild(String name) throws FHIRException {
4364        if (name.equals("code")) {
4365          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.expansion.contains.property.code");
4366        }
4367        else if (name.equals("valueCode")) {
4368          this.value = new CodeType();
4369          return this.value;
4370        }
4371        else if (name.equals("valueCoding")) {
4372          this.value = new Coding();
4373          return this.value;
4374        }
4375        else if (name.equals("valueString")) {
4376          this.value = new StringType();
4377          return this.value;
4378        }
4379        else if (name.equals("valueInteger")) {
4380          this.value = new IntegerType();
4381          return this.value;
4382        }
4383        else if (name.equals("valueBoolean")) {
4384          this.value = new BooleanType();
4385          return this.value;
4386        }
4387        else if (name.equals("valueDateTime")) {
4388          this.value = new DateTimeType();
4389          return this.value;
4390        }
4391        else if (name.equals("valueDecimal")) {
4392          this.value = new DecimalType();
4393          return this.value;
4394        }
4395        else
4396          return super.addChild(name);
4397      }
4398
4399      public ConceptPropertyComponent copy() {
4400        ConceptPropertyComponent dst = new ConceptPropertyComponent();
4401        copyValues(dst);
4402        return dst;
4403      }
4404
4405      public void copyValues(ConceptPropertyComponent dst) {
4406        super.copyValues(dst);
4407        dst.code = code == null ? null : code.copy();
4408        dst.value = value == null ? null : value.copy();
4409      }
4410
4411      @Override
4412      public boolean equalsDeep(Base other_) {
4413        if (!super.equalsDeep(other_))
4414          return false;
4415        if (!(other_ instanceof ConceptPropertyComponent))
4416          return false;
4417        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4418        return compareDeep(code, o.code, true) && compareDeep(value, o.value, true);
4419      }
4420
4421      @Override
4422      public boolean equalsShallow(Base other_) {
4423        if (!super.equalsShallow(other_))
4424          return false;
4425        if (!(other_ instanceof ConceptPropertyComponent))
4426          return false;
4427        ConceptPropertyComponent o = (ConceptPropertyComponent) other_;
4428        return compareValues(code, o.code, true);
4429      }
4430
4431      public boolean isEmpty() {
4432        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, value);
4433      }
4434
4435  public String fhirType() {
4436    return "ValueSet.expansion.contains.property";
4437
4438  }
4439
4440  }
4441
4442    @Block()
4443    public static class ValueSetScopeComponent extends BackboneElement implements IBaseBackboneElement {
4444        /**
4445         * Criteria describing which concepts or codes should be included and why.
4446         */
4447        @Child(name = "inclusionCriteria", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
4448        @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." )
4449        protected StringType inclusionCriteria;
4450
4451        /**
4452         * Criteria describing which concepts or codes should be excluded and why.
4453         */
4454        @Child(name = "exclusionCriteria", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
4455        @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." )
4456        protected StringType exclusionCriteria;
4457
4458        private static final long serialVersionUID = -641434610L;
4459
4460    /**
4461     * Constructor
4462     */
4463      public ValueSetScopeComponent() {
4464        super();
4465      }
4466
4467        /**
4468         * @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
4469         */
4470        public StringType getInclusionCriteriaElement() { 
4471          if (this.inclusionCriteria == null)
4472            if (Configuration.errorOnAutoCreate())
4473              throw new Error("Attempt to auto-create ValueSetScopeComponent.inclusionCriteria");
4474            else if (Configuration.doAutoCreate())
4475              this.inclusionCriteria = new StringType(); // bb
4476          return this.inclusionCriteria;
4477        }
4478
4479        public boolean hasInclusionCriteriaElement() { 
4480          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
4481        }
4482
4483        public boolean hasInclusionCriteria() { 
4484          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
4485        }
4486
4487        /**
4488         * @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
4489         */
4490        public ValueSetScopeComponent setInclusionCriteriaElement(StringType value) { 
4491          this.inclusionCriteria = value;
4492          return this;
4493        }
4494
4495        /**
4496         * @return Criteria describing which concepts or codes should be included and why.
4497         */
4498        public String getInclusionCriteria() { 
4499          return this.inclusionCriteria == null ? null : this.inclusionCriteria.getValue();
4500        }
4501
4502        /**
4503         * @param value Criteria describing which concepts or codes should be included and why.
4504         */
4505        public ValueSetScopeComponent setInclusionCriteria(String value) { 
4506          if (Utilities.noString(value))
4507            this.inclusionCriteria = null;
4508          else {
4509            if (this.inclusionCriteria == null)
4510              this.inclusionCriteria = new StringType();
4511            this.inclusionCriteria.setValue(value);
4512          }
4513          return this;
4514        }
4515
4516        /**
4517         * @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
4518         */
4519        public StringType getExclusionCriteriaElement() { 
4520          if (this.exclusionCriteria == null)
4521            if (Configuration.errorOnAutoCreate())
4522              throw new Error("Attempt to auto-create ValueSetScopeComponent.exclusionCriteria");
4523            else if (Configuration.doAutoCreate())
4524              this.exclusionCriteria = new StringType(); // bb
4525          return this.exclusionCriteria;
4526        }
4527
4528        public boolean hasExclusionCriteriaElement() { 
4529          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
4530        }
4531
4532        public boolean hasExclusionCriteria() { 
4533          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
4534        }
4535
4536        /**
4537         * @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
4538         */
4539        public ValueSetScopeComponent setExclusionCriteriaElement(StringType value) { 
4540          this.exclusionCriteria = value;
4541          return this;
4542        }
4543
4544        /**
4545         * @return Criteria describing which concepts or codes should be excluded and why.
4546         */
4547        public String getExclusionCriteria() { 
4548          return this.exclusionCriteria == null ? null : this.exclusionCriteria.getValue();
4549        }
4550
4551        /**
4552         * @param value Criteria describing which concepts or codes should be excluded and why.
4553         */
4554        public ValueSetScopeComponent setExclusionCriteria(String value) { 
4555          if (Utilities.noString(value))
4556            this.exclusionCriteria = null;
4557          else {
4558            if (this.exclusionCriteria == null)
4559              this.exclusionCriteria = new StringType();
4560            this.exclusionCriteria.setValue(value);
4561          }
4562          return this;
4563        }
4564
4565        protected void listChildren(List<Property> children) {
4566          super.listChildren(children);
4567          children.add(new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria));
4568          children.add(new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria));
4569        }
4570
4571        @Override
4572        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4573          switch (_hash) {
4574          case -1380638565: /*inclusionCriteria*/  return new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria);
4575          case 985682765: /*exclusionCriteria*/  return new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria);
4576          default: return super.getNamedProperty(_hash, _name, _checkValid);
4577          }
4578
4579        }
4580
4581      @Override
4582      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4583        switch (hash) {
4584        case -1380638565: /*inclusionCriteria*/ return this.inclusionCriteria == null ? new Base[0] : new Base[] {this.inclusionCriteria}; // StringType
4585        case 985682765: /*exclusionCriteria*/ return this.exclusionCriteria == null ? new Base[0] : new Base[] {this.exclusionCriteria}; // StringType
4586        default: return super.getProperty(hash, name, checkValid);
4587        }
4588
4589      }
4590
4591      @Override
4592      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4593        switch (hash) {
4594        case -1380638565: // inclusionCriteria
4595          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
4596          return value;
4597        case 985682765: // exclusionCriteria
4598          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
4599          return value;
4600        default: return super.setProperty(hash, name, value);
4601        }
4602
4603      }
4604
4605      @Override
4606      public Base setProperty(String name, Base value) throws FHIRException {
4607        if (name.equals("inclusionCriteria")) {
4608          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
4609        } else if (name.equals("exclusionCriteria")) {
4610          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
4611        } else
4612          return super.setProperty(name, value);
4613        return value;
4614      }
4615
4616      @Override
4617      public Base makeProperty(int hash, String name) throws FHIRException {
4618        switch (hash) {
4619        case -1380638565:  return getInclusionCriteriaElement();
4620        case 985682765:  return getExclusionCriteriaElement();
4621        default: return super.makeProperty(hash, name);
4622        }
4623
4624      }
4625
4626      @Override
4627      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4628        switch (hash) {
4629        case -1380638565: /*inclusionCriteria*/ return new String[] {"string"};
4630        case 985682765: /*exclusionCriteria*/ return new String[] {"string"};
4631        default: return super.getTypesForProperty(hash, name);
4632        }
4633
4634      }
4635
4636      @Override
4637      public Base addChild(String name) throws FHIRException {
4638        if (name.equals("inclusionCriteria")) {
4639          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.scope.inclusionCriteria");
4640        }
4641        else if (name.equals("exclusionCriteria")) {
4642          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.scope.exclusionCriteria");
4643        }
4644        else
4645          return super.addChild(name);
4646      }
4647
4648      public ValueSetScopeComponent copy() {
4649        ValueSetScopeComponent dst = new ValueSetScopeComponent();
4650        copyValues(dst);
4651        return dst;
4652      }
4653
4654      public void copyValues(ValueSetScopeComponent dst) {
4655        super.copyValues(dst);
4656        dst.inclusionCriteria = inclusionCriteria == null ? null : inclusionCriteria.copy();
4657        dst.exclusionCriteria = exclusionCriteria == null ? null : exclusionCriteria.copy();
4658      }
4659
4660      @Override
4661      public boolean equalsDeep(Base other_) {
4662        if (!super.equalsDeep(other_))
4663          return false;
4664        if (!(other_ instanceof ValueSetScopeComponent))
4665          return false;
4666        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
4667        return compareDeep(inclusionCriteria, o.inclusionCriteria, true) && compareDeep(exclusionCriteria, o.exclusionCriteria, true)
4668          ;
4669      }
4670
4671      @Override
4672      public boolean equalsShallow(Base other_) {
4673        if (!super.equalsShallow(other_))
4674          return false;
4675        if (!(other_ instanceof ValueSetScopeComponent))
4676          return false;
4677        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
4678        return compareValues(inclusionCriteria, o.inclusionCriteria, true) && compareValues(exclusionCriteria, o.exclusionCriteria, true)
4679          ;
4680      }
4681
4682      public boolean isEmpty() {
4683        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(inclusionCriteria, exclusionCriteria
4684          );
4685      }
4686
4687  public String fhirType() {
4688    return "ValueSet.scope";
4689
4690  }
4691
4692  }
4693
4694    /**
4695     * 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.
4696     */
4697    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
4698    @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." )
4699    protected UriType url;
4700
4701    /**
4702     * 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.
4703     */
4704    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4705    @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." )
4706    protected List<Identifier> identifier;
4707
4708    /**
4709     * 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.
4710     */
4711    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
4712    @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." )
4713    protected StringType version;
4714
4715    /**
4716     * 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.
4717     */
4718    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
4719    @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." )
4720    protected StringType name;
4721
4722    /**
4723     * A short, descriptive, user-friendly title for the value set.
4724     */
4725    @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
4726    @Description(shortDefinition="Name for this value set (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the value set." )
4727    protected StringType title;
4728
4729    /**
4730     * 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.
4731     */
4732    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
4733    @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." )
4734    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
4735    protected Enumeration<PublicationStatus> status;
4736
4737    /**
4738     * 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.
4739     */
4740    @Child(name = "experimental", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
4741    @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." )
4742    protected BooleanType experimental;
4743
4744    /**
4745     * The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
4746     */
4747    @Child(name = "date", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
4748    @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." )
4749    protected DateTimeType date;
4750
4751    /**
4752     * The name of the organization or individual that published the value set.
4753     */
4754    @Child(name = "publisher", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
4755    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the value set." )
4756    protected StringType publisher;
4757
4758    /**
4759     * Contact details to assist a user in finding and communicating with the publisher.
4760     */
4761    @Child(name = "contact", type = {ContactDetail.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4762    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
4763    protected List<ContactDetail> contact;
4764
4765    /**
4766     * 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.
4767     */
4768    @Child(name = "description", type = {MarkdownType.class}, order=10, min=0, max=1, modifier=false, summary=false)
4769    @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." )
4770    protected MarkdownType description;
4771
4772    /**
4773     * 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.
4774     */
4775    @Child(name = "useContext", type = {UsageContext.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4776    @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." )
4777    protected List<UsageContext> useContext;
4778
4779    /**
4780     * A legal or geographic region in which the value set is intended to be used.
4781     */
4782    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4783    @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." )
4784    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
4785    protected List<CodeableConcept> jurisdiction;
4786
4787    /**
4788     * If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
4789     */
4790    @Child(name = "immutable", type = {BooleanType.class}, order=13, min=0, max=1, modifier=false, summary=true)
4791    @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." )
4792    protected BooleanType immutable;
4793
4794    /**
4795     * Explanation of why this value set is needed and why it has been designed as it has.
4796     */
4797    @Child(name = "purpose", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
4798    @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." )
4799    protected MarkdownType purpose;
4800
4801    /**
4802     * 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.
4803     */
4804    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
4805    @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." )
4806    protected MarkdownType copyright;
4807
4808    /**
4809     * 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).
4810     */
4811    @Child(name = "compose", type = {}, order=16, min=0, max=1, modifier=false, summary=false)
4812    @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)." )
4813    protected ValueSetComposeComponent compose;
4814
4815    /**
4816     * 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.
4817     */
4818    @Child(name = "expansion", type = {}, order=17, min=0, max=1, modifier=false, summary=false)
4819    @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." )
4820    protected ValueSetExpansionComponent expansion;
4821
4822    /**
4823     * Description of the semantic space the Value Set Expansion is intended to cover and should further clarify the text in ValueSet.description.
4824     */
4825    @Child(name = "scope", type = {}, order=18, min=0, max=1, modifier=false, summary=false)
4826    @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." )
4827    protected ValueSetScopeComponent scope;
4828
4829    private static final long serialVersionUID = 1111958035L;
4830
4831  /**
4832   * Constructor
4833   */
4834    public ValueSet() {
4835      super();
4836    }
4837
4838  /**
4839   * Constructor
4840   */
4841    public ValueSet(PublicationStatus status) {
4842      super();
4843      this.setStatus(status);
4844    }
4845
4846    /**
4847     * @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
4848     */
4849    public UriType getUrlElement() { 
4850      if (this.url == null)
4851        if (Configuration.errorOnAutoCreate())
4852          throw new Error("Attempt to auto-create ValueSet.url");
4853        else if (Configuration.doAutoCreate())
4854          this.url = new UriType(); // bb
4855      return this.url;
4856    }
4857
4858    public boolean hasUrlElement() { 
4859      return this.url != null && !this.url.isEmpty();
4860    }
4861
4862    public boolean hasUrl() { 
4863      return this.url != null && !this.url.isEmpty();
4864    }
4865
4866    /**
4867     * @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
4868     */
4869    public ValueSet setUrlElement(UriType value) { 
4870      this.url = value;
4871      return this;
4872    }
4873
4874    /**
4875     * @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.
4876     */
4877    public String getUrl() { 
4878      return this.url == null ? null : this.url.getValue();
4879    }
4880
4881    /**
4882     * @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.
4883     */
4884    public ValueSet setUrl(String value) { 
4885      if (Utilities.noString(value))
4886        this.url = null;
4887      else {
4888        if (this.url == null)
4889          this.url = new UriType();
4890        this.url.setValue(value);
4891      }
4892      return this;
4893    }
4894
4895    /**
4896     * @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.)
4897     */
4898    public List<Identifier> getIdentifier() { 
4899      if (this.identifier == null)
4900        this.identifier = new ArrayList<Identifier>();
4901      return this.identifier;
4902    }
4903
4904    /**
4905     * @return Returns a reference to <code>this</code> for easy method chaining
4906     */
4907    public ValueSet setIdentifier(List<Identifier> theIdentifier) { 
4908      this.identifier = theIdentifier;
4909      return this;
4910    }
4911
4912    public boolean hasIdentifier() { 
4913      if (this.identifier == null)
4914        return false;
4915      for (Identifier item : this.identifier)
4916        if (!item.isEmpty())
4917          return true;
4918      return false;
4919    }
4920
4921    public Identifier addIdentifier() { //3
4922      Identifier t = new Identifier();
4923      if (this.identifier == null)
4924        this.identifier = new ArrayList<Identifier>();
4925      this.identifier.add(t);
4926      return t;
4927    }
4928
4929    public ValueSet addIdentifier(Identifier t) { //3
4930      if (t == null)
4931        return this;
4932      if (this.identifier == null)
4933        this.identifier = new ArrayList<Identifier>();
4934      this.identifier.add(t);
4935      return this;
4936    }
4937
4938    /**
4939     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
4940     */
4941    public Identifier getIdentifierFirstRep() { 
4942      if (getIdentifier().isEmpty()) {
4943        addIdentifier();
4944      }
4945      return getIdentifier().get(0);
4946    }
4947
4948    /**
4949     * @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
4950     */
4951    public StringType getVersionElement() { 
4952      if (this.version == null)
4953        if (Configuration.errorOnAutoCreate())
4954          throw new Error("Attempt to auto-create ValueSet.version");
4955        else if (Configuration.doAutoCreate())
4956          this.version = new StringType(); // bb
4957      return this.version;
4958    }
4959
4960    public boolean hasVersionElement() { 
4961      return this.version != null && !this.version.isEmpty();
4962    }
4963
4964    public boolean hasVersion() { 
4965      return this.version != null && !this.version.isEmpty();
4966    }
4967
4968    /**
4969     * @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
4970     */
4971    public ValueSet setVersionElement(StringType value) { 
4972      this.version = value;
4973      return this;
4974    }
4975
4976    /**
4977     * @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.
4978     */
4979    public String getVersion() { 
4980      return this.version == null ? null : this.version.getValue();
4981    }
4982
4983    /**
4984     * @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.
4985     */
4986    public ValueSet setVersion(String value) { 
4987      if (Utilities.noString(value))
4988        this.version = null;
4989      else {
4990        if (this.version == null)
4991          this.version = new StringType();
4992        this.version.setValue(value);
4993      }
4994      return this;
4995    }
4996
4997    /**
4998     * @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
4999     */
5000    public StringType getNameElement() { 
5001      if (this.name == null)
5002        if (Configuration.errorOnAutoCreate())
5003          throw new Error("Attempt to auto-create ValueSet.name");
5004        else if (Configuration.doAutoCreate())
5005          this.name = new StringType(); // bb
5006      return this.name;
5007    }
5008
5009    public boolean hasNameElement() { 
5010      return this.name != null && !this.name.isEmpty();
5011    }
5012
5013    public boolean hasName() { 
5014      return this.name != null && !this.name.isEmpty();
5015    }
5016
5017    /**
5018     * @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
5019     */
5020    public ValueSet setNameElement(StringType value) { 
5021      this.name = value;
5022      return this;
5023    }
5024
5025    /**
5026     * @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.
5027     */
5028    public String getName() { 
5029      return this.name == null ? null : this.name.getValue();
5030    }
5031
5032    /**
5033     * @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.
5034     */
5035    public ValueSet setName(String value) { 
5036      if (Utilities.noString(value))
5037        this.name = null;
5038      else {
5039        if (this.name == null)
5040          this.name = new StringType();
5041        this.name.setValue(value);
5042      }
5043      return this;
5044    }
5045
5046    /**
5047     * @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
5048     */
5049    public StringType getTitleElement() { 
5050      if (this.title == null)
5051        if (Configuration.errorOnAutoCreate())
5052          throw new Error("Attempt to auto-create ValueSet.title");
5053        else if (Configuration.doAutoCreate())
5054          this.title = new StringType(); // bb
5055      return this.title;
5056    }
5057
5058    public boolean hasTitleElement() { 
5059      return this.title != null && !this.title.isEmpty();
5060    }
5061
5062    public boolean hasTitle() { 
5063      return this.title != null && !this.title.isEmpty();
5064    }
5065
5066    /**
5067     * @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
5068     */
5069    public ValueSet setTitleElement(StringType value) { 
5070      this.title = value;
5071      return this;
5072    }
5073
5074    /**
5075     * @return A short, descriptive, user-friendly title for the value set.
5076     */
5077    public String getTitle() { 
5078      return this.title == null ? null : this.title.getValue();
5079    }
5080
5081    /**
5082     * @param value A short, descriptive, user-friendly title for the value set.
5083     */
5084    public ValueSet setTitle(String value) { 
5085      if (Utilities.noString(value))
5086        this.title = null;
5087      else {
5088        if (this.title == null)
5089          this.title = new StringType();
5090        this.title.setValue(value);
5091      }
5092      return this;
5093    }
5094
5095    /**
5096     * @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
5097     */
5098    public Enumeration<PublicationStatus> getStatusElement() { 
5099      if (this.status == null)
5100        if (Configuration.errorOnAutoCreate())
5101          throw new Error("Attempt to auto-create ValueSet.status");
5102        else if (Configuration.doAutoCreate())
5103          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
5104      return this.status;
5105    }
5106
5107    public boolean hasStatusElement() { 
5108      return this.status != null && !this.status.isEmpty();
5109    }
5110
5111    public boolean hasStatus() { 
5112      return this.status != null && !this.status.isEmpty();
5113    }
5114
5115    /**
5116     * @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
5117     */
5118    public ValueSet setStatusElement(Enumeration<PublicationStatus> value) { 
5119      this.status = value;
5120      return this;
5121    }
5122
5123    /**
5124     * @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.
5125     */
5126    public PublicationStatus getStatus() { 
5127      return this.status == null ? null : this.status.getValue();
5128    }
5129
5130    /**
5131     * @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.
5132     */
5133    public ValueSet setStatus(PublicationStatus value) { 
5134        if (this.status == null)
5135          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
5136        this.status.setValue(value);
5137      return this;
5138    }
5139
5140    /**
5141     * @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
5142     */
5143    public BooleanType getExperimentalElement() { 
5144      if (this.experimental == null)
5145        if (Configuration.errorOnAutoCreate())
5146          throw new Error("Attempt to auto-create ValueSet.experimental");
5147        else if (Configuration.doAutoCreate())
5148          this.experimental = new BooleanType(); // bb
5149      return this.experimental;
5150    }
5151
5152    public boolean hasExperimentalElement() { 
5153      return this.experimental != null && !this.experimental.isEmpty();
5154    }
5155
5156    public boolean hasExperimental() { 
5157      return this.experimental != null && !this.experimental.isEmpty();
5158    }
5159
5160    /**
5161     * @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
5162     */
5163    public ValueSet setExperimentalElement(BooleanType value) { 
5164      this.experimental = value;
5165      return this;
5166    }
5167
5168    /**
5169     * @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.
5170     */
5171    public boolean getExperimental() { 
5172      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
5173    }
5174
5175    /**
5176     * @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.
5177     */
5178    public ValueSet setExperimental(boolean value) { 
5179        if (this.experimental == null)
5180          this.experimental = new BooleanType();
5181        this.experimental.setValue(value);
5182      return this;
5183    }
5184
5185    /**
5186     * @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
5187     */
5188    public DateTimeType getDateElement() { 
5189      if (this.date == null)
5190        if (Configuration.errorOnAutoCreate())
5191          throw new Error("Attempt to auto-create ValueSet.date");
5192        else if (Configuration.doAutoCreate())
5193          this.date = new DateTimeType(); // bb
5194      return this.date;
5195    }
5196
5197    public boolean hasDateElement() { 
5198      return this.date != null && !this.date.isEmpty();
5199    }
5200
5201    public boolean hasDate() { 
5202      return this.date != null && !this.date.isEmpty();
5203    }
5204
5205    /**
5206     * @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
5207     */
5208    public ValueSet setDateElement(DateTimeType value) { 
5209      this.date = value;
5210      return this;
5211    }
5212
5213    /**
5214     * @return The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5215     */
5216    public Date getDate() { 
5217      return this.date == null ? null : this.date.getValue();
5218    }
5219
5220    /**
5221     * @param value The date (and optionally time) when the value set metadata or content logical definition (.compose) was created or revised.
5222     */
5223    public ValueSet setDate(Date value) { 
5224      if (value == null)
5225        this.date = null;
5226      else {
5227        if (this.date == null)
5228          this.date = new DateTimeType();
5229        this.date.setValue(value);
5230      }
5231      return this;
5232    }
5233
5234    /**
5235     * @return {@link #publisher} (The name of the organization or individual that published the value set.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
5236     */
5237    public StringType getPublisherElement() { 
5238      if (this.publisher == null)
5239        if (Configuration.errorOnAutoCreate())
5240          throw new Error("Attempt to auto-create ValueSet.publisher");
5241        else if (Configuration.doAutoCreate())
5242          this.publisher = new StringType(); // bb
5243      return this.publisher;
5244    }
5245
5246    public boolean hasPublisherElement() { 
5247      return this.publisher != null && !this.publisher.isEmpty();
5248    }
5249
5250    public boolean hasPublisher() { 
5251      return this.publisher != null && !this.publisher.isEmpty();
5252    }
5253
5254    /**
5255     * @param value {@link #publisher} (The name of the organization or individual that published the value set.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
5256     */
5257    public ValueSet setPublisherElement(StringType value) { 
5258      this.publisher = value;
5259      return this;
5260    }
5261
5262    /**
5263     * @return The name of the organization or individual that published the value set.
5264     */
5265    public String getPublisher() { 
5266      return this.publisher == null ? null : this.publisher.getValue();
5267    }
5268
5269    /**
5270     * @param value The name of the organization or individual that published the value set.
5271     */
5272    public ValueSet setPublisher(String value) { 
5273      if (Utilities.noString(value))
5274        this.publisher = null;
5275      else {
5276        if (this.publisher == null)
5277          this.publisher = new StringType();
5278        this.publisher.setValue(value);
5279      }
5280      return this;
5281    }
5282
5283    /**
5284     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
5285     */
5286    public List<ContactDetail> getContact() { 
5287      if (this.contact == null)
5288        this.contact = new ArrayList<ContactDetail>();
5289      return this.contact;
5290    }
5291
5292    /**
5293     * @return Returns a reference to <code>this</code> for easy method chaining
5294     */
5295    public ValueSet setContact(List<ContactDetail> theContact) { 
5296      this.contact = theContact;
5297      return this;
5298    }
5299
5300    public boolean hasContact() { 
5301      if (this.contact == null)
5302        return false;
5303      for (ContactDetail item : this.contact)
5304        if (!item.isEmpty())
5305          return true;
5306      return false;
5307    }
5308
5309    public ContactDetail addContact() { //3
5310      ContactDetail t = new ContactDetail();
5311      if (this.contact == null)
5312        this.contact = new ArrayList<ContactDetail>();
5313      this.contact.add(t);
5314      return t;
5315    }
5316
5317    public ValueSet addContact(ContactDetail t) { //3
5318      if (t == null)
5319        return this;
5320      if (this.contact == null)
5321        this.contact = new ArrayList<ContactDetail>();
5322      this.contact.add(t);
5323      return this;
5324    }
5325
5326    /**
5327     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
5328     */
5329    public ContactDetail getContactFirstRep() { 
5330      if (getContact().isEmpty()) {
5331        addContact();
5332      }
5333      return getContact().get(0);
5334    }
5335
5336    /**
5337     * @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
5338     */
5339    public MarkdownType getDescriptionElement() { 
5340      if (this.description == null)
5341        if (Configuration.errorOnAutoCreate())
5342          throw new Error("Attempt to auto-create ValueSet.description");
5343        else if (Configuration.doAutoCreate())
5344          this.description = new MarkdownType(); // bb
5345      return this.description;
5346    }
5347
5348    public boolean hasDescriptionElement() { 
5349      return this.description != null && !this.description.isEmpty();
5350    }
5351
5352    public boolean hasDescription() { 
5353      return this.description != null && !this.description.isEmpty();
5354    }
5355
5356    /**
5357     * @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
5358     */
5359    public ValueSet setDescriptionElement(MarkdownType value) { 
5360      this.description = value;
5361      return this;
5362    }
5363
5364    /**
5365     * @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.
5366     */
5367    public String getDescription() { 
5368      return this.description == null ? null : this.description.getValue();
5369    }
5370
5371    /**
5372     * @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.
5373     */
5374    public ValueSet setDescription(String value) { 
5375      if (value == null)
5376        this.description = null;
5377      else {
5378        if (this.description == null)
5379          this.description = new MarkdownType();
5380        this.description.setValue(value);
5381      }
5382      return this;
5383    }
5384
5385    /**
5386     * @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.)
5387     */
5388    public List<UsageContext> getUseContext() { 
5389      if (this.useContext == null)
5390        this.useContext = new ArrayList<UsageContext>();
5391      return this.useContext;
5392    }
5393
5394    /**
5395     * @return Returns a reference to <code>this</code> for easy method chaining
5396     */
5397    public ValueSet setUseContext(List<UsageContext> theUseContext) { 
5398      this.useContext = theUseContext;
5399      return this;
5400    }
5401
5402    public boolean hasUseContext() { 
5403      if (this.useContext == null)
5404        return false;
5405      for (UsageContext item : this.useContext)
5406        if (!item.isEmpty())
5407          return true;
5408      return false;
5409    }
5410
5411    public UsageContext addUseContext() { //3
5412      UsageContext t = new UsageContext();
5413      if (this.useContext == null)
5414        this.useContext = new ArrayList<UsageContext>();
5415      this.useContext.add(t);
5416      return t;
5417    }
5418
5419    public ValueSet addUseContext(UsageContext t) { //3
5420      if (t == null)
5421        return this;
5422      if (this.useContext == null)
5423        this.useContext = new ArrayList<UsageContext>();
5424      this.useContext.add(t);
5425      return this;
5426    }
5427
5428    /**
5429     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
5430     */
5431    public UsageContext getUseContextFirstRep() { 
5432      if (getUseContext().isEmpty()) {
5433        addUseContext();
5434      }
5435      return getUseContext().get(0);
5436    }
5437
5438    /**
5439     * @return {@link #jurisdiction} (A legal or geographic region in which the value set is intended to be used.)
5440     */
5441    public List<CodeableConcept> getJurisdiction() { 
5442      if (this.jurisdiction == null)
5443        this.jurisdiction = new ArrayList<CodeableConcept>();
5444      return this.jurisdiction;
5445    }
5446
5447    /**
5448     * @return Returns a reference to <code>this</code> for easy method chaining
5449     */
5450    public ValueSet setJurisdiction(List<CodeableConcept> theJurisdiction) { 
5451      this.jurisdiction = theJurisdiction;
5452      return this;
5453    }
5454
5455    public boolean hasJurisdiction() { 
5456      if (this.jurisdiction == null)
5457        return false;
5458      for (CodeableConcept item : this.jurisdiction)
5459        if (!item.isEmpty())
5460          return true;
5461      return false;
5462    }
5463
5464    public CodeableConcept addJurisdiction() { //3
5465      CodeableConcept t = new CodeableConcept();
5466      if (this.jurisdiction == null)
5467        this.jurisdiction = new ArrayList<CodeableConcept>();
5468      this.jurisdiction.add(t);
5469      return t;
5470    }
5471
5472    public ValueSet addJurisdiction(CodeableConcept t) { //3
5473      if (t == null)
5474        return this;
5475      if (this.jurisdiction == null)
5476        this.jurisdiction = new ArrayList<CodeableConcept>();
5477      this.jurisdiction.add(t);
5478      return this;
5479    }
5480
5481    /**
5482     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
5483     */
5484    public CodeableConcept getJurisdictionFirstRep() { 
5485      if (getJurisdiction().isEmpty()) {
5486        addJurisdiction();
5487      }
5488      return getJurisdiction().get(0);
5489    }
5490
5491    /**
5492     * @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
5493     */
5494    public BooleanType getImmutableElement() { 
5495      if (this.immutable == null)
5496        if (Configuration.errorOnAutoCreate())
5497          throw new Error("Attempt to auto-create ValueSet.immutable");
5498        else if (Configuration.doAutoCreate())
5499          this.immutable = new BooleanType(); // bb
5500      return this.immutable;
5501    }
5502
5503    public boolean hasImmutableElement() { 
5504      return this.immutable != null && !this.immutable.isEmpty();
5505    }
5506
5507    public boolean hasImmutable() { 
5508      return this.immutable != null && !this.immutable.isEmpty();
5509    }
5510
5511    /**
5512     * @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
5513     */
5514    public ValueSet setImmutableElement(BooleanType value) { 
5515      this.immutable = value;
5516      return this;
5517    }
5518
5519    /**
5520     * @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.
5521     */
5522    public boolean getImmutable() { 
5523      return this.immutable == null || this.immutable.isEmpty() ? false : this.immutable.getValue();
5524    }
5525
5526    /**
5527     * @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.
5528     */
5529    public ValueSet setImmutable(boolean value) { 
5530        if (this.immutable == null)
5531          this.immutable = new BooleanType();
5532        this.immutable.setValue(value);
5533      return this;
5534    }
5535
5536    /**
5537     * @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
5538     */
5539    public MarkdownType getPurposeElement() { 
5540      if (this.purpose == null)
5541        if (Configuration.errorOnAutoCreate())
5542          throw new Error("Attempt to auto-create ValueSet.purpose");
5543        else if (Configuration.doAutoCreate())
5544          this.purpose = new MarkdownType(); // bb
5545      return this.purpose;
5546    }
5547
5548    public boolean hasPurposeElement() { 
5549      return this.purpose != null && !this.purpose.isEmpty();
5550    }
5551
5552    public boolean hasPurpose() { 
5553      return this.purpose != null && !this.purpose.isEmpty();
5554    }
5555
5556    /**
5557     * @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
5558     */
5559    public ValueSet setPurposeElement(MarkdownType value) { 
5560      this.purpose = value;
5561      return this;
5562    }
5563
5564    /**
5565     * @return Explanation of why this value set is needed and why it has been designed as it has.
5566     */
5567    public String getPurpose() { 
5568      return this.purpose == null ? null : this.purpose.getValue();
5569    }
5570
5571    /**
5572     * @param value Explanation of why this value set is needed and why it has been designed as it has.
5573     */
5574    public ValueSet setPurpose(String value) { 
5575      if (value == null)
5576        this.purpose = null;
5577      else {
5578        if (this.purpose == null)
5579          this.purpose = new MarkdownType();
5580        this.purpose.setValue(value);
5581      }
5582      return this;
5583    }
5584
5585    /**
5586     * @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
5587     */
5588    public MarkdownType getCopyrightElement() { 
5589      if (this.copyright == null)
5590        if (Configuration.errorOnAutoCreate())
5591          throw new Error("Attempt to auto-create ValueSet.copyright");
5592        else if (Configuration.doAutoCreate())
5593          this.copyright = new MarkdownType(); // bb
5594      return this.copyright;
5595    }
5596
5597    public boolean hasCopyrightElement() { 
5598      return this.copyright != null && !this.copyright.isEmpty();
5599    }
5600
5601    public boolean hasCopyright() { 
5602      return this.copyright != null && !this.copyright.isEmpty();
5603    }
5604
5605    /**
5606     * @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
5607     */
5608    public ValueSet setCopyrightElement(MarkdownType value) { 
5609      this.copyright = value;
5610      return this;
5611    }
5612
5613    /**
5614     * @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.
5615     */
5616    public String getCopyright() { 
5617      return this.copyright == null ? null : this.copyright.getValue();
5618    }
5619
5620    /**
5621     * @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.
5622     */
5623    public ValueSet setCopyright(String value) { 
5624      if (value == null)
5625        this.copyright = null;
5626      else {
5627        if (this.copyright == null)
5628          this.copyright = new MarkdownType();
5629        this.copyright.setValue(value);
5630      }
5631      return this;
5632    }
5633
5634    /**
5635     * @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).)
5636     */
5637    public ValueSetComposeComponent getCompose() { 
5638      if (this.compose == null)
5639        if (Configuration.errorOnAutoCreate())
5640          throw new Error("Attempt to auto-create ValueSet.compose");
5641        else if (Configuration.doAutoCreate())
5642          this.compose = new ValueSetComposeComponent(); // cc
5643      return this.compose;
5644    }
5645
5646    public boolean hasCompose() { 
5647      return this.compose != null && !this.compose.isEmpty();
5648    }
5649
5650    /**
5651     * @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).)
5652     */
5653    public ValueSet setCompose(ValueSetComposeComponent value) { 
5654      this.compose = value;
5655      return this;
5656    }
5657
5658    /**
5659     * @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.)
5660     */
5661    public ValueSetExpansionComponent getExpansion() { 
5662      if (this.expansion == null)
5663        if (Configuration.errorOnAutoCreate())
5664          throw new Error("Attempt to auto-create ValueSet.expansion");
5665        else if (Configuration.doAutoCreate())
5666          this.expansion = new ValueSetExpansionComponent(); // cc
5667      return this.expansion;
5668    }
5669
5670    public boolean hasExpansion() { 
5671      return this.expansion != null && !this.expansion.isEmpty();
5672    }
5673
5674    /**
5675     * @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.)
5676     */
5677    public ValueSet setExpansion(ValueSetExpansionComponent value) { 
5678      this.expansion = value;
5679      return this;
5680    }
5681
5682    /**
5683     * @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.)
5684     */
5685    public ValueSetScopeComponent getScope() { 
5686      if (this.scope == null)
5687        if (Configuration.errorOnAutoCreate())
5688          throw new Error("Attempt to auto-create ValueSet.scope");
5689        else if (Configuration.doAutoCreate())
5690          this.scope = new ValueSetScopeComponent(); // cc
5691      return this.scope;
5692    }
5693
5694    public boolean hasScope() { 
5695      return this.scope != null && !this.scope.isEmpty();
5696    }
5697
5698    /**
5699     * @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.)
5700     */
5701    public ValueSet setScope(ValueSetScopeComponent value) { 
5702      this.scope = value;
5703      return this;
5704    }
5705
5706      protected void listChildren(List<Property> children) {
5707        super.listChildren(children);
5708        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));
5709        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));
5710        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));
5711        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));
5712        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title));
5713        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));
5714        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));
5715        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));
5716        children.add(new Property("publisher", "string", "The name of the organization or individual that published the value set.", 0, 1, publisher));
5717        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));
5718        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));
5719        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));
5720        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));
5721        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));
5722        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));
5723        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));
5724        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));
5725        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));
5726        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));
5727      }
5728
5729      @Override
5730      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5731        switch (_hash) {
5732        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);
5733        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);
5734        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);
5735        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);
5736        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title);
5737        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);
5738        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);
5739        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);
5740        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the value set.", 0, 1, publisher);
5741        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);
5742        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);
5743        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);
5744        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);
5745        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);
5746        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);
5747        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);
5748        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);
5749        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);
5750        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);
5751        default: return super.getNamedProperty(_hash, _name, _checkValid);
5752        }
5753
5754      }
5755
5756      @Override
5757      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5758        switch (hash) {
5759        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
5760        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
5761        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
5762        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
5763        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
5764        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
5765        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
5766        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
5767        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
5768        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
5769        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
5770        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
5771        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
5772        case 1596987778: /*immutable*/ return this.immutable == null ? new Base[0] : new Base[] {this.immutable}; // BooleanType
5773        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
5774        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
5775        case 950497682: /*compose*/ return this.compose == null ? new Base[0] : new Base[] {this.compose}; // ValueSetComposeComponent
5776        case 17878207: /*expansion*/ return this.expansion == null ? new Base[0] : new Base[] {this.expansion}; // ValueSetExpansionComponent
5777        case 109264468: /*scope*/ return this.scope == null ? new Base[0] : new Base[] {this.scope}; // ValueSetScopeComponent
5778        default: return super.getProperty(hash, name, checkValid);
5779        }
5780
5781      }
5782
5783      @Override
5784      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5785        switch (hash) {
5786        case 116079: // url
5787          this.url = TypeConvertor.castToUri(value); // UriType
5788          return value;
5789        case -1618432855: // identifier
5790          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
5791          return value;
5792        case 351608024: // version
5793          this.version = TypeConvertor.castToString(value); // StringType
5794          return value;
5795        case 3373707: // name
5796          this.name = TypeConvertor.castToString(value); // StringType
5797          return value;
5798        case 110371416: // title
5799          this.title = TypeConvertor.castToString(value); // StringType
5800          return value;
5801        case -892481550: // status
5802          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5803          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5804          return value;
5805        case -404562712: // experimental
5806          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
5807          return value;
5808        case 3076014: // date
5809          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5810          return value;
5811        case 1447404028: // publisher
5812          this.publisher = TypeConvertor.castToString(value); // StringType
5813          return value;
5814        case 951526432: // contact
5815          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
5816          return value;
5817        case -1724546052: // description
5818          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5819          return value;
5820        case -669707736: // useContext
5821          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
5822          return value;
5823        case -507075711: // jurisdiction
5824          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5825          return value;
5826        case 1596987778: // immutable
5827          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
5828          return value;
5829        case -220463842: // purpose
5830          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
5831          return value;
5832        case 1522889671: // copyright
5833          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5834          return value;
5835        case 950497682: // compose
5836          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
5837          return value;
5838        case 17878207: // expansion
5839          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
5840          return value;
5841        case 109264468: // scope
5842          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
5843          return value;
5844        default: return super.setProperty(hash, name, value);
5845        }
5846
5847      }
5848
5849      @Override
5850      public Base setProperty(String name, Base value) throws FHIRException {
5851        if (name.equals("url")) {
5852          this.url = TypeConvertor.castToUri(value); // UriType
5853        } else if (name.equals("identifier")) {
5854          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
5855        } else if (name.equals("version")) {
5856          this.version = TypeConvertor.castToString(value); // StringType
5857        } else if (name.equals("name")) {
5858          this.name = TypeConvertor.castToString(value); // StringType
5859        } else if (name.equals("title")) {
5860          this.title = TypeConvertor.castToString(value); // StringType
5861        } else if (name.equals("status")) {
5862          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5863          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5864        } else if (name.equals("experimental")) {
5865          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
5866        } else if (name.equals("date")) {
5867          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5868        } else if (name.equals("publisher")) {
5869          this.publisher = TypeConvertor.castToString(value); // StringType
5870        } else if (name.equals("contact")) {
5871          this.getContact().add(TypeConvertor.castToContactDetail(value));
5872        } else if (name.equals("description")) {
5873          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5874        } else if (name.equals("useContext")) {
5875          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
5876        } else if (name.equals("jurisdiction")) {
5877          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
5878        } else if (name.equals("immutable")) {
5879          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
5880        } else if (name.equals("purpose")) {
5881          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
5882        } else if (name.equals("copyright")) {
5883          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5884        } else if (name.equals("compose")) {
5885          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
5886        } else if (name.equals("expansion")) {
5887          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
5888        } else if (name.equals("scope")) {
5889          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
5890        } else
5891          return super.setProperty(name, value);
5892        return value;
5893      }
5894
5895      @Override
5896      public Base makeProperty(int hash, String name) throws FHIRException {
5897        switch (hash) {
5898        case 116079:  return getUrlElement();
5899        case -1618432855:  return addIdentifier(); 
5900        case 351608024:  return getVersionElement();
5901        case 3373707:  return getNameElement();
5902        case 110371416:  return getTitleElement();
5903        case -892481550:  return getStatusElement();
5904        case -404562712:  return getExperimentalElement();
5905        case 3076014:  return getDateElement();
5906        case 1447404028:  return getPublisherElement();
5907        case 951526432:  return addContact(); 
5908        case -1724546052:  return getDescriptionElement();
5909        case -669707736:  return addUseContext(); 
5910        case -507075711:  return addJurisdiction(); 
5911        case 1596987778:  return getImmutableElement();
5912        case -220463842:  return getPurposeElement();
5913        case 1522889671:  return getCopyrightElement();
5914        case 950497682:  return getCompose();
5915        case 17878207:  return getExpansion();
5916        case 109264468:  return getScope();
5917        default: return super.makeProperty(hash, name);
5918        }
5919
5920      }
5921
5922      @Override
5923      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5924        switch (hash) {
5925        case 116079: /*url*/ return new String[] {"uri"};
5926        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
5927        case 351608024: /*version*/ return new String[] {"string"};
5928        case 3373707: /*name*/ return new String[] {"string"};
5929        case 110371416: /*title*/ return new String[] {"string"};
5930        case -892481550: /*status*/ return new String[] {"code"};
5931        case -404562712: /*experimental*/ return new String[] {"boolean"};
5932        case 3076014: /*date*/ return new String[] {"dateTime"};
5933        case 1447404028: /*publisher*/ return new String[] {"string"};
5934        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
5935        case -1724546052: /*description*/ return new String[] {"markdown"};
5936        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
5937        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
5938        case 1596987778: /*immutable*/ return new String[] {"boolean"};
5939        case -220463842: /*purpose*/ return new String[] {"markdown"};
5940        case 1522889671: /*copyright*/ return new String[] {"markdown"};
5941        case 950497682: /*compose*/ return new String[] {};
5942        case 17878207: /*expansion*/ return new String[] {};
5943        case 109264468: /*scope*/ return new String[] {};
5944        default: return super.getTypesForProperty(hash, name);
5945        }
5946
5947      }
5948
5949      @Override
5950      public Base addChild(String name) throws FHIRException {
5951        if (name.equals("url")) {
5952          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.url");
5953        }
5954        else if (name.equals("identifier")) {
5955          return addIdentifier();
5956        }
5957        else if (name.equals("version")) {
5958          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.version");
5959        }
5960        else if (name.equals("name")) {
5961          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.name");
5962        }
5963        else if (name.equals("title")) {
5964          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.title");
5965        }
5966        else if (name.equals("status")) {
5967          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.status");
5968        }
5969        else if (name.equals("experimental")) {
5970          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.experimental");
5971        }
5972        else if (name.equals("date")) {
5973          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.date");
5974        }
5975        else if (name.equals("publisher")) {
5976          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.publisher");
5977        }
5978        else if (name.equals("contact")) {
5979          return addContact();
5980        }
5981        else if (name.equals("description")) {
5982          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.description");
5983        }
5984        else if (name.equals("useContext")) {
5985          return addUseContext();
5986        }
5987        else if (name.equals("jurisdiction")) {
5988          return addJurisdiction();
5989        }
5990        else if (name.equals("immutable")) {
5991          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.immutable");
5992        }
5993        else if (name.equals("purpose")) {
5994          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.purpose");
5995        }
5996        else if (name.equals("copyright")) {
5997          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.copyright");
5998        }
5999        else if (name.equals("compose")) {
6000          this.compose = new ValueSetComposeComponent();
6001          return this.compose;
6002        }
6003        else if (name.equals("expansion")) {
6004          this.expansion = new ValueSetExpansionComponent();
6005          return this.expansion;
6006        }
6007        else if (name.equals("scope")) {
6008          this.scope = new ValueSetScopeComponent();
6009          return this.scope;
6010        }
6011        else
6012          return super.addChild(name);
6013      }
6014
6015  public String fhirType() {
6016    return "ValueSet";
6017
6018  }
6019
6020      public ValueSet copy() {
6021        ValueSet dst = new ValueSet();
6022        copyValues(dst);
6023        return dst;
6024      }
6025
6026      public void copyValues(ValueSet dst) {
6027        super.copyValues(dst);
6028        dst.url = url == null ? null : url.copy();
6029        if (identifier != null) {
6030          dst.identifier = new ArrayList<Identifier>();
6031          for (Identifier i : identifier)
6032            dst.identifier.add(i.copy());
6033        };
6034        dst.version = version == null ? null : version.copy();
6035        dst.name = name == null ? null : name.copy();
6036        dst.title = title == null ? null : title.copy();
6037        dst.status = status == null ? null : status.copy();
6038        dst.experimental = experimental == null ? null : experimental.copy();
6039        dst.date = date == null ? null : date.copy();
6040        dst.publisher = publisher == null ? null : publisher.copy();
6041        if (contact != null) {
6042          dst.contact = new ArrayList<ContactDetail>();
6043          for (ContactDetail i : contact)
6044            dst.contact.add(i.copy());
6045        };
6046        dst.description = description == null ? null : description.copy();
6047        if (useContext != null) {
6048          dst.useContext = new ArrayList<UsageContext>();
6049          for (UsageContext i : useContext)
6050            dst.useContext.add(i.copy());
6051        };
6052        if (jurisdiction != null) {
6053          dst.jurisdiction = new ArrayList<CodeableConcept>();
6054          for (CodeableConcept i : jurisdiction)
6055            dst.jurisdiction.add(i.copy());
6056        };
6057        dst.immutable = immutable == null ? null : immutable.copy();
6058        dst.purpose = purpose == null ? null : purpose.copy();
6059        dst.copyright = copyright == null ? null : copyright.copy();
6060        dst.compose = compose == null ? null : compose.copy();
6061        dst.expansion = expansion == null ? null : expansion.copy();
6062        dst.scope = scope == null ? null : scope.copy();
6063      }
6064
6065      protected ValueSet typedCopy() {
6066        return copy();
6067      }
6068
6069      @Override
6070      public boolean equalsDeep(Base other_) {
6071        if (!super.equalsDeep(other_))
6072          return false;
6073        if (!(other_ instanceof ValueSet))
6074          return false;
6075        ValueSet o = (ValueSet) other_;
6076        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
6077           && compareDeep(name, o.name, true) && compareDeep(title, o.title, true) && compareDeep(status, o.status, true)
6078           && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true)
6079           && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
6080           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(immutable, o.immutable, true)
6081           && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true) && compareDeep(compose, o.compose, true)
6082           && compareDeep(expansion, o.expansion, true) && compareDeep(scope, o.scope, true);
6083      }
6084
6085      @Override
6086      public boolean equalsShallow(Base other_) {
6087        if (!super.equalsShallow(other_))
6088          return false;
6089        if (!(other_ instanceof ValueSet))
6090          return false;
6091        ValueSet o = (ValueSet) other_;
6092        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
6093           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
6094           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
6095           && compareValues(immutable, o.immutable, true) && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
6096          ;
6097      }
6098
6099      public boolean isEmpty() {
6100        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
6101          , name, title, status, experimental, date, publisher, contact, description, useContext
6102          , jurisdiction, immutable, purpose, copyright, compose, expansion, scope);
6103      }
6104
6105  @Override
6106  public ResourceType getResourceType() {
6107    return ResourceType.ValueSet;
6108   }
6109
6110 /**
6111   * Search parameter: <b>code</b>
6112   * <p>
6113   * Description: <b>This special parameter searches for codes in the value set. See additional notes on the ValueSet resource</b><br>
6114   * Type: <b>token</b><br>
6115   * Path: <b>ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code</b><br>
6116   * </p>
6117   */
6118  @SearchParamDefinition(name="code", path="ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code", description="This special parameter searches for codes in the value set. See additional notes on the ValueSet resource", type="token" )
6119  public static final String SP_CODE = "code";
6120 /**
6121   * <b>Fluent Client</b> search parameter constant for <b>code</b>
6122   * <p>
6123   * Description: <b>This special parameter searches for codes in the value set. See additional notes on the ValueSet resource</b><br>
6124   * Type: <b>token</b><br>
6125   * Path: <b>ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code</b><br>
6126   * </p>
6127   */
6128  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
6129
6130 /**
6131   * Search parameter: <b>expansion</b>
6132   * <p>
6133   * Description: <b>Identifies the value set expansion (business identifier)</b><br>
6134   * Type: <b>uri</b><br>
6135   * Path: <b>ValueSet.expansion.identifier</b><br>
6136   * </p>
6137   */
6138  @SearchParamDefinition(name="expansion", path="ValueSet.expansion.identifier", description="Identifies the value set expansion (business identifier)", type="uri" )
6139  public static final String SP_EXPANSION = "expansion";
6140 /**
6141   * <b>Fluent Client</b> search parameter constant for <b>expansion</b>
6142   * <p>
6143   * Description: <b>Identifies the value set expansion (business identifier)</b><br>
6144   * Type: <b>uri</b><br>
6145   * Path: <b>ValueSet.expansion.identifier</b><br>
6146   * </p>
6147   */
6148  public static final ca.uhn.fhir.rest.gclient.UriClientParam EXPANSION = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_EXPANSION);
6149
6150 /**
6151   * Search parameter: <b>reference</b>
6152   * <p>
6153   * Description: <b>A code system included or excluded in the value set or an imported value set</b><br>
6154   * Type: <b>uri</b><br>
6155   * Path: <b>ValueSet.compose.include.system</b><br>
6156   * </p>
6157   */
6158  @SearchParamDefinition(name="reference", path="ValueSet.compose.include.system", description="A code system included or excluded in the value set or an imported value set", type="uri" )
6159  public static final String SP_REFERENCE = "reference";
6160 /**
6161   * <b>Fluent Client</b> search parameter constant for <b>reference</b>
6162   * <p>
6163   * Description: <b>A code system included or excluded in the value set or an imported value set</b><br>
6164   * Type: <b>uri</b><br>
6165   * Path: <b>ValueSet.compose.include.system</b><br>
6166   * </p>
6167   */
6168  public static final ca.uhn.fhir.rest.gclient.UriClientParam REFERENCE = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_REFERENCE);
6169
6170 /**
6171   * Search parameter: <b>context-quantity</b>
6172   * <p>
6173   * Description: <b>Multiple Resources: 
6174
6175* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
6176* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
6177* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
6178* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
6179* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
6180* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
6181* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
6182* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
6183* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
6184* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
6185* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
6186* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
6187* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
6188* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
6189</b><br>
6190   * Type: <b>quantity</b><br>
6191   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
6192   * </p>
6193   */
6194  @SearchParamDefinition(name="context-quantity", path="(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement\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* [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* [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* [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* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set\r\n", type="quantity" )
6195  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
6196 /**
6197   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
6198   * <p>
6199   * Description: <b>Multiple Resources: 
6200
6201* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
6202* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
6203* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
6204* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
6205* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
6206* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
6207* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
6208* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
6209* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
6210* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
6211* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
6212* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
6213* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
6214* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
6215</b><br>
6216   * Type: <b>quantity</b><br>
6217   * Path: <b>(CapabilityStatement.useContext.value as Quantity) | (CapabilityStatement.useContext.value as Range) | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | (CompartmentDefinition.useContext.value as Quantity) | (CompartmentDefinition.useContext.value as Range) | (ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range) | (GraphDefinition.useContext.value as Quantity) | (GraphDefinition.useContext.value as Range) | (ImplementationGuide.useContext.value as Quantity) | (ImplementationGuide.useContext.value as Range) | (MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range) | (NamingSystem.useContext.value as Quantity) | (NamingSystem.useContext.value as Range) | (OperationDefinition.useContext.value as Quantity) | (OperationDefinition.useContext.value as Range) | (SearchParameter.useContext.value as Quantity) | (SearchParameter.useContext.value as Range) | (StructureDefinition.useContext.value as Quantity) | (StructureDefinition.useContext.value as Range) | (StructureMap.useContext.value as Quantity) | (StructureMap.useContext.value as Range) | (TerminologyCapabilities.useContext.value as Quantity) | (TerminologyCapabilities.useContext.value as Range) | (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range)</b><br>
6218   * </p>
6219   */
6220  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
6221
6222 /**
6223   * Search parameter: <b>context-type-quantity</b>
6224   * <p>
6225   * Description: <b>Multiple Resources: 
6226
6227* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
6228* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
6229* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
6230* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
6231* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
6232* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
6233* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
6234* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
6235* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
6236* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
6237* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
6238* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
6239* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
6240* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
6241</b><br>
6242   * Type: <b>composite</b><br>
6243   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
6244   * </p>
6245   */
6246  @SearchParamDefinition(name="context-type-quantity", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement\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* [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* [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* [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* [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"} )
6247  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
6248 /**
6249   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
6250   * <p>
6251   * Description: <b>Multiple Resources: 
6252
6253* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
6254* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
6255* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
6256* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
6257* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
6258* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
6259* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
6260* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
6261* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
6262* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
6263* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
6264* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
6265* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
6266* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
6267</b><br>
6268   * Type: <b>composite</b><br>
6269   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
6270   * </p>
6271   */
6272  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);
6273
6274 /**
6275   * Search parameter: <b>context-type-value</b>
6276   * <p>
6277   * Description: <b>Multiple Resources: 
6278
6279* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
6280* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
6281* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
6282* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
6283* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
6284* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
6285* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
6286* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
6287* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
6288* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
6289* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
6290* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
6291* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
6292* [ValueSet](valueset.html): A use context type and value assigned to the value set
6293</b><br>
6294   * Type: <b>composite</b><br>
6295   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
6296   * </p>
6297   */
6298  @SearchParamDefinition(name="context-type-value", path="CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement\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* [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* [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* [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* [ValueSet](valueset.html): A use context type and value assigned to the value set\r\n", type="composite", compositeOf={"context-type", "context"} )
6299  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
6300 /**
6301   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
6302   * <p>
6303   * Description: <b>Multiple Resources: 
6304
6305* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
6306* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
6307* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
6308* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
6309* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
6310* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
6311* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
6312* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
6313* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
6314* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
6315* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
6316* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
6317* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
6318* [ValueSet](valueset.html): A use context type and value assigned to the value set
6319</b><br>
6320   * Type: <b>composite</b><br>
6321   * Path: <b>CapabilityStatement.useContext | CodeSystem.useContext | CompartmentDefinition.useContext | ConceptMap.useContext | GraphDefinition.useContext | ImplementationGuide.useContext | MessageDefinition.useContext | NamingSystem.useContext | OperationDefinition.useContext | SearchParameter.useContext | StructureDefinition.useContext | StructureMap.useContext | TerminologyCapabilities.useContext | ValueSet.useContext</b><br>
6322   * </p>
6323   */
6324  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);
6325
6326 /**
6327   * Search parameter: <b>context-type</b>
6328   * <p>
6329   * Description: <b>Multiple Resources: 
6330
6331* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
6332* [CodeSystem](codesystem.html): A type of use context assigned to the code system
6333* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
6334* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
6335* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
6336* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
6337* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
6338* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
6339* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
6340* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
6341* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
6342* [StructureMap](structuremap.html): A type of use context assigned to the structure map
6343* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
6344* [ValueSet](valueset.html): A type of use context assigned to the value set
6345</b><br>
6346   * Type: <b>token</b><br>
6347   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
6348   * </p>
6349   */
6350  @SearchParamDefinition(name="context-type", path="CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement\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* [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* [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* [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* [ValueSet](valueset.html): A type of use context assigned to the value set\r\n", type="token" )
6351  public static final String SP_CONTEXT_TYPE = "context-type";
6352 /**
6353   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
6354   * <p>
6355   * Description: <b>Multiple Resources: 
6356
6357* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
6358* [CodeSystem](codesystem.html): A type of use context assigned to the code system
6359* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
6360* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
6361* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
6362* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
6363* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
6364* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
6365* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
6366* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
6367* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
6368* [StructureMap](structuremap.html): A type of use context assigned to the structure map
6369* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
6370* [ValueSet](valueset.html): A type of use context assigned to the value set
6371</b><br>
6372   * Type: <b>token</b><br>
6373   * Path: <b>CapabilityStatement.useContext.code | CodeSystem.useContext.code | CompartmentDefinition.useContext.code | ConceptMap.useContext.code | GraphDefinition.useContext.code | ImplementationGuide.useContext.code | MessageDefinition.useContext.code | NamingSystem.useContext.code | OperationDefinition.useContext.code | SearchParameter.useContext.code | StructureDefinition.useContext.code | StructureMap.useContext.code | TerminologyCapabilities.useContext.code | ValueSet.useContext.code</b><br>
6374   * </p>
6375   */
6376  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
6377
6378 /**
6379   * Search parameter: <b>context</b>
6380   * <p>
6381   * Description: <b>Multiple Resources: 
6382
6383* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
6384* [CodeSystem](codesystem.html): A use context assigned to the code system
6385* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
6386* [ConceptMap](conceptmap.html): A use context assigned to the concept map
6387* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
6388* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
6389* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
6390* [NamingSystem](namingsystem.html): A use context assigned to the naming system
6391* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
6392* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
6393* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
6394* [StructureMap](structuremap.html): A use context assigned to the structure map
6395* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
6396* [ValueSet](valueset.html): A use context assigned to the value set
6397</b><br>
6398   * Type: <b>token</b><br>
6399   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
6400   * </p>
6401   */
6402  @SearchParamDefinition(name="context", path="(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement\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* [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* [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* [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* [ValueSet](valueset.html): A use context assigned to the value set\r\n", type="token" )
6403  public static final String SP_CONTEXT = "context";
6404 /**
6405   * <b>Fluent Client</b> search parameter constant for <b>context</b>
6406   * <p>
6407   * Description: <b>Multiple Resources: 
6408
6409* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
6410* [CodeSystem](codesystem.html): A use context assigned to the code system
6411* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
6412* [ConceptMap](conceptmap.html): A use context assigned to the concept map
6413* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
6414* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
6415* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
6416* [NamingSystem](namingsystem.html): A use context assigned to the naming system
6417* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
6418* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
6419* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
6420* [StructureMap](structuremap.html): A use context assigned to the structure map
6421* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
6422* [ValueSet](valueset.html): A use context assigned to the value set
6423</b><br>
6424   * Type: <b>token</b><br>
6425   * Path: <b>(CapabilityStatement.useContext.value as CodeableConcept) | (CodeSystem.useContext.value as CodeableConcept) | (CompartmentDefinition.useContext.value as CodeableConcept) | (ConceptMap.useContext.value as CodeableConcept) | (GraphDefinition.useContext.value as CodeableConcept) | (ImplementationGuide.useContext.value as CodeableConcept) | (MessageDefinition.useContext.value as CodeableConcept) | (NamingSystem.useContext.value as CodeableConcept) | (OperationDefinition.useContext.value as CodeableConcept) | (SearchParameter.useContext.value as CodeableConcept) | (StructureDefinition.useContext.value as CodeableConcept) | (StructureMap.useContext.value as CodeableConcept) | (TerminologyCapabilities.useContext.value as CodeableConcept) | (ValueSet.useContext.value as CodeableConcept)</b><br>
6426   * </p>
6427   */
6428  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
6429
6430 /**
6431   * Search parameter: <b>date</b>
6432   * <p>
6433   * Description: <b>Multiple Resources: 
6434
6435* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
6436* [CodeSystem](codesystem.html): The code system publication date
6437* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
6438* [ConceptMap](conceptmap.html): The concept map publication date
6439* [GraphDefinition](graphdefinition.html): The graph definition publication date
6440* [ImplementationGuide](implementationguide.html): The implementation guide publication date
6441* [MessageDefinition](messagedefinition.html): The message definition publication date
6442* [NamingSystem](namingsystem.html): The naming system publication date
6443* [OperationDefinition](operationdefinition.html): The operation definition publication date
6444* [SearchParameter](searchparameter.html): The search parameter publication date
6445* [StructureDefinition](structuredefinition.html): The structure definition publication date
6446* [StructureMap](structuremap.html): The structure map publication date
6447* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
6448* [ValueSet](valueset.html): The value set publication date
6449</b><br>
6450   * Type: <b>date</b><br>
6451   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
6452   * </p>
6453   */
6454  @SearchParamDefinition(name="date", path="CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The capability statement 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* [GraphDefinition](graphdefinition.html): The graph definition publication date\r\n* [ImplementationGuide](implementationguide.html): The implementation guide 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* [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* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date\r\n* [ValueSet](valueset.html): The value set publication date\r\n", type="date" )
6455  public static final String SP_DATE = "date";
6456 /**
6457   * <b>Fluent Client</b> search parameter constant for <b>date</b>
6458   * <p>
6459   * Description: <b>Multiple Resources: 
6460
6461* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
6462* [CodeSystem](codesystem.html): The code system publication date
6463* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
6464* [ConceptMap](conceptmap.html): The concept map publication date
6465* [GraphDefinition](graphdefinition.html): The graph definition publication date
6466* [ImplementationGuide](implementationguide.html): The implementation guide publication date
6467* [MessageDefinition](messagedefinition.html): The message definition publication date
6468* [NamingSystem](namingsystem.html): The naming system publication date
6469* [OperationDefinition](operationdefinition.html): The operation definition publication date
6470* [SearchParameter](searchparameter.html): The search parameter publication date
6471* [StructureDefinition](structuredefinition.html): The structure definition publication date
6472* [StructureMap](structuremap.html): The structure map publication date
6473* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
6474* [ValueSet](valueset.html): The value set publication date
6475</b><br>
6476   * Type: <b>date</b><br>
6477   * Path: <b>CapabilityStatement.date | CodeSystem.date | CompartmentDefinition.date | ConceptMap.date | GraphDefinition.date | ImplementationGuide.date | MessageDefinition.date | NamingSystem.date | OperationDefinition.date | SearchParameter.date | StructureDefinition.date | StructureMap.date | TerminologyCapabilities.date | ValueSet.date</b><br>
6478   * </p>
6479   */
6480  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
6481
6482 /**
6483   * Search parameter: <b>description</b>
6484   * <p>
6485   * Description: <b>Multiple Resources: 
6486
6487* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
6488* [CodeSystem](codesystem.html): The description of the code system
6489* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
6490* [ConceptMap](conceptmap.html): The description of the concept map
6491* [GraphDefinition](graphdefinition.html): The description of the graph definition
6492* [ImplementationGuide](implementationguide.html): The description of the implementation guide
6493* [MessageDefinition](messagedefinition.html): The description of the message definition
6494* [NamingSystem](namingsystem.html): The description of the naming system
6495* [OperationDefinition](operationdefinition.html): The description of the operation definition
6496* [SearchParameter](searchparameter.html): The description of the search parameter
6497* [StructureDefinition](structuredefinition.html): The description of the structure definition
6498* [StructureMap](structuremap.html): The description of the structure map
6499* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
6500* [ValueSet](valueset.html): The description of the value set
6501</b><br>
6502   * Type: <b>string</b><br>
6503   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
6504   * </p>
6505   */
6506  @SearchParamDefinition(name="description", path="CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The description of the capability statement\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* [GraphDefinition](graphdefinition.html): The description of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The description of the implementation guide\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* [SearchParameter](searchparameter.html): The description of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The description of the structure definition\r\n* [StructureMap](structuremap.html): The description of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities\r\n* [ValueSet](valueset.html): The description of the value set\r\n", type="string" )
6507  public static final String SP_DESCRIPTION = "description";
6508 /**
6509   * <b>Fluent Client</b> search parameter constant for <b>description</b>
6510   * <p>
6511   * Description: <b>Multiple Resources: 
6512
6513* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
6514* [CodeSystem](codesystem.html): The description of the code system
6515* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
6516* [ConceptMap](conceptmap.html): The description of the concept map
6517* [GraphDefinition](graphdefinition.html): The description of the graph definition
6518* [ImplementationGuide](implementationguide.html): The description of the implementation guide
6519* [MessageDefinition](messagedefinition.html): The description of the message definition
6520* [NamingSystem](namingsystem.html): The description of the naming system
6521* [OperationDefinition](operationdefinition.html): The description of the operation definition
6522* [SearchParameter](searchparameter.html): The description of the search parameter
6523* [StructureDefinition](structuredefinition.html): The description of the structure definition
6524* [StructureMap](structuremap.html): The description of the structure map
6525* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
6526* [ValueSet](valueset.html): The description of the value set
6527</b><br>
6528   * Type: <b>string</b><br>
6529   * Path: <b>CapabilityStatement.description | CodeSystem.description | CompartmentDefinition.description | ConceptMap.description | GraphDefinition.description | ImplementationGuide.description | MessageDefinition.description | NamingSystem.description | OperationDefinition.description | SearchParameter.description | StructureDefinition.description | StructureMap.description | TerminologyCapabilities.description | ValueSet.description</b><br>
6530   * </p>
6531   */
6532  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
6533
6534 /**
6535   * Search parameter: <b>identifier</b>
6536   * <p>
6537   * Description: <b>Multiple Resources: 
6538
6539* [CodeSystem](codesystem.html): External identifier for the code system
6540* [ConceptMap](conceptmap.html): External identifier for the concept map
6541* [MessageDefinition](messagedefinition.html): External identifier for the message definition
6542* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
6543* [StructureMap](structuremap.html): External identifier for the structure map
6544* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
6545* [ValueSet](valueset.html): External identifier for the value set
6546</b><br>
6547   * Type: <b>token</b><br>
6548   * Path: <b>CodeSystem.identifier | ConceptMap.identifier | MessageDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | TerminologyCapabilities.identifier | ValueSet.identifier</b><br>
6549   * </p>
6550   */
6551  @SearchParamDefinition(name="identifier", path="CodeSystem.identifier | ConceptMap.identifier | MessageDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | TerminologyCapabilities.identifier | ValueSet.identifier", description="Multiple Resources: \r\n\r\n* [CodeSystem](codesystem.html): External identifier for the code system\r\n* [ConceptMap](conceptmap.html): External identifier for the concept map\r\n* [MessageDefinition](messagedefinition.html): External identifier for the message definition\r\n* [StructureDefinition](structuredefinition.html): External identifier for the structure definition\r\n* [StructureMap](structuremap.html): External identifier for the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities\r\n* [ValueSet](valueset.html): External identifier for the value set\r\n", type="token" )
6552  public static final String SP_IDENTIFIER = "identifier";
6553 /**
6554   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
6555   * <p>
6556   * Description: <b>Multiple Resources: 
6557
6558* [CodeSystem](codesystem.html): External identifier for the code system
6559* [ConceptMap](conceptmap.html): External identifier for the concept map
6560* [MessageDefinition](messagedefinition.html): External identifier for the message definition
6561* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
6562* [StructureMap](structuremap.html): External identifier for the structure map
6563* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
6564* [ValueSet](valueset.html): External identifier for the value set
6565</b><br>
6566   * Type: <b>token</b><br>
6567   * Path: <b>CodeSystem.identifier | ConceptMap.identifier | MessageDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | TerminologyCapabilities.identifier | ValueSet.identifier</b><br>
6568   * </p>
6569   */
6570  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
6571
6572 /**
6573   * Search parameter: <b>jurisdiction</b>
6574   * <p>
6575   * Description: <b>Multiple Resources: 
6576
6577* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
6578* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
6579* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
6580* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
6581* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
6582* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
6583* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
6584* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
6585* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
6586* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
6587* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
6588* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
6589* [ValueSet](valueset.html): Intended jurisdiction for the value set
6590</b><br>
6591   * Type: <b>token</b><br>
6592   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
6593   * </p>
6594   */
6595  @SearchParamDefinition(name="jurisdiction", path="CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement\r\n* [CodeSystem](codesystem.html): Intended jurisdiction for the code system\r\n* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map\r\n* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition\r\n* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition\r\n* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system\r\n* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition\r\n* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter\r\n* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition\r\n* [StructureMap](structuremap.html): Intended jurisdiction for the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities\r\n* [ValueSet](valueset.html): Intended jurisdiction for the value set\r\n", type="token" )
6596  public static final String SP_JURISDICTION = "jurisdiction";
6597 /**
6598   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
6599   * <p>
6600   * Description: <b>Multiple Resources: 
6601
6602* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
6603* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
6604* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
6605* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
6606* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
6607* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
6608* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
6609* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
6610* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
6611* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
6612* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
6613* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
6614* [ValueSet](valueset.html): Intended jurisdiction for the value set
6615</b><br>
6616   * Type: <b>token</b><br>
6617   * Path: <b>CapabilityStatement.jurisdiction | CodeSystem.jurisdiction | ConceptMap.jurisdiction | GraphDefinition.jurisdiction | ImplementationGuide.jurisdiction | MessageDefinition.jurisdiction | NamingSystem.jurisdiction | OperationDefinition.jurisdiction | SearchParameter.jurisdiction | StructureDefinition.jurisdiction | StructureMap.jurisdiction | TerminologyCapabilities.jurisdiction | ValueSet.jurisdiction</b><br>
6618   * </p>
6619   */
6620  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
6621
6622 /**
6623   * Search parameter: <b>name</b>
6624   * <p>
6625   * Description: <b>Multiple Resources: 
6626
6627* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
6628* [CodeSystem](codesystem.html): Computationally friendly name of the code system
6629* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
6630* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
6631* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
6632* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
6633* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
6634* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
6635* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
6636* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
6637* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
6638* [StructureMap](structuremap.html): Computationally friendly name of the structure map
6639* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
6640* [ValueSet](valueset.html): Computationally friendly name of the value set
6641</b><br>
6642   * Type: <b>string</b><br>
6643   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
6644   * </p>
6645   */
6646  @SearchParamDefinition(name="name", path="CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): Computationally friendly name of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition\r\n* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map\r\n* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition\r\n* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system\r\n* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition\r\n* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition\r\n* [StructureMap](structuremap.html): Computationally friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): Computationally friendly name of the value set\r\n", type="string" )
6647  public static final String SP_NAME = "name";
6648 /**
6649   * <b>Fluent Client</b> search parameter constant for <b>name</b>
6650   * <p>
6651   * Description: <b>Multiple Resources: 
6652
6653* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
6654* [CodeSystem](codesystem.html): Computationally friendly name of the code system
6655* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
6656* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
6657* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
6658* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
6659* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
6660* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
6661* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
6662* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
6663* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
6664* [StructureMap](structuremap.html): Computationally friendly name of the structure map
6665* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
6666* [ValueSet](valueset.html): Computationally friendly name of the value set
6667</b><br>
6668   * Type: <b>string</b><br>
6669   * Path: <b>CapabilityStatement.name | CodeSystem.name | CompartmentDefinition.name | ConceptMap.name | GraphDefinition.name | ImplementationGuide.name | MessageDefinition.name | NamingSystem.name | OperationDefinition.name | SearchParameter.name | StructureDefinition.name | StructureMap.name | TerminologyCapabilities.name | ValueSet.name</b><br>
6670   * </p>
6671   */
6672  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
6673
6674 /**
6675   * Search parameter: <b>publisher</b>
6676   * <p>
6677   * Description: <b>Multiple Resources: 
6678
6679* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
6680* [CodeSystem](codesystem.html): Name of the publisher of the code system
6681* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
6682* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
6683* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
6684* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
6685* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
6686* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
6687* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
6688* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
6689* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
6690* [StructureMap](structuremap.html): Name of the publisher of the structure map
6691* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
6692* [ValueSet](valueset.html): Name of the publisher of the value set
6693</b><br>
6694   * Type: <b>string</b><br>
6695   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
6696   * </p>
6697   */
6698  @SearchParamDefinition(name="publisher", path="CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement\r\n* [CodeSystem](codesystem.html): Name of the publisher of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition\r\n* [ConceptMap](conceptmap.html): Name of the publisher of the concept map\r\n* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition\r\n* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition\r\n* [NamingSystem](namingsystem.html): Name of the publisher of the naming system\r\n* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition\r\n* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter\r\n* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition\r\n* [StructureMap](structuremap.html): Name of the publisher of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities\r\n* [ValueSet](valueset.html): Name of the publisher of the value set\r\n", type="string" )
6699  public static final String SP_PUBLISHER = "publisher";
6700 /**
6701   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
6702   * <p>
6703   * Description: <b>Multiple Resources: 
6704
6705* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
6706* [CodeSystem](codesystem.html): Name of the publisher of the code system
6707* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
6708* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
6709* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
6710* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
6711* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
6712* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
6713* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
6714* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
6715* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
6716* [StructureMap](structuremap.html): Name of the publisher of the structure map
6717* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
6718* [ValueSet](valueset.html): Name of the publisher of the value set
6719</b><br>
6720   * Type: <b>string</b><br>
6721   * Path: <b>CapabilityStatement.publisher | CodeSystem.publisher | CompartmentDefinition.publisher | ConceptMap.publisher | GraphDefinition.publisher | ImplementationGuide.publisher | MessageDefinition.publisher | NamingSystem.publisher | OperationDefinition.publisher | SearchParameter.publisher | StructureDefinition.publisher | StructureMap.publisher | TerminologyCapabilities.publisher | ValueSet.publisher</b><br>
6722   * </p>
6723   */
6724  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
6725
6726 /**
6727   * Search parameter: <b>status</b>
6728   * <p>
6729   * Description: <b>Multiple Resources: 
6730
6731* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
6732* [CodeSystem](codesystem.html): The current status of the code system
6733* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
6734* [ConceptMap](conceptmap.html): The current status of the concept map
6735* [GraphDefinition](graphdefinition.html): The current status of the graph definition
6736* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
6737* [MessageDefinition](messagedefinition.html): The current status of the message definition
6738* [NamingSystem](namingsystem.html): The current status of the naming system
6739* [OperationDefinition](operationdefinition.html): The current status of the operation definition
6740* [SearchParameter](searchparameter.html): The current status of the search parameter
6741* [StructureDefinition](structuredefinition.html): The current status of the structure definition
6742* [StructureMap](structuremap.html): The current status of the structure map
6743* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
6744* [ValueSet](valueset.html): The current status of the value set
6745</b><br>
6746   * Type: <b>token</b><br>
6747   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
6748   * </p>
6749   */
6750  @SearchParamDefinition(name="status", path="CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement\r\n* [CodeSystem](codesystem.html): The current status of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition\r\n* [ConceptMap](conceptmap.html): The current status of the concept map\r\n* [GraphDefinition](graphdefinition.html): The current status of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The current status of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The current status of the message definition\r\n* [NamingSystem](namingsystem.html): The current status of the naming system\r\n* [OperationDefinition](operationdefinition.html): The current status of the operation definition\r\n* [SearchParameter](searchparameter.html): The current status of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The current status of the structure definition\r\n* [StructureMap](structuremap.html): The current status of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities\r\n* [ValueSet](valueset.html): The current status of the value set\r\n", type="token" )
6751  public static final String SP_STATUS = "status";
6752 /**
6753   * <b>Fluent Client</b> search parameter constant for <b>status</b>
6754   * <p>
6755   * Description: <b>Multiple Resources: 
6756
6757* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
6758* [CodeSystem](codesystem.html): The current status of the code system
6759* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
6760* [ConceptMap](conceptmap.html): The current status of the concept map
6761* [GraphDefinition](graphdefinition.html): The current status of the graph definition
6762* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
6763* [MessageDefinition](messagedefinition.html): The current status of the message definition
6764* [NamingSystem](namingsystem.html): The current status of the naming system
6765* [OperationDefinition](operationdefinition.html): The current status of the operation definition
6766* [SearchParameter](searchparameter.html): The current status of the search parameter
6767* [StructureDefinition](structuredefinition.html): The current status of the structure definition
6768* [StructureMap](structuremap.html): The current status of the structure map
6769* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
6770* [ValueSet](valueset.html): The current status of the value set
6771</b><br>
6772   * Type: <b>token</b><br>
6773   * Path: <b>CapabilityStatement.status | CodeSystem.status | CompartmentDefinition.status | ConceptMap.status | GraphDefinition.status | ImplementationGuide.status | MessageDefinition.status | NamingSystem.status | OperationDefinition.status | SearchParameter.status | StructureDefinition.status | StructureMap.status | TerminologyCapabilities.status | ValueSet.status</b><br>
6774   * </p>
6775   */
6776  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
6777
6778 /**
6779   * Search parameter: <b>title</b>
6780   * <p>
6781   * Description: <b>Multiple Resources: 
6782
6783* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
6784* [CodeSystem](codesystem.html): The human-friendly name of the code system
6785* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
6786* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
6787* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
6788* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
6789* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
6790* [StructureMap](structuremap.html): The human-friendly name of the structure map
6791* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
6792* [ValueSet](valueset.html): The human-friendly name of the value set
6793</b><br>
6794   * Type: <b>string</b><br>
6795   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
6796   * </p>
6797   */
6798  @SearchParamDefinition(name="title", path="CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement\r\n* [CodeSystem](codesystem.html): The human-friendly name of the code system\r\n* [ConceptMap](conceptmap.html): The human-friendly name of the concept map\r\n* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition\r\n* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition\r\n* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition\r\n* [StructureMap](structuremap.html): The human-friendly name of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities\r\n* [ValueSet](valueset.html): The human-friendly name of the value set\r\n", type="string" )
6799  public static final String SP_TITLE = "title";
6800 /**
6801   * <b>Fluent Client</b> search parameter constant for <b>title</b>
6802   * <p>
6803   * Description: <b>Multiple Resources: 
6804
6805* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
6806* [CodeSystem](codesystem.html): The human-friendly name of the code system
6807* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
6808* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
6809* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
6810* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
6811* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
6812* [StructureMap](structuremap.html): The human-friendly name of the structure map
6813* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
6814* [ValueSet](valueset.html): The human-friendly name of the value set
6815</b><br>
6816   * Type: <b>string</b><br>
6817   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
6818   * </p>
6819   */
6820  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
6821
6822 /**
6823   * Search parameter: <b>url</b>
6824   * <p>
6825   * Description: <b>Multiple Resources: 
6826
6827* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
6828* [CodeSystem](codesystem.html): The uri that identifies the code system
6829* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
6830* [ConceptMap](conceptmap.html): The uri that identifies the concept map
6831* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
6832* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
6833* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
6834* [NamingSystem](namingsystem.html): The uri that identifies the naming system
6835* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
6836* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
6837* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
6838* [StructureMap](structuremap.html): The uri that identifies the structure map
6839* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
6840* [ValueSet](valueset.html): The uri that identifies the value set
6841</b><br>
6842   * Type: <b>uri</b><br>
6843   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
6844   * </p>
6845   */
6846  @SearchParamDefinition(name="url", path="CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement\r\n* [CodeSystem](codesystem.html): The uri that identifies the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition\r\n* [ConceptMap](conceptmap.html): The uri that identifies the concept map\r\n* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition\r\n* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition\r\n* [NamingSystem](namingsystem.html): The uri that identifies the naming system\r\n* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition\r\n* [SearchParameter](searchparameter.html): The uri that identifies the search parameter\r\n* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition\r\n* [StructureMap](structuremap.html): The uri that identifies the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities\r\n* [ValueSet](valueset.html): The uri that identifies the value set\r\n", type="uri" )
6847  public static final String SP_URL = "url";
6848 /**
6849   * <b>Fluent Client</b> search parameter constant for <b>url</b>
6850   * <p>
6851   * Description: <b>Multiple Resources: 
6852
6853* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
6854* [CodeSystem](codesystem.html): The uri that identifies the code system
6855* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
6856* [ConceptMap](conceptmap.html): The uri that identifies the concept map
6857* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
6858* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
6859* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
6860* [NamingSystem](namingsystem.html): The uri that identifies the naming system
6861* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
6862* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
6863* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
6864* [StructureMap](structuremap.html): The uri that identifies the structure map
6865* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
6866* [ValueSet](valueset.html): The uri that identifies the value set
6867</b><br>
6868   * Type: <b>uri</b><br>
6869   * Path: <b>CapabilityStatement.url | CodeSystem.url | CompartmentDefinition.url | ConceptMap.url | GraphDefinition.url | ImplementationGuide.url | MessageDefinition.url | NamingSystem.url | OperationDefinition.url | SearchParameter.url | StructureDefinition.url | StructureMap.url | TerminologyCapabilities.url | ValueSet.url</b><br>
6870   * </p>
6871   */
6872  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
6873
6874 /**
6875   * Search parameter: <b>version</b>
6876   * <p>
6877   * Description: <b>Multiple Resources: 
6878
6879* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
6880* [CodeSystem](codesystem.html): The business version of the code system
6881* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
6882* [ConceptMap](conceptmap.html): The business version of the concept map
6883* [GraphDefinition](graphdefinition.html): The business version of the graph definition
6884* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
6885* [MessageDefinition](messagedefinition.html): The business version of the message definition
6886* [NamingSystem](namingsystem.html): The business version of the naming system
6887* [OperationDefinition](operationdefinition.html): The business version of the operation definition
6888* [SearchParameter](searchparameter.html): The business version of the search parameter
6889* [StructureDefinition](structuredefinition.html): The business version of the structure definition
6890* [StructureMap](structuremap.html): The business version of the structure map
6891* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
6892* [ValueSet](valueset.html): The business version of the value set
6893</b><br>
6894   * Type: <b>token</b><br>
6895   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
6896   * </p>
6897   */
6898  @SearchParamDefinition(name="version", path="CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version", description="Multiple Resources: \r\n\r\n* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement\r\n* [CodeSystem](codesystem.html): The business version of the code system\r\n* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition\r\n* [ConceptMap](conceptmap.html): The business version of the concept map\r\n* [GraphDefinition](graphdefinition.html): The business version of the graph definition\r\n* [ImplementationGuide](implementationguide.html): The business version of the implementation guide\r\n* [MessageDefinition](messagedefinition.html): The business version of the message definition\r\n* [NamingSystem](namingsystem.html): The business version of the naming system\r\n* [OperationDefinition](operationdefinition.html): The business version of the operation definition\r\n* [SearchParameter](searchparameter.html): The business version of the search parameter\r\n* [StructureDefinition](structuredefinition.html): The business version of the structure definition\r\n* [StructureMap](structuremap.html): The business version of the structure map\r\n* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities\r\n* [ValueSet](valueset.html): The business version of the value set\r\n", type="token" )
6899  public static final String SP_VERSION = "version";
6900 /**
6901   * <b>Fluent Client</b> search parameter constant for <b>version</b>
6902   * <p>
6903   * Description: <b>Multiple Resources: 
6904
6905* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
6906* [CodeSystem](codesystem.html): The business version of the code system
6907* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
6908* [ConceptMap](conceptmap.html): The business version of the concept map
6909* [GraphDefinition](graphdefinition.html): The business version of the graph definition
6910* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
6911* [MessageDefinition](messagedefinition.html): The business version of the message definition
6912* [NamingSystem](namingsystem.html): The business version of the naming system
6913* [OperationDefinition](operationdefinition.html): The business version of the operation definition
6914* [SearchParameter](searchparameter.html): The business version of the search parameter
6915* [StructureDefinition](structuredefinition.html): The business version of the structure definition
6916* [StructureMap](structuremap.html): The business version of the structure map
6917* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
6918* [ValueSet](valueset.html): The business version of the value set
6919</b><br>
6920   * Type: <b>token</b><br>
6921   * Path: <b>CapabilityStatement.version | CodeSystem.version | CompartmentDefinition.version | ConceptMap.version | GraphDefinition.version | ImplementationGuide.version | MessageDefinition.version | NamingSystem.version | OperationDefinition.version | SearchParameter.version | StructureDefinition.version | StructureMap.version | TerminologyCapabilities.version | ValueSet.version</b><br>
6922   * </p>
6923   */
6924  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
6925
6926
6927}
6928