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