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