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 Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.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 specify 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, 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 specify 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, 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 specify 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, 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 specify 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, 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 specify 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, 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         * The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.
4446         */
4447        @Child(name = "focus", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
4448        @Description(shortDefinition="General focus of the Value Set as it relates to the intended semantic space", formalDefinition="The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc." )
4449        protected StringType focus;
4450
4451        /**
4452         * Criteria describing which concepts or codes should be included and why.
4453         */
4454        @Child(name = "inclusionCriteria", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
4455        @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." )
4456        protected StringType inclusionCriteria;
4457
4458        /**
4459         * Criteria describing which concepts or codes should be excluded and why.
4460         */
4461        @Child(name = "exclusionCriteria", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
4462        @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." )
4463        protected StringType exclusionCriteria;
4464
4465        private static final long serialVersionUID = -467705711L;
4466
4467    /**
4468     * Constructor
4469     */
4470      public ValueSetScopeComponent() {
4471        super();
4472      }
4473
4474        /**
4475         * @return {@link #focus} (The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.). This is the underlying object with id, value and extensions. The accessor "getFocus" gives direct access to the value
4476         */
4477        public StringType getFocusElement() { 
4478          if (this.focus == null)
4479            if (Configuration.errorOnAutoCreate())
4480              throw new Error("Attempt to auto-create ValueSetScopeComponent.focus");
4481            else if (Configuration.doAutoCreate())
4482              this.focus = new StringType(); // bb
4483          return this.focus;
4484        }
4485
4486        public boolean hasFocusElement() { 
4487          return this.focus != null && !this.focus.isEmpty();
4488        }
4489
4490        public boolean hasFocus() { 
4491          return this.focus != null && !this.focus.isEmpty();
4492        }
4493
4494        /**
4495         * @param value {@link #focus} (The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.). This is the underlying object with id, value and extensions. The accessor "getFocus" gives direct access to the value
4496         */
4497        public ValueSetScopeComponent setFocusElement(StringType value) { 
4498          this.focus = value;
4499          return this;
4500        }
4501
4502        /**
4503         * @return The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.
4504         */
4505        public String getFocus() { 
4506          return this.focus == null ? null : this.focus.getValue();
4507        }
4508
4509        /**
4510         * @param value The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.
4511         */
4512        public ValueSetScopeComponent setFocus(String value) { 
4513          if (Utilities.noString(value))
4514            this.focus = null;
4515          else {
4516            if (this.focus == null)
4517              this.focus = new StringType();
4518            this.focus.setValue(value);
4519          }
4520          return this;
4521        }
4522
4523        /**
4524         * @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
4525         */
4526        public StringType getInclusionCriteriaElement() { 
4527          if (this.inclusionCriteria == null)
4528            if (Configuration.errorOnAutoCreate())
4529              throw new Error("Attempt to auto-create ValueSetScopeComponent.inclusionCriteria");
4530            else if (Configuration.doAutoCreate())
4531              this.inclusionCriteria = new StringType(); // bb
4532          return this.inclusionCriteria;
4533        }
4534
4535        public boolean hasInclusionCriteriaElement() { 
4536          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
4537        }
4538
4539        public boolean hasInclusionCriteria() { 
4540          return this.inclusionCriteria != null && !this.inclusionCriteria.isEmpty();
4541        }
4542
4543        /**
4544         * @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
4545         */
4546        public ValueSetScopeComponent setInclusionCriteriaElement(StringType value) { 
4547          this.inclusionCriteria = value;
4548          return this;
4549        }
4550
4551        /**
4552         * @return Criteria describing which concepts or codes should be included and why.
4553         */
4554        public String getInclusionCriteria() { 
4555          return this.inclusionCriteria == null ? null : this.inclusionCriteria.getValue();
4556        }
4557
4558        /**
4559         * @param value Criteria describing which concepts or codes should be included and why.
4560         */
4561        public ValueSetScopeComponent setInclusionCriteria(String value) { 
4562          if (Utilities.noString(value))
4563            this.inclusionCriteria = null;
4564          else {
4565            if (this.inclusionCriteria == null)
4566              this.inclusionCriteria = new StringType();
4567            this.inclusionCriteria.setValue(value);
4568          }
4569          return this;
4570        }
4571
4572        /**
4573         * @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
4574         */
4575        public StringType getExclusionCriteriaElement() { 
4576          if (this.exclusionCriteria == null)
4577            if (Configuration.errorOnAutoCreate())
4578              throw new Error("Attempt to auto-create ValueSetScopeComponent.exclusionCriteria");
4579            else if (Configuration.doAutoCreate())
4580              this.exclusionCriteria = new StringType(); // bb
4581          return this.exclusionCriteria;
4582        }
4583
4584        public boolean hasExclusionCriteriaElement() { 
4585          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
4586        }
4587
4588        public boolean hasExclusionCriteria() { 
4589          return this.exclusionCriteria != null && !this.exclusionCriteria.isEmpty();
4590        }
4591
4592        /**
4593         * @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
4594         */
4595        public ValueSetScopeComponent setExclusionCriteriaElement(StringType value) { 
4596          this.exclusionCriteria = value;
4597          return this;
4598        }
4599
4600        /**
4601         * @return Criteria describing which concepts or codes should be excluded and why.
4602         */
4603        public String getExclusionCriteria() { 
4604          return this.exclusionCriteria == null ? null : this.exclusionCriteria.getValue();
4605        }
4606
4607        /**
4608         * @param value Criteria describing which concepts or codes should be excluded and why.
4609         */
4610        public ValueSetScopeComponent setExclusionCriteria(String value) { 
4611          if (Utilities.noString(value))
4612            this.exclusionCriteria = null;
4613          else {
4614            if (this.exclusionCriteria == null)
4615              this.exclusionCriteria = new StringType();
4616            this.exclusionCriteria.setValue(value);
4617          }
4618          return this;
4619        }
4620
4621        protected void listChildren(List<Property> children) {
4622          super.listChildren(children);
4623          children.add(new Property("focus", "string", "The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.", 0, 1, focus));
4624          children.add(new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria));
4625          children.add(new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria));
4626        }
4627
4628        @Override
4629        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4630          switch (_hash) {
4631          case 97604824: /*focus*/  return new Property("focus", "string", "The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.", 0, 1, focus);
4632          case -1380638565: /*inclusionCriteria*/  return new Property("inclusionCriteria", "string", "Criteria describing which concepts or codes should be included and why.", 0, 1, inclusionCriteria);
4633          case 985682765: /*exclusionCriteria*/  return new Property("exclusionCriteria", "string", "Criteria describing which concepts or codes should be excluded and why.", 0, 1, exclusionCriteria);
4634          default: return super.getNamedProperty(_hash, _name, _checkValid);
4635          }
4636
4637        }
4638
4639      @Override
4640      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4641        switch (hash) {
4642        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : new Base[] {this.focus}; // StringType
4643        case -1380638565: /*inclusionCriteria*/ return this.inclusionCriteria == null ? new Base[0] : new Base[] {this.inclusionCriteria}; // StringType
4644        case 985682765: /*exclusionCriteria*/ return this.exclusionCriteria == null ? new Base[0] : new Base[] {this.exclusionCriteria}; // StringType
4645        default: return super.getProperty(hash, name, checkValid);
4646        }
4647
4648      }
4649
4650      @Override
4651      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4652        switch (hash) {
4653        case 97604824: // focus
4654          this.focus = TypeConvertor.castToString(value); // StringType
4655          return value;
4656        case -1380638565: // inclusionCriteria
4657          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
4658          return value;
4659        case 985682765: // exclusionCriteria
4660          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
4661          return value;
4662        default: return super.setProperty(hash, name, value);
4663        }
4664
4665      }
4666
4667      @Override
4668      public Base setProperty(String name, Base value) throws FHIRException {
4669        if (name.equals("focus")) {
4670          this.focus = TypeConvertor.castToString(value); // StringType
4671        } else if (name.equals("inclusionCriteria")) {
4672          this.inclusionCriteria = TypeConvertor.castToString(value); // StringType
4673        } else if (name.equals("exclusionCriteria")) {
4674          this.exclusionCriteria = TypeConvertor.castToString(value); // StringType
4675        } else
4676          return super.setProperty(name, value);
4677        return value;
4678      }
4679
4680      @Override
4681      public Base makeProperty(int hash, String name) throws FHIRException {
4682        switch (hash) {
4683        case 97604824:  return getFocusElement();
4684        case -1380638565:  return getInclusionCriteriaElement();
4685        case 985682765:  return getExclusionCriteriaElement();
4686        default: return super.makeProperty(hash, name);
4687        }
4688
4689      }
4690
4691      @Override
4692      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4693        switch (hash) {
4694        case 97604824: /*focus*/ return new String[] {"string"};
4695        case -1380638565: /*inclusionCriteria*/ return new String[] {"string"};
4696        case 985682765: /*exclusionCriteria*/ return new String[] {"string"};
4697        default: return super.getTypesForProperty(hash, name);
4698        }
4699
4700      }
4701
4702      @Override
4703      public Base addChild(String name) throws FHIRException {
4704        if (name.equals("focus")) {
4705          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.scope.focus");
4706        }
4707        else if (name.equals("inclusionCriteria")) {
4708          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.scope.inclusionCriteria");
4709        }
4710        else if (name.equals("exclusionCriteria")) {
4711          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.scope.exclusionCriteria");
4712        }
4713        else
4714          return super.addChild(name);
4715      }
4716
4717      public ValueSetScopeComponent copy() {
4718        ValueSetScopeComponent dst = new ValueSetScopeComponent();
4719        copyValues(dst);
4720        return dst;
4721      }
4722
4723      public void copyValues(ValueSetScopeComponent dst) {
4724        super.copyValues(dst);
4725        dst.focus = focus == null ? null : focus.copy();
4726        dst.inclusionCriteria = inclusionCriteria == null ? null : inclusionCriteria.copy();
4727        dst.exclusionCriteria = exclusionCriteria == null ? null : exclusionCriteria.copy();
4728      }
4729
4730      @Override
4731      public boolean equalsDeep(Base other_) {
4732        if (!super.equalsDeep(other_))
4733          return false;
4734        if (!(other_ instanceof ValueSetScopeComponent))
4735          return false;
4736        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
4737        return compareDeep(focus, o.focus, true) && compareDeep(inclusionCriteria, o.inclusionCriteria, true)
4738           && compareDeep(exclusionCriteria, o.exclusionCriteria, true);
4739      }
4740
4741      @Override
4742      public boolean equalsShallow(Base other_) {
4743        if (!super.equalsShallow(other_))
4744          return false;
4745        if (!(other_ instanceof ValueSetScopeComponent))
4746          return false;
4747        ValueSetScopeComponent o = (ValueSetScopeComponent) other_;
4748        return compareValues(focus, o.focus, true) && compareValues(inclusionCriteria, o.inclusionCriteria, true)
4749           && compareValues(exclusionCriteria, o.exclusionCriteria, true);
4750      }
4751
4752      public boolean isEmpty() {
4753        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(focus, inclusionCriteria, exclusionCriteria
4754          );
4755      }
4756
4757  public String fhirType() {
4758    return "ValueSet.scope";
4759
4760  }
4761
4762  }
4763
4764    /**
4765     * 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.
4766     */
4767    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
4768    @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." )
4769    protected UriType url;
4770
4771    /**
4772     * 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.
4773     */
4774    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4775    @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." )
4776    protected List<Identifier> identifier;
4777
4778    /**
4779     * 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.
4780     */
4781    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
4782    @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." )
4783    protected StringType version;
4784
4785    /**
4786     * 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.
4787     */
4788    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
4789    @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." )
4790    protected StringType name;
4791
4792    /**
4793     * A short, descriptive, user-friendly title for the value set.
4794     */
4795    @Child(name = "title", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=true)
4796    @Description(shortDefinition="Name for this value set (human friendly)", formalDefinition="A short, descriptive, user-friendly title for the value set." )
4797    protected StringType title;
4798
4799    /**
4800     * 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.
4801     */
4802    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
4803    @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." )
4804    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
4805    protected Enumeration<PublicationStatus> status;
4806
4807    /**
4808     * 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.
4809     */
4810    @Child(name = "experimental", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
4811    @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." )
4812    protected BooleanType experimental;
4813
4814    /**
4815     * The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').
4816     */
4817    @Child(name = "date", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=true)
4818    @Description(shortDefinition="Date last changed", formalDefinition="The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition')." )
4819    protected DateTimeType date;
4820
4821    /**
4822     * The name of the organization or individual that published the value set.
4823     */
4824    @Child(name = "publisher", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
4825    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the organization or individual that published the value set." )
4826    protected StringType publisher;
4827
4828    /**
4829     * Contact details to assist a user in finding and communicating with the publisher.
4830     */
4831    @Child(name = "contact", type = {ContactDetail.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4832    @Description(shortDefinition="Contact details for the publisher", formalDefinition="Contact details to assist a user in finding and communicating with the publisher." )
4833    protected List<ContactDetail> contact;
4834
4835    /**
4836     * 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.
4837     */
4838    @Child(name = "description", type = {MarkdownType.class}, order=10, min=0, max=1, modifier=false, summary=false)
4839    @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." )
4840    protected MarkdownType description;
4841
4842    /**
4843     * 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.
4844     */
4845    @Child(name = "useContext", type = {UsageContext.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4846    @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." )
4847    protected List<UsageContext> useContext;
4848
4849    /**
4850     * A legal or geographic region in which the value set is intended to be used.
4851     */
4852    @Child(name = "jurisdiction", type = {CodeableConcept.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
4853    @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." )
4854    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/jurisdiction")
4855    protected List<CodeableConcept> jurisdiction;
4856
4857    /**
4858     * If this is set to 'true', then no new versions of the content logical definition can be created.  Note: Other metadata might still change.
4859     */
4860    @Child(name = "immutable", type = {BooleanType.class}, order=13, min=0, max=1, modifier=false, summary=true)
4861    @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." )
4862    protected BooleanType immutable;
4863
4864    /**
4865     * Explanation of why this value set is needed and why it has been designed as it has.
4866     */
4867    @Child(name = "purpose", type = {MarkdownType.class}, order=14, min=0, max=1, modifier=false, summary=false)
4868    @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." )
4869    protected MarkdownType purpose;
4870
4871    /**
4872     * 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.
4873     */
4874    @Child(name = "copyright", type = {MarkdownType.class}, order=15, min=0, max=1, modifier=false, summary=false)
4875    @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." )
4876    protected MarkdownType copyright;
4877
4878    /**
4879     * 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).
4880     */
4881    @Child(name = "compose", type = {}, order=16, min=0, max=1, modifier=false, summary=false)
4882    @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)." )
4883    protected ValueSetComposeComponent compose;
4884
4885    /**
4886     * 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.
4887     */
4888    @Child(name = "expansion", type = {}, order=17, min=0, max=1, modifier=false, summary=false)
4889    @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." )
4890    protected ValueSetExpansionComponent expansion;
4891
4892    /**
4893     * Description of the semantic space the Value Set Expansion is intended to cover.
4894     */
4895    @Child(name = "scope", type = {}, order=18, min=0, max=1, modifier=false, summary=false)
4896    @Description(shortDefinition="Description of the semantic space the Value Set Expansion is intended to cover", formalDefinition="Description of the semantic space the Value Set Expansion is intended to cover." )
4897    protected ValueSetScopeComponent scope;
4898
4899    private static final long serialVersionUID = 1111958035L;
4900
4901  /**
4902   * Constructor
4903   */
4904    public ValueSet() {
4905      super();
4906    }
4907
4908  /**
4909   * Constructor
4910   */
4911    public ValueSet(PublicationStatus status) {
4912      super();
4913      this.setStatus(status);
4914    }
4915
4916    /**
4917     * @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
4918     */
4919    public UriType getUrlElement() { 
4920      if (this.url == null)
4921        if (Configuration.errorOnAutoCreate())
4922          throw new Error("Attempt to auto-create ValueSet.url");
4923        else if (Configuration.doAutoCreate())
4924          this.url = new UriType(); // bb
4925      return this.url;
4926    }
4927
4928    public boolean hasUrlElement() { 
4929      return this.url != null && !this.url.isEmpty();
4930    }
4931
4932    public boolean hasUrl() { 
4933      return this.url != null && !this.url.isEmpty();
4934    }
4935
4936    /**
4937     * @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
4938     */
4939    public ValueSet setUrlElement(UriType value) { 
4940      this.url = value;
4941      return this;
4942    }
4943
4944    /**
4945     * @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.
4946     */
4947    public String getUrl() { 
4948      return this.url == null ? null : this.url.getValue();
4949    }
4950
4951    /**
4952     * @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.
4953     */
4954    public ValueSet setUrl(String value) { 
4955      if (Utilities.noString(value))
4956        this.url = null;
4957      else {
4958        if (this.url == null)
4959          this.url = new UriType();
4960        this.url.setValue(value);
4961      }
4962      return this;
4963    }
4964
4965    /**
4966     * @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.)
4967     */
4968    public List<Identifier> getIdentifier() { 
4969      if (this.identifier == null)
4970        this.identifier = new ArrayList<Identifier>();
4971      return this.identifier;
4972    }
4973
4974    /**
4975     * @return Returns a reference to <code>this</code> for easy method chaining
4976     */
4977    public ValueSet setIdentifier(List<Identifier> theIdentifier) { 
4978      this.identifier = theIdentifier;
4979      return this;
4980    }
4981
4982    public boolean hasIdentifier() { 
4983      if (this.identifier == null)
4984        return false;
4985      for (Identifier item : this.identifier)
4986        if (!item.isEmpty())
4987          return true;
4988      return false;
4989    }
4990
4991    public Identifier addIdentifier() { //3
4992      Identifier t = new Identifier();
4993      if (this.identifier == null)
4994        this.identifier = new ArrayList<Identifier>();
4995      this.identifier.add(t);
4996      return t;
4997    }
4998
4999    public ValueSet addIdentifier(Identifier t) { //3
5000      if (t == null)
5001        return this;
5002      if (this.identifier == null)
5003        this.identifier = new ArrayList<Identifier>();
5004      this.identifier.add(t);
5005      return this;
5006    }
5007
5008    /**
5009     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
5010     */
5011    public Identifier getIdentifierFirstRep() { 
5012      if (getIdentifier().isEmpty()) {
5013        addIdentifier();
5014      }
5015      return getIdentifier().get(0);
5016    }
5017
5018    /**
5019     * @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
5020     */
5021    public StringType getVersionElement() { 
5022      if (this.version == null)
5023        if (Configuration.errorOnAutoCreate())
5024          throw new Error("Attempt to auto-create ValueSet.version");
5025        else if (Configuration.doAutoCreate())
5026          this.version = new StringType(); // bb
5027      return this.version;
5028    }
5029
5030    public boolean hasVersionElement() { 
5031      return this.version != null && !this.version.isEmpty();
5032    }
5033
5034    public boolean hasVersion() { 
5035      return this.version != null && !this.version.isEmpty();
5036    }
5037
5038    /**
5039     * @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
5040     */
5041    public ValueSet setVersionElement(StringType value) { 
5042      this.version = value;
5043      return this;
5044    }
5045
5046    /**
5047     * @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.
5048     */
5049    public String getVersion() { 
5050      return this.version == null ? null : this.version.getValue();
5051    }
5052
5053    /**
5054     * @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.
5055     */
5056    public ValueSet setVersion(String value) { 
5057      if (Utilities.noString(value))
5058        this.version = null;
5059      else {
5060        if (this.version == null)
5061          this.version = new StringType();
5062        this.version.setValue(value);
5063      }
5064      return this;
5065    }
5066
5067    /**
5068     * @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
5069     */
5070    public StringType getNameElement() { 
5071      if (this.name == null)
5072        if (Configuration.errorOnAutoCreate())
5073          throw new Error("Attempt to auto-create ValueSet.name");
5074        else if (Configuration.doAutoCreate())
5075          this.name = new StringType(); // bb
5076      return this.name;
5077    }
5078
5079    public boolean hasNameElement() { 
5080      return this.name != null && !this.name.isEmpty();
5081    }
5082
5083    public boolean hasName() { 
5084      return this.name != null && !this.name.isEmpty();
5085    }
5086
5087    /**
5088     * @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
5089     */
5090    public ValueSet setNameElement(StringType value) { 
5091      this.name = value;
5092      return this;
5093    }
5094
5095    /**
5096     * @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.
5097     */
5098    public String getName() { 
5099      return this.name == null ? null : this.name.getValue();
5100    }
5101
5102    /**
5103     * @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.
5104     */
5105    public ValueSet setName(String value) { 
5106      if (Utilities.noString(value))
5107        this.name = null;
5108      else {
5109        if (this.name == null)
5110          this.name = new StringType();
5111        this.name.setValue(value);
5112      }
5113      return this;
5114    }
5115
5116    /**
5117     * @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
5118     */
5119    public StringType getTitleElement() { 
5120      if (this.title == null)
5121        if (Configuration.errorOnAutoCreate())
5122          throw new Error("Attempt to auto-create ValueSet.title");
5123        else if (Configuration.doAutoCreate())
5124          this.title = new StringType(); // bb
5125      return this.title;
5126    }
5127
5128    public boolean hasTitleElement() { 
5129      return this.title != null && !this.title.isEmpty();
5130    }
5131
5132    public boolean hasTitle() { 
5133      return this.title != null && !this.title.isEmpty();
5134    }
5135
5136    /**
5137     * @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
5138     */
5139    public ValueSet setTitleElement(StringType value) { 
5140      this.title = value;
5141      return this;
5142    }
5143
5144    /**
5145     * @return A short, descriptive, user-friendly title for the value set.
5146     */
5147    public String getTitle() { 
5148      return this.title == null ? null : this.title.getValue();
5149    }
5150
5151    /**
5152     * @param value A short, descriptive, user-friendly title for the value set.
5153     */
5154    public ValueSet setTitle(String value) { 
5155      if (Utilities.noString(value))
5156        this.title = null;
5157      else {
5158        if (this.title == null)
5159          this.title = new StringType();
5160        this.title.setValue(value);
5161      }
5162      return this;
5163    }
5164
5165    /**
5166     * @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
5167     */
5168    public Enumeration<PublicationStatus> getStatusElement() { 
5169      if (this.status == null)
5170        if (Configuration.errorOnAutoCreate())
5171          throw new Error("Attempt to auto-create ValueSet.status");
5172        else if (Configuration.doAutoCreate())
5173          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
5174      return this.status;
5175    }
5176
5177    public boolean hasStatusElement() { 
5178      return this.status != null && !this.status.isEmpty();
5179    }
5180
5181    public boolean hasStatus() { 
5182      return this.status != null && !this.status.isEmpty();
5183    }
5184
5185    /**
5186     * @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
5187     */
5188    public ValueSet setStatusElement(Enumeration<PublicationStatus> value) { 
5189      this.status = value;
5190      return this;
5191    }
5192
5193    /**
5194     * @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.
5195     */
5196    public PublicationStatus getStatus() { 
5197      return this.status == null ? null : this.status.getValue();
5198    }
5199
5200    /**
5201     * @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.
5202     */
5203    public ValueSet setStatus(PublicationStatus value) { 
5204        if (this.status == null)
5205          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
5206        this.status.setValue(value);
5207      return this;
5208    }
5209
5210    /**
5211     * @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
5212     */
5213    public BooleanType getExperimentalElement() { 
5214      if (this.experimental == null)
5215        if (Configuration.errorOnAutoCreate())
5216          throw new Error("Attempt to auto-create ValueSet.experimental");
5217        else if (Configuration.doAutoCreate())
5218          this.experimental = new BooleanType(); // bb
5219      return this.experimental;
5220    }
5221
5222    public boolean hasExperimentalElement() { 
5223      return this.experimental != null && !this.experimental.isEmpty();
5224    }
5225
5226    public boolean hasExperimental() { 
5227      return this.experimental != null && !this.experimental.isEmpty();
5228    }
5229
5230    /**
5231     * @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
5232     */
5233    public ValueSet setExperimentalElement(BooleanType value) { 
5234      this.experimental = value;
5235      return this;
5236    }
5237
5238    /**
5239     * @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.
5240     */
5241    public boolean getExperimental() { 
5242      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
5243    }
5244
5245    /**
5246     * @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.
5247     */
5248    public ValueSet setExperimental(boolean value) { 
5249        if (this.experimental == null)
5250          this.experimental = new BooleanType();
5251        this.experimental.setValue(value);
5252      return this;
5253    }
5254
5255    /**
5256     * @return {@link #date} (The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
5257     */
5258    public DateTimeType getDateElement() { 
5259      if (this.date == null)
5260        if (Configuration.errorOnAutoCreate())
5261          throw new Error("Attempt to auto-create ValueSet.date");
5262        else if (Configuration.doAutoCreate())
5263          this.date = new DateTimeType(); // bb
5264      return this.date;
5265    }
5266
5267    public boolean hasDateElement() { 
5268      return this.date != null && !this.date.isEmpty();
5269    }
5270
5271    public boolean hasDate() { 
5272      return this.date != null && !this.date.isEmpty();
5273    }
5274
5275    /**
5276     * @param value {@link #date} (The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
5277     */
5278    public ValueSet setDateElement(DateTimeType value) { 
5279      this.date = value;
5280      return this;
5281    }
5282
5283    /**
5284     * @return The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').
5285     */
5286    public Date getDate() { 
5287      return this.date == null ? null : this.date.getValue();
5288    }
5289
5290    /**
5291     * @param value The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').
5292     */
5293    public ValueSet setDate(Date value) { 
5294      if (value == null)
5295        this.date = null;
5296      else {
5297        if (this.date == null)
5298          this.date = new DateTimeType();
5299        this.date.setValue(value);
5300      }
5301      return this;
5302    }
5303
5304    /**
5305     * @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
5306     */
5307    public StringType getPublisherElement() { 
5308      if (this.publisher == null)
5309        if (Configuration.errorOnAutoCreate())
5310          throw new Error("Attempt to auto-create ValueSet.publisher");
5311        else if (Configuration.doAutoCreate())
5312          this.publisher = new StringType(); // bb
5313      return this.publisher;
5314    }
5315
5316    public boolean hasPublisherElement() { 
5317      return this.publisher != null && !this.publisher.isEmpty();
5318    }
5319
5320    public boolean hasPublisher() { 
5321      return this.publisher != null && !this.publisher.isEmpty();
5322    }
5323
5324    /**
5325     * @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
5326     */
5327    public ValueSet setPublisherElement(StringType value) { 
5328      this.publisher = value;
5329      return this;
5330    }
5331
5332    /**
5333     * @return The name of the organization or individual that published the value set.
5334     */
5335    public String getPublisher() { 
5336      return this.publisher == null ? null : this.publisher.getValue();
5337    }
5338
5339    /**
5340     * @param value The name of the organization or individual that published the value set.
5341     */
5342    public ValueSet setPublisher(String value) { 
5343      if (Utilities.noString(value))
5344        this.publisher = null;
5345      else {
5346        if (this.publisher == null)
5347          this.publisher = new StringType();
5348        this.publisher.setValue(value);
5349      }
5350      return this;
5351    }
5352
5353    /**
5354     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
5355     */
5356    public List<ContactDetail> getContact() { 
5357      if (this.contact == null)
5358        this.contact = new ArrayList<ContactDetail>();
5359      return this.contact;
5360    }
5361
5362    /**
5363     * @return Returns a reference to <code>this</code> for easy method chaining
5364     */
5365    public ValueSet setContact(List<ContactDetail> theContact) { 
5366      this.contact = theContact;
5367      return this;
5368    }
5369
5370    public boolean hasContact() { 
5371      if (this.contact == null)
5372        return false;
5373      for (ContactDetail item : this.contact)
5374        if (!item.isEmpty())
5375          return true;
5376      return false;
5377    }
5378
5379    public ContactDetail addContact() { //3
5380      ContactDetail t = new ContactDetail();
5381      if (this.contact == null)
5382        this.contact = new ArrayList<ContactDetail>();
5383      this.contact.add(t);
5384      return t;
5385    }
5386
5387    public ValueSet addContact(ContactDetail t) { //3
5388      if (t == null)
5389        return this;
5390      if (this.contact == null)
5391        this.contact = new ArrayList<ContactDetail>();
5392      this.contact.add(t);
5393      return this;
5394    }
5395
5396    /**
5397     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
5398     */
5399    public ContactDetail getContactFirstRep() { 
5400      if (getContact().isEmpty()) {
5401        addContact();
5402      }
5403      return getContact().get(0);
5404    }
5405
5406    /**
5407     * @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
5408     */
5409    public MarkdownType getDescriptionElement() { 
5410      if (this.description == null)
5411        if (Configuration.errorOnAutoCreate())
5412          throw new Error("Attempt to auto-create ValueSet.description");
5413        else if (Configuration.doAutoCreate())
5414          this.description = new MarkdownType(); // bb
5415      return this.description;
5416    }
5417
5418    public boolean hasDescriptionElement() { 
5419      return this.description != null && !this.description.isEmpty();
5420    }
5421
5422    public boolean hasDescription() { 
5423      return this.description != null && !this.description.isEmpty();
5424    }
5425
5426    /**
5427     * @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
5428     */
5429    public ValueSet setDescriptionElement(MarkdownType value) { 
5430      this.description = value;
5431      return this;
5432    }
5433
5434    /**
5435     * @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.
5436     */
5437    public String getDescription() { 
5438      return this.description == null ? null : this.description.getValue();
5439    }
5440
5441    /**
5442     * @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.
5443     */
5444    public ValueSet setDescription(String value) { 
5445      if (value == null)
5446        this.description = null;
5447      else {
5448        if (this.description == null)
5449          this.description = new MarkdownType();
5450        this.description.setValue(value);
5451      }
5452      return this;
5453    }
5454
5455    /**
5456     * @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.)
5457     */
5458    public List<UsageContext> getUseContext() { 
5459      if (this.useContext == null)
5460        this.useContext = new ArrayList<UsageContext>();
5461      return this.useContext;
5462    }
5463
5464    /**
5465     * @return Returns a reference to <code>this</code> for easy method chaining
5466     */
5467    public ValueSet setUseContext(List<UsageContext> theUseContext) { 
5468      this.useContext = theUseContext;
5469      return this;
5470    }
5471
5472    public boolean hasUseContext() { 
5473      if (this.useContext == null)
5474        return false;
5475      for (UsageContext item : this.useContext)
5476        if (!item.isEmpty())
5477          return true;
5478      return false;
5479    }
5480
5481    public UsageContext addUseContext() { //3
5482      UsageContext t = new UsageContext();
5483      if (this.useContext == null)
5484        this.useContext = new ArrayList<UsageContext>();
5485      this.useContext.add(t);
5486      return t;
5487    }
5488
5489    public ValueSet addUseContext(UsageContext t) { //3
5490      if (t == null)
5491        return this;
5492      if (this.useContext == null)
5493        this.useContext = new ArrayList<UsageContext>();
5494      this.useContext.add(t);
5495      return this;
5496    }
5497
5498    /**
5499     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist {3}
5500     */
5501    public UsageContext getUseContextFirstRep() { 
5502      if (getUseContext().isEmpty()) {
5503        addUseContext();
5504      }
5505      return getUseContext().get(0);
5506    }
5507
5508    /**
5509     * @return {@link #jurisdiction} (A legal or geographic region in which the value set is intended to be used.)
5510     */
5511    public List<CodeableConcept> getJurisdiction() { 
5512      if (this.jurisdiction == null)
5513        this.jurisdiction = new ArrayList<CodeableConcept>();
5514      return this.jurisdiction;
5515    }
5516
5517    /**
5518     * @return Returns a reference to <code>this</code> for easy method chaining
5519     */
5520    public ValueSet setJurisdiction(List<CodeableConcept> theJurisdiction) { 
5521      this.jurisdiction = theJurisdiction;
5522      return this;
5523    }
5524
5525    public boolean hasJurisdiction() { 
5526      if (this.jurisdiction == null)
5527        return false;
5528      for (CodeableConcept item : this.jurisdiction)
5529        if (!item.isEmpty())
5530          return true;
5531      return false;
5532    }
5533
5534    public CodeableConcept addJurisdiction() { //3
5535      CodeableConcept t = new CodeableConcept();
5536      if (this.jurisdiction == null)
5537        this.jurisdiction = new ArrayList<CodeableConcept>();
5538      this.jurisdiction.add(t);
5539      return t;
5540    }
5541
5542    public ValueSet addJurisdiction(CodeableConcept t) { //3
5543      if (t == null)
5544        return this;
5545      if (this.jurisdiction == null)
5546        this.jurisdiction = new ArrayList<CodeableConcept>();
5547      this.jurisdiction.add(t);
5548      return this;
5549    }
5550
5551    /**
5552     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist {3}
5553     */
5554    public CodeableConcept getJurisdictionFirstRep() { 
5555      if (getJurisdiction().isEmpty()) {
5556        addJurisdiction();
5557      }
5558      return getJurisdiction().get(0);
5559    }
5560
5561    /**
5562     * @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
5563     */
5564    public BooleanType getImmutableElement() { 
5565      if (this.immutable == null)
5566        if (Configuration.errorOnAutoCreate())
5567          throw new Error("Attempt to auto-create ValueSet.immutable");
5568        else if (Configuration.doAutoCreate())
5569          this.immutable = new BooleanType(); // bb
5570      return this.immutable;
5571    }
5572
5573    public boolean hasImmutableElement() { 
5574      return this.immutable != null && !this.immutable.isEmpty();
5575    }
5576
5577    public boolean hasImmutable() { 
5578      return this.immutable != null && !this.immutable.isEmpty();
5579    }
5580
5581    /**
5582     * @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
5583     */
5584    public ValueSet setImmutableElement(BooleanType value) { 
5585      this.immutable = value;
5586      return this;
5587    }
5588
5589    /**
5590     * @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.
5591     */
5592    public boolean getImmutable() { 
5593      return this.immutable == null || this.immutable.isEmpty() ? false : this.immutable.getValue();
5594    }
5595
5596    /**
5597     * @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.
5598     */
5599    public ValueSet setImmutable(boolean value) { 
5600        if (this.immutable == null)
5601          this.immutable = new BooleanType();
5602        this.immutable.setValue(value);
5603      return this;
5604    }
5605
5606    /**
5607     * @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
5608     */
5609    public MarkdownType getPurposeElement() { 
5610      if (this.purpose == null)
5611        if (Configuration.errorOnAutoCreate())
5612          throw new Error("Attempt to auto-create ValueSet.purpose");
5613        else if (Configuration.doAutoCreate())
5614          this.purpose = new MarkdownType(); // bb
5615      return this.purpose;
5616    }
5617
5618    public boolean hasPurposeElement() { 
5619      return this.purpose != null && !this.purpose.isEmpty();
5620    }
5621
5622    public boolean hasPurpose() { 
5623      return this.purpose != null && !this.purpose.isEmpty();
5624    }
5625
5626    /**
5627     * @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
5628     */
5629    public ValueSet setPurposeElement(MarkdownType value) { 
5630      this.purpose = value;
5631      return this;
5632    }
5633
5634    /**
5635     * @return Explanation of why this value set is needed and why it has been designed as it has.
5636     */
5637    public String getPurpose() { 
5638      return this.purpose == null ? null : this.purpose.getValue();
5639    }
5640
5641    /**
5642     * @param value Explanation of why this value set is needed and why it has been designed as it has.
5643     */
5644    public ValueSet setPurpose(String value) { 
5645      if (value == null)
5646        this.purpose = null;
5647      else {
5648        if (this.purpose == null)
5649          this.purpose = new MarkdownType();
5650        this.purpose.setValue(value);
5651      }
5652      return this;
5653    }
5654
5655    /**
5656     * @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
5657     */
5658    public MarkdownType getCopyrightElement() { 
5659      if (this.copyright == null)
5660        if (Configuration.errorOnAutoCreate())
5661          throw new Error("Attempt to auto-create ValueSet.copyright");
5662        else if (Configuration.doAutoCreate())
5663          this.copyright = new MarkdownType(); // bb
5664      return this.copyright;
5665    }
5666
5667    public boolean hasCopyrightElement() { 
5668      return this.copyright != null && !this.copyright.isEmpty();
5669    }
5670
5671    public boolean hasCopyright() { 
5672      return this.copyright != null && !this.copyright.isEmpty();
5673    }
5674
5675    /**
5676     * @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
5677     */
5678    public ValueSet setCopyrightElement(MarkdownType value) { 
5679      this.copyright = value;
5680      return this;
5681    }
5682
5683    /**
5684     * @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.
5685     */
5686    public String getCopyright() { 
5687      return this.copyright == null ? null : this.copyright.getValue();
5688    }
5689
5690    /**
5691     * @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.
5692     */
5693    public ValueSet setCopyright(String value) { 
5694      if (value == null)
5695        this.copyright = null;
5696      else {
5697        if (this.copyright == null)
5698          this.copyright = new MarkdownType();
5699        this.copyright.setValue(value);
5700      }
5701      return this;
5702    }
5703
5704    /**
5705     * @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).)
5706     */
5707    public ValueSetComposeComponent getCompose() { 
5708      if (this.compose == null)
5709        if (Configuration.errorOnAutoCreate())
5710          throw new Error("Attempt to auto-create ValueSet.compose");
5711        else if (Configuration.doAutoCreate())
5712          this.compose = new ValueSetComposeComponent(); // cc
5713      return this.compose;
5714    }
5715
5716    public boolean hasCompose() { 
5717      return this.compose != null && !this.compose.isEmpty();
5718    }
5719
5720    /**
5721     * @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).)
5722     */
5723    public ValueSet setCompose(ValueSetComposeComponent value) { 
5724      this.compose = value;
5725      return this;
5726    }
5727
5728    /**
5729     * @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.)
5730     */
5731    public ValueSetExpansionComponent getExpansion() { 
5732      if (this.expansion == null)
5733        if (Configuration.errorOnAutoCreate())
5734          throw new Error("Attempt to auto-create ValueSet.expansion");
5735        else if (Configuration.doAutoCreate())
5736          this.expansion = new ValueSetExpansionComponent(); // cc
5737      return this.expansion;
5738    }
5739
5740    public boolean hasExpansion() { 
5741      return this.expansion != null && !this.expansion.isEmpty();
5742    }
5743
5744    /**
5745     * @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.)
5746     */
5747    public ValueSet setExpansion(ValueSetExpansionComponent value) { 
5748      this.expansion = value;
5749      return this;
5750    }
5751
5752    /**
5753     * @return {@link #scope} (Description of the semantic space the Value Set Expansion is intended to cover.)
5754     */
5755    public ValueSetScopeComponent getScope() { 
5756      if (this.scope == null)
5757        if (Configuration.errorOnAutoCreate())
5758          throw new Error("Attempt to auto-create ValueSet.scope");
5759        else if (Configuration.doAutoCreate())
5760          this.scope = new ValueSetScopeComponent(); // cc
5761      return this.scope;
5762    }
5763
5764    public boolean hasScope() { 
5765      return this.scope != null && !this.scope.isEmpty();
5766    }
5767
5768    /**
5769     * @param value {@link #scope} (Description of the semantic space the Value Set Expansion is intended to cover.)
5770     */
5771    public ValueSet setScope(ValueSetScopeComponent value) { 
5772      this.scope = value;
5773      return this;
5774    }
5775
5776      protected void listChildren(List<Property> children) {
5777        super.listChildren(children);
5778        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));
5779        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));
5780        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));
5781        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));
5782        children.add(new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title));
5783        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));
5784        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));
5785        children.add(new Property("date", "dateTime", "The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').", 0, 1, date));
5786        children.add(new Property("publisher", "string", "The name of the organization or individual that published the value set.", 0, 1, publisher));
5787        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));
5788        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));
5789        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));
5790        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));
5791        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));
5792        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));
5793        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));
5794        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));
5795        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));
5796        children.add(new Property("scope", "", "Description of the semantic space the Value Set Expansion is intended to cover.", 0, 1, scope));
5797      }
5798
5799      @Override
5800      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5801        switch (_hash) {
5802        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);
5803        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);
5804        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);
5805        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);
5806        case 110371416: /*title*/  return new Property("title", "string", "A short, descriptive, user-friendly title for the value set.", 0, 1, title);
5807        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);
5808        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);
5809        case 3076014: /*date*/  return new Property("date", "dateTime", "The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition').", 0, 1, date);
5810        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the organization or individual that published the value set.", 0, 1, publisher);
5811        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);
5812        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);
5813        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);
5814        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);
5815        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);
5816        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);
5817        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);
5818        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);
5819        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);
5820        case 109264468: /*scope*/  return new Property("scope", "", "Description of the semantic space the Value Set Expansion is intended to cover.", 0, 1, scope);
5821        default: return super.getNamedProperty(_hash, _name, _checkValid);
5822        }
5823
5824      }
5825
5826      @Override
5827      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5828        switch (hash) {
5829        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
5830        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
5831        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
5832        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
5833        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
5834        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
5835        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
5836        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
5837        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
5838        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
5839        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
5840        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
5841        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
5842        case 1596987778: /*immutable*/ return this.immutable == null ? new Base[0] : new Base[] {this.immutable}; // BooleanType
5843        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // MarkdownType
5844        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // MarkdownType
5845        case 950497682: /*compose*/ return this.compose == null ? new Base[0] : new Base[] {this.compose}; // ValueSetComposeComponent
5846        case 17878207: /*expansion*/ return this.expansion == null ? new Base[0] : new Base[] {this.expansion}; // ValueSetExpansionComponent
5847        case 109264468: /*scope*/ return this.scope == null ? new Base[0] : new Base[] {this.scope}; // ValueSetScopeComponent
5848        default: return super.getProperty(hash, name, checkValid);
5849        }
5850
5851      }
5852
5853      @Override
5854      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5855        switch (hash) {
5856        case 116079: // url
5857          this.url = TypeConvertor.castToUri(value); // UriType
5858          return value;
5859        case -1618432855: // identifier
5860          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
5861          return value;
5862        case 351608024: // version
5863          this.version = TypeConvertor.castToString(value); // StringType
5864          return value;
5865        case 3373707: // name
5866          this.name = TypeConvertor.castToString(value); // StringType
5867          return value;
5868        case 110371416: // title
5869          this.title = TypeConvertor.castToString(value); // StringType
5870          return value;
5871        case -892481550: // status
5872          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5873          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5874          return value;
5875        case -404562712: // experimental
5876          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
5877          return value;
5878        case 3076014: // date
5879          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5880          return value;
5881        case 1447404028: // publisher
5882          this.publisher = TypeConvertor.castToString(value); // StringType
5883          return value;
5884        case 951526432: // contact
5885          this.getContact().add(TypeConvertor.castToContactDetail(value)); // ContactDetail
5886          return value;
5887        case -1724546052: // description
5888          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5889          return value;
5890        case -669707736: // useContext
5891          this.getUseContext().add(TypeConvertor.castToUsageContext(value)); // UsageContext
5892          return value;
5893        case -507075711: // jurisdiction
5894          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
5895          return value;
5896        case 1596987778: // immutable
5897          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
5898          return value;
5899        case -220463842: // purpose
5900          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
5901          return value;
5902        case 1522889671: // copyright
5903          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5904          return value;
5905        case 950497682: // compose
5906          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
5907          return value;
5908        case 17878207: // expansion
5909          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
5910          return value;
5911        case 109264468: // scope
5912          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
5913          return value;
5914        default: return super.setProperty(hash, name, value);
5915        }
5916
5917      }
5918
5919      @Override
5920      public Base setProperty(String name, Base value) throws FHIRException {
5921        if (name.equals("url")) {
5922          this.url = TypeConvertor.castToUri(value); // UriType
5923        } else if (name.equals("identifier")) {
5924          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
5925        } else if (name.equals("version")) {
5926          this.version = TypeConvertor.castToString(value); // StringType
5927        } else if (name.equals("name")) {
5928          this.name = TypeConvertor.castToString(value); // StringType
5929        } else if (name.equals("title")) {
5930          this.title = TypeConvertor.castToString(value); // StringType
5931        } else if (name.equals("status")) {
5932          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
5933          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
5934        } else if (name.equals("experimental")) {
5935          this.experimental = TypeConvertor.castToBoolean(value); // BooleanType
5936        } else if (name.equals("date")) {
5937          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
5938        } else if (name.equals("publisher")) {
5939          this.publisher = TypeConvertor.castToString(value); // StringType
5940        } else if (name.equals("contact")) {
5941          this.getContact().add(TypeConvertor.castToContactDetail(value));
5942        } else if (name.equals("description")) {
5943          this.description = TypeConvertor.castToMarkdown(value); // MarkdownType
5944        } else if (name.equals("useContext")) {
5945          this.getUseContext().add(TypeConvertor.castToUsageContext(value));
5946        } else if (name.equals("jurisdiction")) {
5947          this.getJurisdiction().add(TypeConvertor.castToCodeableConcept(value));
5948        } else if (name.equals("immutable")) {
5949          this.immutable = TypeConvertor.castToBoolean(value); // BooleanType
5950        } else if (name.equals("purpose")) {
5951          this.purpose = TypeConvertor.castToMarkdown(value); // MarkdownType
5952        } else if (name.equals("copyright")) {
5953          this.copyright = TypeConvertor.castToMarkdown(value); // MarkdownType
5954        } else if (name.equals("compose")) {
5955          this.compose = (ValueSetComposeComponent) value; // ValueSetComposeComponent
5956        } else if (name.equals("expansion")) {
5957          this.expansion = (ValueSetExpansionComponent) value; // ValueSetExpansionComponent
5958        } else if (name.equals("scope")) {
5959          this.scope = (ValueSetScopeComponent) value; // ValueSetScopeComponent
5960        } else
5961          return super.setProperty(name, value);
5962        return value;
5963      }
5964
5965      @Override
5966      public Base makeProperty(int hash, String name) throws FHIRException {
5967        switch (hash) {
5968        case 116079:  return getUrlElement();
5969        case -1618432855:  return addIdentifier(); 
5970        case 351608024:  return getVersionElement();
5971        case 3373707:  return getNameElement();
5972        case 110371416:  return getTitleElement();
5973        case -892481550:  return getStatusElement();
5974        case -404562712:  return getExperimentalElement();
5975        case 3076014:  return getDateElement();
5976        case 1447404028:  return getPublisherElement();
5977        case 951526432:  return addContact(); 
5978        case -1724546052:  return getDescriptionElement();
5979        case -669707736:  return addUseContext(); 
5980        case -507075711:  return addJurisdiction(); 
5981        case 1596987778:  return getImmutableElement();
5982        case -220463842:  return getPurposeElement();
5983        case 1522889671:  return getCopyrightElement();
5984        case 950497682:  return getCompose();
5985        case 17878207:  return getExpansion();
5986        case 109264468:  return getScope();
5987        default: return super.makeProperty(hash, name);
5988        }
5989
5990      }
5991
5992      @Override
5993      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5994        switch (hash) {
5995        case 116079: /*url*/ return new String[] {"uri"};
5996        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
5997        case 351608024: /*version*/ return new String[] {"string"};
5998        case 3373707: /*name*/ return new String[] {"string"};
5999        case 110371416: /*title*/ return new String[] {"string"};
6000        case -892481550: /*status*/ return new String[] {"code"};
6001        case -404562712: /*experimental*/ return new String[] {"boolean"};
6002        case 3076014: /*date*/ return new String[] {"dateTime"};
6003        case 1447404028: /*publisher*/ return new String[] {"string"};
6004        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
6005        case -1724546052: /*description*/ return new String[] {"markdown"};
6006        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
6007        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
6008        case 1596987778: /*immutable*/ return new String[] {"boolean"};
6009        case -220463842: /*purpose*/ return new String[] {"markdown"};
6010        case 1522889671: /*copyright*/ return new String[] {"markdown"};
6011        case 950497682: /*compose*/ return new String[] {};
6012        case 17878207: /*expansion*/ return new String[] {};
6013        case 109264468: /*scope*/ return new String[] {};
6014        default: return super.getTypesForProperty(hash, name);
6015        }
6016
6017      }
6018
6019      @Override
6020      public Base addChild(String name) throws FHIRException {
6021        if (name.equals("url")) {
6022          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.url");
6023        }
6024        else if (name.equals("identifier")) {
6025          return addIdentifier();
6026        }
6027        else if (name.equals("version")) {
6028          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.version");
6029        }
6030        else if (name.equals("name")) {
6031          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.name");
6032        }
6033        else if (name.equals("title")) {
6034          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.title");
6035        }
6036        else if (name.equals("status")) {
6037          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.status");
6038        }
6039        else if (name.equals("experimental")) {
6040          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.experimental");
6041        }
6042        else if (name.equals("date")) {
6043          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.date");
6044        }
6045        else if (name.equals("publisher")) {
6046          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.publisher");
6047        }
6048        else if (name.equals("contact")) {
6049          return addContact();
6050        }
6051        else if (name.equals("description")) {
6052          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.description");
6053        }
6054        else if (name.equals("useContext")) {
6055          return addUseContext();
6056        }
6057        else if (name.equals("jurisdiction")) {
6058          return addJurisdiction();
6059        }
6060        else if (name.equals("immutable")) {
6061          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.immutable");
6062        }
6063        else if (name.equals("purpose")) {
6064          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.purpose");
6065        }
6066        else if (name.equals("copyright")) {
6067          throw new FHIRException("Cannot call addChild on a primitive type ValueSet.copyright");
6068        }
6069        else if (name.equals("compose")) {
6070          this.compose = new ValueSetComposeComponent();
6071          return this.compose;
6072        }
6073        else if (name.equals("expansion")) {
6074          this.expansion = new ValueSetExpansionComponent();
6075          return this.expansion;
6076        }
6077        else if (name.equals("scope")) {
6078          this.scope = new ValueSetScopeComponent();
6079          return this.scope;
6080        }
6081        else
6082          return super.addChild(name);
6083      }
6084
6085  public String fhirType() {
6086    return "ValueSet";
6087
6088  }
6089
6090      public ValueSet copy() {
6091        ValueSet dst = new ValueSet();
6092        copyValues(dst);
6093        return dst;
6094      }
6095
6096      public void copyValues(ValueSet dst) {
6097        super.copyValues(dst);
6098        dst.url = url == null ? null : url.copy();
6099        if (identifier != null) {
6100          dst.identifier = new ArrayList<Identifier>();
6101          for (Identifier i : identifier)
6102            dst.identifier.add(i.copy());
6103        };
6104        dst.version = version == null ? null : version.copy();
6105        dst.name = name == null ? null : name.copy();
6106        dst.title = title == null ? null : title.copy();
6107        dst.status = status == null ? null : status.copy();
6108        dst.experimental = experimental == null ? null : experimental.copy();
6109        dst.date = date == null ? null : date.copy();
6110        dst.publisher = publisher == null ? null : publisher.copy();
6111        if (contact != null) {
6112          dst.contact = new ArrayList<ContactDetail>();
6113          for (ContactDetail i : contact)
6114            dst.contact.add(i.copy());
6115        };
6116        dst.description = description == null ? null : description.copy();
6117        if (useContext != null) {
6118          dst.useContext = new ArrayList<UsageContext>();
6119          for (UsageContext i : useContext)
6120            dst.useContext.add(i.copy());
6121        };
6122        if (jurisdiction != null) {
6123          dst.jurisdiction = new ArrayList<CodeableConcept>();
6124          for (CodeableConcept i : jurisdiction)
6125            dst.jurisdiction.add(i.copy());
6126        };
6127        dst.immutable = immutable == null ? null : immutable.copy();
6128        dst.purpose = purpose == null ? null : purpose.copy();
6129        dst.copyright = copyright == null ? null : copyright.copy();
6130        dst.compose = compose == null ? null : compose.copy();
6131        dst.expansion = expansion == null ? null : expansion.copy();
6132        dst.scope = scope == null ? null : scope.copy();
6133      }
6134
6135      protected ValueSet typedCopy() {
6136        return copy();
6137      }
6138
6139      @Override
6140      public boolean equalsDeep(Base other_) {
6141        if (!super.equalsDeep(other_))
6142          return false;
6143        if (!(other_ instanceof ValueSet))
6144          return false;
6145        ValueSet o = (ValueSet) other_;
6146        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
6147           && compareDeep(name, o.name, true) && compareDeep(title, o.title, true) && compareDeep(status, o.status, true)
6148           && compareDeep(experimental, o.experimental, true) && compareDeep(date, o.date, true) && compareDeep(publisher, o.publisher, true)
6149           && compareDeep(contact, o.contact, true) && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
6150           && compareDeep(jurisdiction, o.jurisdiction, true) && compareDeep(immutable, o.immutable, true)
6151           && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true) && compareDeep(compose, o.compose, true)
6152           && compareDeep(expansion, o.expansion, true) && compareDeep(scope, o.scope, true);
6153      }
6154
6155      @Override
6156      public boolean equalsShallow(Base other_) {
6157        if (!super.equalsShallow(other_))
6158          return false;
6159        if (!(other_ instanceof ValueSet))
6160          return false;
6161        ValueSet o = (ValueSet) other_;
6162        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
6163           && compareValues(title, o.title, true) && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true)
6164           && compareValues(date, o.date, true) && compareValues(publisher, o.publisher, true) && compareValues(description, o.description, true)
6165           && compareValues(immutable, o.immutable, true) && compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
6166          ;
6167      }
6168
6169      public boolean isEmpty() {
6170        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, identifier, version
6171          , name, title, status, experimental, date, publisher, contact, description, useContext
6172          , jurisdiction, immutable, purpose, copyright, compose, expansion, scope);
6173      }
6174
6175  @Override
6176  public ResourceType getResourceType() {
6177    return ResourceType.ValueSet;
6178   }
6179
6180 /**
6181   * Search parameter: <b>code</b>
6182   * <p>
6183   * Description: <b>This special parameter searches for codes in the value set. See additional notes on the ValueSet resource</b><br>
6184   * Type: <b>token</b><br>
6185   * Path: <b>ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code</b><br>
6186   * </p>
6187   */
6188  @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" )
6189  public static final String SP_CODE = "code";
6190 /**
6191   * <b>Fluent Client</b> search parameter constant for <b>code</b>
6192   * <p>
6193   * Description: <b>This special parameter searches for codes in the value set. See additional notes on the ValueSet resource</b><br>
6194   * Type: <b>token</b><br>
6195   * Path: <b>ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code</b><br>
6196   * </p>
6197   */
6198  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
6199
6200 /**
6201   * Search parameter: <b>expansion</b>
6202   * <p>
6203   * Description: <b>Identifies the value set expansion (business identifier)</b><br>
6204   * Type: <b>uri</b><br>
6205   * Path: <b>ValueSet.expansion.identifier</b><br>
6206   * </p>
6207   */
6208  @SearchParamDefinition(name="expansion", path="ValueSet.expansion.identifier", description="Identifies the value set expansion (business identifier)", type="uri" )
6209  public static final String SP_EXPANSION = "expansion";
6210 /**
6211   * <b>Fluent Client</b> search parameter constant for <b>expansion</b>
6212   * <p>
6213   * Description: <b>Identifies the value set expansion (business identifier)</b><br>
6214   * Type: <b>uri</b><br>
6215   * Path: <b>ValueSet.expansion.identifier</b><br>
6216   * </p>
6217   */
6218  public static final ca.uhn.fhir.rest.gclient.UriClientParam EXPANSION = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_EXPANSION);
6219
6220 /**
6221   * Search parameter: <b>reference</b>
6222   * <p>
6223   * Description: <b>A code system included or excluded in the value set or an imported value set</b><br>
6224   * Type: <b>uri</b><br>
6225   * Path: <b>ValueSet.compose.include.system</b><br>
6226   * </p>
6227   */
6228  @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" )
6229  public static final String SP_REFERENCE = "reference";
6230 /**
6231   * <b>Fluent Client</b> search parameter constant for <b>reference</b>
6232   * <p>
6233   * Description: <b>A code system included or excluded in the value set or an imported value set</b><br>
6234   * Type: <b>uri</b><br>
6235   * Path: <b>ValueSet.compose.include.system</b><br>
6236   * </p>
6237   */
6238  public static final ca.uhn.fhir.rest.gclient.UriClientParam REFERENCE = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_REFERENCE);
6239
6240 /**
6241   * Search parameter: <b>context-quantity</b>
6242   * <p>
6243   * Description: <b>Multiple Resources: 
6244
6245* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
6246* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
6247* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
6248* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
6249* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
6250* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
6251* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
6252* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
6253* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
6254* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
6255* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
6256* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
6257* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
6258* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
6259</b><br>
6260   * Type: <b>quantity</b><br>
6261   * 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>
6262   * </p>
6263   */
6264  @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" )
6265  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
6266 /**
6267   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
6268   * <p>
6269   * Description: <b>Multiple Resources: 
6270
6271* [CapabilityStatement](capabilitystatement.html): A quantity- or range-valued use context assigned to the capability statement
6272* [CodeSystem](codesystem.html): A quantity- or range-valued use context assigned to the code system
6273* [CompartmentDefinition](compartmentdefinition.html): A quantity- or range-valued use context assigned to the compartment definition
6274* [ConceptMap](conceptmap.html): A quantity- or range-valued use context assigned to the concept map
6275* [GraphDefinition](graphdefinition.html): A quantity- or range-valued use context assigned to the graph definition
6276* [ImplementationGuide](implementationguide.html): A quantity- or range-valued use context assigned to the implementation guide
6277* [MessageDefinition](messagedefinition.html): A quantity- or range-valued use context assigned to the message definition
6278* [NamingSystem](namingsystem.html): A quantity- or range-valued use context assigned to the naming system
6279* [OperationDefinition](operationdefinition.html): A quantity- or range-valued use context assigned to the operation definition
6280* [SearchParameter](searchparameter.html): A quantity- or range-valued use context assigned to the search parameter
6281* [StructureDefinition](structuredefinition.html): A quantity- or range-valued use context assigned to the structure definition
6282* [StructureMap](structuremap.html): A quantity- or range-valued use context assigned to the structure map
6283* [TerminologyCapabilities](terminologycapabilities.html): A quantity- or range-valued use context assigned to the terminology capabilities
6284* [ValueSet](valueset.html): A quantity- or range-valued use context assigned to the value set
6285</b><br>
6286   * Type: <b>quantity</b><br>
6287   * 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>
6288   * </p>
6289   */
6290  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(SP_CONTEXT_QUANTITY);
6291
6292 /**
6293   * Search parameter: <b>context-type-quantity</b>
6294   * <p>
6295   * Description: <b>Multiple Resources: 
6296
6297* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
6298* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
6299* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
6300* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
6301* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
6302* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
6303* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
6304* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
6305* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
6306* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
6307* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
6308* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
6309* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
6310* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
6311</b><br>
6312   * Type: <b>composite</b><br>
6313   * 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>
6314   * </p>
6315   */
6316  @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"} )
6317  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
6318 /**
6319   * <b>Fluent Client</b> search parameter constant for <b>context-type-quantity</b>
6320   * <p>
6321   * Description: <b>Multiple Resources: 
6322
6323* [CapabilityStatement](capabilitystatement.html): A use context type and quantity- or range-based value assigned to the capability statement
6324* [CodeSystem](codesystem.html): A use context type and quantity- or range-based value assigned to the code system
6325* [CompartmentDefinition](compartmentdefinition.html): A use context type and quantity- or range-based value assigned to the compartment definition
6326* [ConceptMap](conceptmap.html): A use context type and quantity- or range-based value assigned to the concept map
6327* [GraphDefinition](graphdefinition.html): A use context type and quantity- or range-based value assigned to the graph definition
6328* [ImplementationGuide](implementationguide.html): A use context type and quantity- or range-based value assigned to the implementation guide
6329* [MessageDefinition](messagedefinition.html): A use context type and quantity- or range-based value assigned to the message definition
6330* [NamingSystem](namingsystem.html): A use context type and quantity- or range-based value assigned to the naming system
6331* [OperationDefinition](operationdefinition.html): A use context type and quantity- or range-based value assigned to the operation definition
6332* [SearchParameter](searchparameter.html): A use context type and quantity- or range-based value assigned to the search parameter
6333* [StructureDefinition](structuredefinition.html): A use context type and quantity- or range-based value assigned to the structure definition
6334* [StructureMap](structuremap.html): A use context type and quantity- or range-based value assigned to the structure map
6335* [TerminologyCapabilities](terminologycapabilities.html): A use context type and quantity- or range-based value assigned to the terminology capabilities
6336* [ValueSet](valueset.html): A use context type and quantity- or range-based value assigned to the value set
6337</b><br>
6338   * Type: <b>composite</b><br>
6339   * 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>
6340   * </p>
6341   */
6342  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);
6343
6344 /**
6345   * Search parameter: <b>context-type-value</b>
6346   * <p>
6347   * Description: <b>Multiple Resources: 
6348
6349* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
6350* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
6351* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
6352* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
6353* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
6354* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
6355* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
6356* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
6357* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
6358* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
6359* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
6360* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
6361* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
6362* [ValueSet](valueset.html): A use context type and value assigned to the value set
6363</b><br>
6364   * Type: <b>composite</b><br>
6365   * 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>
6366   * </p>
6367   */
6368  @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"} )
6369  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
6370 /**
6371   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
6372   * <p>
6373   * Description: <b>Multiple Resources: 
6374
6375* [CapabilityStatement](capabilitystatement.html): A use context type and value assigned to the capability statement
6376* [CodeSystem](codesystem.html): A use context type and value assigned to the code system
6377* [CompartmentDefinition](compartmentdefinition.html): A use context type and value assigned to the compartment definition
6378* [ConceptMap](conceptmap.html): A use context type and value assigned to the concept map
6379* [GraphDefinition](graphdefinition.html): A use context type and value assigned to the graph definition
6380* [ImplementationGuide](implementationguide.html): A use context type and value assigned to the implementation guide
6381* [MessageDefinition](messagedefinition.html): A use context type and value assigned to the message definition
6382* [NamingSystem](namingsystem.html): A use context type and value assigned to the naming system
6383* [OperationDefinition](operationdefinition.html): A use context type and value assigned to the operation definition
6384* [SearchParameter](searchparameter.html): A use context type and value assigned to the search parameter
6385* [StructureDefinition](structuredefinition.html): A use context type and value assigned to the structure definition
6386* [StructureMap](structuremap.html): A use context type and value assigned to the structure map
6387* [TerminologyCapabilities](terminologycapabilities.html): A use context type and value assigned to the terminology capabilities
6388* [ValueSet](valueset.html): A use context type and value assigned to the value set
6389</b><br>
6390   * Type: <b>composite</b><br>
6391   * 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>
6392   * </p>
6393   */
6394  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);
6395
6396 /**
6397   * Search parameter: <b>context-type</b>
6398   * <p>
6399   * Description: <b>Multiple Resources: 
6400
6401* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
6402* [CodeSystem](codesystem.html): A type of use context assigned to the code system
6403* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
6404* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
6405* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
6406* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
6407* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
6408* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
6409* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
6410* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
6411* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
6412* [StructureMap](structuremap.html): A type of use context assigned to the structure map
6413* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
6414* [ValueSet](valueset.html): A type of use context assigned to the value set
6415</b><br>
6416   * Type: <b>token</b><br>
6417   * 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>
6418   * </p>
6419   */
6420  @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" )
6421  public static final String SP_CONTEXT_TYPE = "context-type";
6422 /**
6423   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
6424   * <p>
6425   * Description: <b>Multiple Resources: 
6426
6427* [CapabilityStatement](capabilitystatement.html): A type of use context assigned to the capability statement
6428* [CodeSystem](codesystem.html): A type of use context assigned to the code system
6429* [CompartmentDefinition](compartmentdefinition.html): A type of use context assigned to the compartment definition
6430* [ConceptMap](conceptmap.html): A type of use context assigned to the concept map
6431* [GraphDefinition](graphdefinition.html): A type of use context assigned to the graph definition
6432* [ImplementationGuide](implementationguide.html): A type of use context assigned to the implementation guide
6433* [MessageDefinition](messagedefinition.html): A type of use context assigned to the message definition
6434* [NamingSystem](namingsystem.html): A type of use context assigned to the naming system
6435* [OperationDefinition](operationdefinition.html): A type of use context assigned to the operation definition
6436* [SearchParameter](searchparameter.html): A type of use context assigned to the search parameter
6437* [StructureDefinition](structuredefinition.html): A type of use context assigned to the structure definition
6438* [StructureMap](structuremap.html): A type of use context assigned to the structure map
6439* [TerminologyCapabilities](terminologycapabilities.html): A type of use context assigned to the terminology capabilities
6440* [ValueSet](valueset.html): A type of use context assigned to the value set
6441</b><br>
6442   * Type: <b>token</b><br>
6443   * 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>
6444   * </p>
6445   */
6446  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT_TYPE);
6447
6448 /**
6449   * Search parameter: <b>context</b>
6450   * <p>
6451   * Description: <b>Multiple Resources: 
6452
6453* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
6454* [CodeSystem](codesystem.html): A use context assigned to the code system
6455* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
6456* [ConceptMap](conceptmap.html): A use context assigned to the concept map
6457* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
6458* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
6459* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
6460* [NamingSystem](namingsystem.html): A use context assigned to the naming system
6461* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
6462* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
6463* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
6464* [StructureMap](structuremap.html): A use context assigned to the structure map
6465* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
6466* [ValueSet](valueset.html): A use context assigned to the value set
6467</b><br>
6468   * Type: <b>token</b><br>
6469   * 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>
6470   * </p>
6471   */
6472  @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" )
6473  public static final String SP_CONTEXT = "context";
6474 /**
6475   * <b>Fluent Client</b> search parameter constant for <b>context</b>
6476   * <p>
6477   * Description: <b>Multiple Resources: 
6478
6479* [CapabilityStatement](capabilitystatement.html): A use context assigned to the capability statement
6480* [CodeSystem](codesystem.html): A use context assigned to the code system
6481* [CompartmentDefinition](compartmentdefinition.html): A use context assigned to the compartment definition
6482* [ConceptMap](conceptmap.html): A use context assigned to the concept map
6483* [GraphDefinition](graphdefinition.html): A use context assigned to the graph definition
6484* [ImplementationGuide](implementationguide.html): A use context assigned to the implementation guide
6485* [MessageDefinition](messagedefinition.html): A use context assigned to the message definition
6486* [NamingSystem](namingsystem.html): A use context assigned to the naming system
6487* [OperationDefinition](operationdefinition.html): A use context assigned to the operation definition
6488* [SearchParameter](searchparameter.html): A use context assigned to the search parameter
6489* [StructureDefinition](structuredefinition.html): A use context assigned to the structure definition
6490* [StructureMap](structuremap.html): A use context assigned to the structure map
6491* [TerminologyCapabilities](terminologycapabilities.html): A use context assigned to the terminology capabilities
6492* [ValueSet](valueset.html): A use context assigned to the value set
6493</b><br>
6494   * Type: <b>token</b><br>
6495   * 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>
6496   * </p>
6497   */
6498  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
6499
6500 /**
6501   * Search parameter: <b>date</b>
6502   * <p>
6503   * Description: <b>Multiple Resources: 
6504
6505* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
6506* [CodeSystem](codesystem.html): The code system publication date
6507* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
6508* [ConceptMap](conceptmap.html): The concept map publication date
6509* [GraphDefinition](graphdefinition.html): The graph definition publication date
6510* [ImplementationGuide](implementationguide.html): The implementation guide publication date
6511* [MessageDefinition](messagedefinition.html): The message definition publication date
6512* [NamingSystem](namingsystem.html): The naming system publication date
6513* [OperationDefinition](operationdefinition.html): The operation definition publication date
6514* [SearchParameter](searchparameter.html): The search parameter publication date
6515* [StructureDefinition](structuredefinition.html): The structure definition publication date
6516* [StructureMap](structuremap.html): The structure map publication date
6517* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
6518* [ValueSet](valueset.html): The value set publication date
6519</b><br>
6520   * Type: <b>date</b><br>
6521   * 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>
6522   * </p>
6523   */
6524  @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" )
6525  public static final String SP_DATE = "date";
6526 /**
6527   * <b>Fluent Client</b> search parameter constant for <b>date</b>
6528   * <p>
6529   * Description: <b>Multiple Resources: 
6530
6531* [CapabilityStatement](capabilitystatement.html): The capability statement publication date
6532* [CodeSystem](codesystem.html): The code system publication date
6533* [CompartmentDefinition](compartmentdefinition.html): The compartment definition publication date
6534* [ConceptMap](conceptmap.html): The concept map publication date
6535* [GraphDefinition](graphdefinition.html): The graph definition publication date
6536* [ImplementationGuide](implementationguide.html): The implementation guide publication date
6537* [MessageDefinition](messagedefinition.html): The message definition publication date
6538* [NamingSystem](namingsystem.html): The naming system publication date
6539* [OperationDefinition](operationdefinition.html): The operation definition publication date
6540* [SearchParameter](searchparameter.html): The search parameter publication date
6541* [StructureDefinition](structuredefinition.html): The structure definition publication date
6542* [StructureMap](structuremap.html): The structure map publication date
6543* [TerminologyCapabilities](terminologycapabilities.html): The terminology capabilities publication date
6544* [ValueSet](valueset.html): The value set publication date
6545</b><br>
6546   * Type: <b>date</b><br>
6547   * 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>
6548   * </p>
6549   */
6550  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
6551
6552 /**
6553   * Search parameter: <b>description</b>
6554   * <p>
6555   * Description: <b>Multiple Resources: 
6556
6557* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
6558* [CodeSystem](codesystem.html): The description of the code system
6559* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
6560* [ConceptMap](conceptmap.html): The description of the concept map
6561* [GraphDefinition](graphdefinition.html): The description of the graph definition
6562* [ImplementationGuide](implementationguide.html): The description of the implementation guide
6563* [MessageDefinition](messagedefinition.html): The description of the message definition
6564* [NamingSystem](namingsystem.html): The description of the naming system
6565* [OperationDefinition](operationdefinition.html): The description of the operation definition
6566* [SearchParameter](searchparameter.html): The description of the search parameter
6567* [StructureDefinition](structuredefinition.html): The description of the structure definition
6568* [StructureMap](structuremap.html): The description of the structure map
6569* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
6570* [ValueSet](valueset.html): The description of the value set
6571</b><br>
6572   * Type: <b>string</b><br>
6573   * 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>
6574   * </p>
6575   */
6576  @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" )
6577  public static final String SP_DESCRIPTION = "description";
6578 /**
6579   * <b>Fluent Client</b> search parameter constant for <b>description</b>
6580   * <p>
6581   * Description: <b>Multiple Resources: 
6582
6583* [CapabilityStatement](capabilitystatement.html): The description of the capability statement
6584* [CodeSystem](codesystem.html): The description of the code system
6585* [CompartmentDefinition](compartmentdefinition.html): The description of the compartment definition
6586* [ConceptMap](conceptmap.html): The description of the concept map
6587* [GraphDefinition](graphdefinition.html): The description of the graph definition
6588* [ImplementationGuide](implementationguide.html): The description of the implementation guide
6589* [MessageDefinition](messagedefinition.html): The description of the message definition
6590* [NamingSystem](namingsystem.html): The description of the naming system
6591* [OperationDefinition](operationdefinition.html): The description of the operation definition
6592* [SearchParameter](searchparameter.html): The description of the search parameter
6593* [StructureDefinition](structuredefinition.html): The description of the structure definition
6594* [StructureMap](structuremap.html): The description of the structure map
6595* [TerminologyCapabilities](terminologycapabilities.html): The description of the terminology capabilities
6596* [ValueSet](valueset.html): The description of the value set
6597</b><br>
6598   * Type: <b>string</b><br>
6599   * 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>
6600   * </p>
6601   */
6602  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
6603
6604 /**
6605   * Search parameter: <b>identifier</b>
6606   * <p>
6607   * Description: <b>Multiple Resources: 
6608
6609* [CodeSystem](codesystem.html): External identifier for the code system
6610* [ConceptMap](conceptmap.html): External identifier for the concept map
6611* [MessageDefinition](messagedefinition.html): External identifier for the message definition
6612* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
6613* [StructureMap](structuremap.html): External identifier for the structure map
6614* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
6615* [ValueSet](valueset.html): External identifier for the value set
6616</b><br>
6617   * Type: <b>token</b><br>
6618   * Path: <b>CodeSystem.identifier | ConceptMap.identifier | MessageDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | TerminologyCapabilities.identifier | ValueSet.identifier</b><br>
6619   * </p>
6620   */
6621  @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" )
6622  public static final String SP_IDENTIFIER = "identifier";
6623 /**
6624   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
6625   * <p>
6626   * Description: <b>Multiple Resources: 
6627
6628* [CodeSystem](codesystem.html): External identifier for the code system
6629* [ConceptMap](conceptmap.html): External identifier for the concept map
6630* [MessageDefinition](messagedefinition.html): External identifier for the message definition
6631* [StructureDefinition](structuredefinition.html): External identifier for the structure definition
6632* [StructureMap](structuremap.html): External identifier for the structure map
6633* [TerminologyCapabilities](terminologycapabilities.html): External identifier for the terminology capabilities
6634* [ValueSet](valueset.html): External identifier for the value set
6635</b><br>
6636   * Type: <b>token</b><br>
6637   * Path: <b>CodeSystem.identifier | ConceptMap.identifier | MessageDefinition.identifier | StructureDefinition.identifier | StructureMap.identifier | TerminologyCapabilities.identifier | ValueSet.identifier</b><br>
6638   * </p>
6639   */
6640  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
6641
6642 /**
6643   * Search parameter: <b>jurisdiction</b>
6644   * <p>
6645   * Description: <b>Multiple Resources: 
6646
6647* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
6648* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
6649* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
6650* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
6651* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
6652* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
6653* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
6654* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
6655* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
6656* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
6657* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
6658* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
6659* [ValueSet](valueset.html): Intended jurisdiction for the value set
6660</b><br>
6661   * Type: <b>token</b><br>
6662   * 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>
6663   * </p>
6664   */
6665  @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" )
6666  public static final String SP_JURISDICTION = "jurisdiction";
6667 /**
6668   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
6669   * <p>
6670   * Description: <b>Multiple Resources: 
6671
6672* [CapabilityStatement](capabilitystatement.html): Intended jurisdiction for the capability statement
6673* [CodeSystem](codesystem.html): Intended jurisdiction for the code system
6674* [ConceptMap](conceptmap.html): Intended jurisdiction for the concept map
6675* [GraphDefinition](graphdefinition.html): Intended jurisdiction for the graph definition
6676* [ImplementationGuide](implementationguide.html): Intended jurisdiction for the implementation guide
6677* [MessageDefinition](messagedefinition.html): Intended jurisdiction for the message definition
6678* [NamingSystem](namingsystem.html): Intended jurisdiction for the naming system
6679* [OperationDefinition](operationdefinition.html): Intended jurisdiction for the operation definition
6680* [SearchParameter](searchparameter.html): Intended jurisdiction for the search parameter
6681* [StructureDefinition](structuredefinition.html): Intended jurisdiction for the structure definition
6682* [StructureMap](structuremap.html): Intended jurisdiction for the structure map
6683* [TerminologyCapabilities](terminologycapabilities.html): Intended jurisdiction for the terminology capabilities
6684* [ValueSet](valueset.html): Intended jurisdiction for the value set
6685</b><br>
6686   * Type: <b>token</b><br>
6687   * 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>
6688   * </p>
6689   */
6690  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
6691
6692 /**
6693   * Search parameter: <b>name</b>
6694   * <p>
6695   * Description: <b>Multiple Resources: 
6696
6697* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
6698* [CodeSystem](codesystem.html): Computationally friendly name of the code system
6699* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
6700* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
6701* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
6702* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
6703* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
6704* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
6705* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
6706* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
6707* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
6708* [StructureMap](structuremap.html): Computationally friendly name of the structure map
6709* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
6710* [ValueSet](valueset.html): Computationally friendly name of the value set
6711</b><br>
6712   * Type: <b>string</b><br>
6713   * 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>
6714   * </p>
6715   */
6716  @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" )
6717  public static final String SP_NAME = "name";
6718 /**
6719   * <b>Fluent Client</b> search parameter constant for <b>name</b>
6720   * <p>
6721   * Description: <b>Multiple Resources: 
6722
6723* [CapabilityStatement](capabilitystatement.html): Computationally friendly name of the capability statement
6724* [CodeSystem](codesystem.html): Computationally friendly name of the code system
6725* [CompartmentDefinition](compartmentdefinition.html): Computationally friendly name of the compartment definition
6726* [ConceptMap](conceptmap.html): Computationally friendly name of the concept map
6727* [GraphDefinition](graphdefinition.html): Computationally friendly name of the graph definition
6728* [ImplementationGuide](implementationguide.html): Computationally friendly name of the implementation guide
6729* [MessageDefinition](messagedefinition.html): Computationally friendly name of the message definition
6730* [NamingSystem](namingsystem.html): Computationally friendly name of the naming system
6731* [OperationDefinition](operationdefinition.html): Computationally friendly name of the operation definition
6732* [SearchParameter](searchparameter.html): Computationally friendly name of the search parameter
6733* [StructureDefinition](structuredefinition.html): Computationally friendly name of the structure definition
6734* [StructureMap](structuremap.html): Computationally friendly name of the structure map
6735* [TerminologyCapabilities](terminologycapabilities.html): Computationally friendly name of the terminology capabilities
6736* [ValueSet](valueset.html): Computationally friendly name of the value set
6737</b><br>
6738   * Type: <b>string</b><br>
6739   * 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>
6740   * </p>
6741   */
6742  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
6743
6744 /**
6745   * Search parameter: <b>publisher</b>
6746   * <p>
6747   * Description: <b>Multiple Resources: 
6748
6749* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
6750* [CodeSystem](codesystem.html): Name of the publisher of the code system
6751* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
6752* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
6753* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
6754* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
6755* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
6756* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
6757* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
6758* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
6759* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
6760* [StructureMap](structuremap.html): Name of the publisher of the structure map
6761* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
6762* [ValueSet](valueset.html): Name of the publisher of the value set
6763</b><br>
6764   * Type: <b>string</b><br>
6765   * 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>
6766   * </p>
6767   */
6768  @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" )
6769  public static final String SP_PUBLISHER = "publisher";
6770 /**
6771   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
6772   * <p>
6773   * Description: <b>Multiple Resources: 
6774
6775* [CapabilityStatement](capabilitystatement.html): Name of the publisher of the capability statement
6776* [CodeSystem](codesystem.html): Name of the publisher of the code system
6777* [CompartmentDefinition](compartmentdefinition.html): Name of the publisher of the compartment definition
6778* [ConceptMap](conceptmap.html): Name of the publisher of the concept map
6779* [GraphDefinition](graphdefinition.html): Name of the publisher of the graph definition
6780* [ImplementationGuide](implementationguide.html): Name of the publisher of the implementation guide
6781* [MessageDefinition](messagedefinition.html): Name of the publisher of the message definition
6782* [NamingSystem](namingsystem.html): Name of the publisher of the naming system
6783* [OperationDefinition](operationdefinition.html): Name of the publisher of the operation definition
6784* [SearchParameter](searchparameter.html): Name of the publisher of the search parameter
6785* [StructureDefinition](structuredefinition.html): Name of the publisher of the structure definition
6786* [StructureMap](structuremap.html): Name of the publisher of the structure map
6787* [TerminologyCapabilities](terminologycapabilities.html): Name of the publisher of the terminology capabilities
6788* [ValueSet](valueset.html): Name of the publisher of the value set
6789</b><br>
6790   * Type: <b>string</b><br>
6791   * 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>
6792   * </p>
6793   */
6794  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
6795
6796 /**
6797   * Search parameter: <b>status</b>
6798   * <p>
6799   * Description: <b>Multiple Resources: 
6800
6801* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
6802* [CodeSystem](codesystem.html): The current status of the code system
6803* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
6804* [ConceptMap](conceptmap.html): The current status of the concept map
6805* [GraphDefinition](graphdefinition.html): The current status of the graph definition
6806* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
6807* [MessageDefinition](messagedefinition.html): The current status of the message definition
6808* [NamingSystem](namingsystem.html): The current status of the naming system
6809* [OperationDefinition](operationdefinition.html): The current status of the operation definition
6810* [SearchParameter](searchparameter.html): The current status of the search parameter
6811* [StructureDefinition](structuredefinition.html): The current status of the structure definition
6812* [StructureMap](structuremap.html): The current status of the structure map
6813* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
6814* [ValueSet](valueset.html): The current status of the value set
6815</b><br>
6816   * Type: <b>token</b><br>
6817   * 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>
6818   * </p>
6819   */
6820  @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" )
6821  public static final String SP_STATUS = "status";
6822 /**
6823   * <b>Fluent Client</b> search parameter constant for <b>status</b>
6824   * <p>
6825   * Description: <b>Multiple Resources: 
6826
6827* [CapabilityStatement](capabilitystatement.html): The current status of the capability statement
6828* [CodeSystem](codesystem.html): The current status of the code system
6829* [CompartmentDefinition](compartmentdefinition.html): The current status of the compartment definition
6830* [ConceptMap](conceptmap.html): The current status of the concept map
6831* [GraphDefinition](graphdefinition.html): The current status of the graph definition
6832* [ImplementationGuide](implementationguide.html): The current status of the implementation guide
6833* [MessageDefinition](messagedefinition.html): The current status of the message definition
6834* [NamingSystem](namingsystem.html): The current status of the naming system
6835* [OperationDefinition](operationdefinition.html): The current status of the operation definition
6836* [SearchParameter](searchparameter.html): The current status of the search parameter
6837* [StructureDefinition](structuredefinition.html): The current status of the structure definition
6838* [StructureMap](structuremap.html): The current status of the structure map
6839* [TerminologyCapabilities](terminologycapabilities.html): The current status of the terminology capabilities
6840* [ValueSet](valueset.html): The current status of the value set
6841</b><br>
6842   * Type: <b>token</b><br>
6843   * 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>
6844   * </p>
6845   */
6846  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
6847
6848 /**
6849   * Search parameter: <b>title</b>
6850   * <p>
6851   * Description: <b>Multiple Resources: 
6852
6853* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
6854* [CodeSystem](codesystem.html): The human-friendly name of the code system
6855* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
6856* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
6857* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
6858* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
6859* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
6860* [StructureMap](structuremap.html): The human-friendly name of the structure map
6861* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
6862* [ValueSet](valueset.html): The human-friendly name of the value set
6863</b><br>
6864   * Type: <b>string</b><br>
6865   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
6866   * </p>
6867   */
6868  @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" )
6869  public static final String SP_TITLE = "title";
6870 /**
6871   * <b>Fluent Client</b> search parameter constant for <b>title</b>
6872   * <p>
6873   * Description: <b>Multiple Resources: 
6874
6875* [CapabilityStatement](capabilitystatement.html): The human-friendly name of the capability statement
6876* [CodeSystem](codesystem.html): The human-friendly name of the code system
6877* [ConceptMap](conceptmap.html): The human-friendly name of the concept map
6878* [ImplementationGuide](implementationguide.html): The human-friendly name of the implementation guide
6879* [MessageDefinition](messagedefinition.html): The human-friendly name of the message definition
6880* [OperationDefinition](operationdefinition.html): The human-friendly name of the operation definition
6881* [StructureDefinition](structuredefinition.html): The human-friendly name of the structure definition
6882* [StructureMap](structuremap.html): The human-friendly name of the structure map
6883* [TerminologyCapabilities](terminologycapabilities.html): The human-friendly name of the terminology capabilities
6884* [ValueSet](valueset.html): The human-friendly name of the value set
6885</b><br>
6886   * Type: <b>string</b><br>
6887   * Path: <b>CapabilityStatement.title | CodeSystem.title | ConceptMap.title | ImplementationGuide.title | MessageDefinition.title | OperationDefinition.title | StructureDefinition.title | StructureMap.title | TerminologyCapabilities.title | ValueSet.title</b><br>
6888   * </p>
6889   */
6890  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
6891
6892 /**
6893   * Search parameter: <b>url</b>
6894   * <p>
6895   * Description: <b>Multiple Resources: 
6896
6897* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
6898* [CodeSystem](codesystem.html): The uri that identifies the code system
6899* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
6900* [ConceptMap](conceptmap.html): The uri that identifies the concept map
6901* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
6902* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
6903* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
6904* [NamingSystem](namingsystem.html): The uri that identifies the naming system
6905* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
6906* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
6907* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
6908* [StructureMap](structuremap.html): The uri that identifies the structure map
6909* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
6910* [ValueSet](valueset.html): The uri that identifies the value set
6911</b><br>
6912   * Type: <b>uri</b><br>
6913   * 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>
6914   * </p>
6915   */
6916  @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" )
6917  public static final String SP_URL = "url";
6918 /**
6919   * <b>Fluent Client</b> search parameter constant for <b>url</b>
6920   * <p>
6921   * Description: <b>Multiple Resources: 
6922
6923* [CapabilityStatement](capabilitystatement.html): The uri that identifies the capability statement
6924* [CodeSystem](codesystem.html): The uri that identifies the code system
6925* [CompartmentDefinition](compartmentdefinition.html): The uri that identifies the compartment definition
6926* [ConceptMap](conceptmap.html): The uri that identifies the concept map
6927* [GraphDefinition](graphdefinition.html): The uri that identifies the graph definition
6928* [ImplementationGuide](implementationguide.html): The uri that identifies the implementation guide
6929* [MessageDefinition](messagedefinition.html): The uri that identifies the message definition
6930* [NamingSystem](namingsystem.html): The uri that identifies the naming system
6931* [OperationDefinition](operationdefinition.html): The uri that identifies the operation definition
6932* [SearchParameter](searchparameter.html): The uri that identifies the search parameter
6933* [StructureDefinition](structuredefinition.html): The uri that identifies the structure definition
6934* [StructureMap](structuremap.html): The uri that identifies the structure map
6935* [TerminologyCapabilities](terminologycapabilities.html): The uri that identifies the terminology capabilities
6936* [ValueSet](valueset.html): The uri that identifies the value set
6937</b><br>
6938   * Type: <b>uri</b><br>
6939   * 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>
6940   * </p>
6941   */
6942  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
6943
6944 /**
6945   * Search parameter: <b>version</b>
6946   * <p>
6947   * Description: <b>Multiple Resources: 
6948
6949* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
6950* [CodeSystem](codesystem.html): The business version of the code system
6951* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
6952* [ConceptMap](conceptmap.html): The business version of the concept map
6953* [GraphDefinition](graphdefinition.html): The business version of the graph definition
6954* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
6955* [MessageDefinition](messagedefinition.html): The business version of the message definition
6956* [NamingSystem](namingsystem.html): The business version of the naming system
6957* [OperationDefinition](operationdefinition.html): The business version of the operation definition
6958* [SearchParameter](searchparameter.html): The business version of the search parameter
6959* [StructureDefinition](structuredefinition.html): The business version of the structure definition
6960* [StructureMap](structuremap.html): The business version of the structure map
6961* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
6962* [ValueSet](valueset.html): The business version of the value set
6963</b><br>
6964   * Type: <b>token</b><br>
6965   * 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>
6966   * </p>
6967   */
6968  @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" )
6969  public static final String SP_VERSION = "version";
6970 /**
6971   * <b>Fluent Client</b> search parameter constant for <b>version</b>
6972   * <p>
6973   * Description: <b>Multiple Resources: 
6974
6975* [CapabilityStatement](capabilitystatement.html): The business version of the capability statement
6976* [CodeSystem](codesystem.html): The business version of the code system
6977* [CompartmentDefinition](compartmentdefinition.html): The business version of the compartment definition
6978* [ConceptMap](conceptmap.html): The business version of the concept map
6979* [GraphDefinition](graphdefinition.html): The business version of the graph definition
6980* [ImplementationGuide](implementationguide.html): The business version of the implementation guide
6981* [MessageDefinition](messagedefinition.html): The business version of the message definition
6982* [NamingSystem](namingsystem.html): The business version of the naming system
6983* [OperationDefinition](operationdefinition.html): The business version of the operation definition
6984* [SearchParameter](searchparameter.html): The business version of the search parameter
6985* [StructureDefinition](structuredefinition.html): The business version of the structure definition
6986* [StructureMap](structuremap.html): The business version of the structure map
6987* [TerminologyCapabilities](terminologycapabilities.html): The business version of the terminology capabilities
6988* [ValueSet](valueset.html): The business version of the value set
6989</b><br>
6990   * Type: <b>token</b><br>
6991   * 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>
6992   * </p>
6993   */
6994  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
6995
6996
6997}
6998