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.instance.model.api.IBaseBackboneElement;
061import org.hl7.fhir.utilities.Utilities;
062
063import ca.uhn.fhir.model.api.annotation.Block;
064import ca.uhn.fhir.model.api.annotation.Child;
065import ca.uhn.fhir.model.api.annotation.ChildOrder;
066import ca.uhn.fhir.model.api.annotation.Description;
067import ca.uhn.fhir.model.api.annotation.ResourceDef;
068import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
069/**
070 * Resource to define constraints on the Expansion of a FHIR ValueSet.
071 */
072@ResourceDef(name="ExpansionProfile", profile="http://hl7.org/fhir/Profile/ExpansionProfile")
073@ChildOrder(names={"url", "identifier", "version", "name", "status", "experimental", "date", "publisher", "contact", "description", "useContext", "jurisdiction", "fixedVersion", "excludedSystem", "includeDesignations", "designation", "includeDefinition", "activeOnly", "excludeNested", "excludeNotForUI", "excludePostCoordinated", "displayLanguage", "limitedExpansion"})
074public class ExpansionProfile extends MetadataResource {
075
076    public enum SystemVersionProcessingMode {
077        /**
078         * Use this version of the code system if a value set doesn't specify a version
079         */
080        DEFAULT, 
081        /**
082         * Use this version of the code system. If a value set specifies a different version, the expansion operation should fail
083         */
084        CHECK, 
085        /**
086         * Use this version of the code system irrespective of which version is specified by a value set. Note that this has obvious safety issues, in that it may result in a value set expansion giving a different list of codes that is both wrong and unsafe, and implementers should only use this capability reluctantly. It primarily exists to deal with situations where specifications have fallen into decay as time passes. If a  version is override, the version used SHALL explicitly be represented in the expansion parameters
087         */
088        OVERRIDE, 
089        /**
090         * added to help the parsers with the generic types
091         */
092        NULL;
093        public static SystemVersionProcessingMode fromCode(String codeString) throws FHIRException {
094            if (codeString == null || "".equals(codeString))
095                return null;
096        if ("default".equals(codeString))
097          return DEFAULT;
098        if ("check".equals(codeString))
099          return CHECK;
100        if ("override".equals(codeString))
101          return OVERRIDE;
102        if (Configuration.isAcceptInvalidEnums())
103          return null;
104        else
105          throw new FHIRException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
106        }
107        public String toCode() {
108          switch (this) {
109            case DEFAULT: return "default";
110            case CHECK: return "check";
111            case OVERRIDE: return "override";
112            default: return "?";
113          }
114        }
115        public String getSystem() {
116          switch (this) {
117            case DEFAULT: return "http://hl7.org/fhir/system-version-processing-mode";
118            case CHECK: return "http://hl7.org/fhir/system-version-processing-mode";
119            case OVERRIDE: return "http://hl7.org/fhir/system-version-processing-mode";
120            default: return "?";
121          }
122        }
123        public String getDefinition() {
124          switch (this) {
125            case DEFAULT: return "Use this version of the code system if a value set doesn't specify a version";
126            case CHECK: return "Use this version of the code system. If a value set specifies a different version, the expansion operation should fail";
127            case OVERRIDE: return "Use this version of the code system irrespective of which version is specified by a value set. Note that this has obvious safety issues, in that it may result in a value set expansion giving a different list of codes that is both wrong and unsafe, and implementers should only use this capability reluctantly. It primarily exists to deal with situations where specifications have fallen into decay as time passes. If a  version is override, the version used SHALL explicitly be represented in the expansion parameters";
128            default: return "?";
129          }
130        }
131        public String getDisplay() {
132          switch (this) {
133            case DEFAULT: return "Default Version";
134            case CHECK: return "Check ValueSet Version";
135            case OVERRIDE: return "Override ValueSet Version";
136            default: return "?";
137          }
138        }
139    }
140
141  public static class SystemVersionProcessingModeEnumFactory implements EnumFactory<SystemVersionProcessingMode> {
142    public SystemVersionProcessingMode fromCode(String codeString) throws IllegalArgumentException {
143      if (codeString == null || "".equals(codeString))
144            if (codeString == null || "".equals(codeString))
145                return null;
146        if ("default".equals(codeString))
147          return SystemVersionProcessingMode.DEFAULT;
148        if ("check".equals(codeString))
149          return SystemVersionProcessingMode.CHECK;
150        if ("override".equals(codeString))
151          return SystemVersionProcessingMode.OVERRIDE;
152        throw new IllegalArgumentException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
153        }
154        public Enumeration<SystemVersionProcessingMode> fromType(Base code) throws FHIRException {
155          if (code == null)
156            return null;
157          if (code.isEmpty())
158            return new Enumeration<SystemVersionProcessingMode>(this);
159          String codeString = ((PrimitiveType) code).asStringValue();
160          if (codeString == null || "".equals(codeString))
161            return null;
162        if ("default".equals(codeString))
163          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.DEFAULT);
164        if ("check".equals(codeString))
165          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.CHECK);
166        if ("override".equals(codeString))
167          return new Enumeration<SystemVersionProcessingMode>(this, SystemVersionProcessingMode.OVERRIDE);
168        throw new FHIRException("Unknown SystemVersionProcessingMode code '"+codeString+"'");
169        }
170    public String toCode(SystemVersionProcessingMode code) {
171      if (code == SystemVersionProcessingMode.DEFAULT)
172        return "default";
173      if (code == SystemVersionProcessingMode.CHECK)
174        return "check";
175      if (code == SystemVersionProcessingMode.OVERRIDE)
176        return "override";
177      return "?";
178      }
179    public String toSystem(SystemVersionProcessingMode code) {
180      return code.getSystem();
181      }
182    }
183
184    @Block()
185    public static class ExpansionProfileFixedVersionComponent extends BackboneElement implements IBaseBackboneElement {
186        /**
187         * The specific system for which to fix the version.
188         */
189        @Child(name = "system", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
190        @Description(shortDefinition="System to have its version fixed", formalDefinition="The specific system for which to fix the version." )
191        protected UriType system;
192
193        /**
194         * The version of the code system from which codes in the expansion should be included.
195         */
196        @Child(name = "version", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=true)
197        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system from which codes in the expansion should be included." )
198        protected StringType version;
199
200        /**
201         * How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
202         */
203        @Child(name = "mode", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
204        @Description(shortDefinition="default | check | override", formalDefinition="How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile." )
205        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/system-version-processing-mode")
206        protected Enumeration<SystemVersionProcessingMode> mode;
207
208        private static final long serialVersionUID = 1818466753L;
209
210    /**
211     * Constructor
212     */
213      public ExpansionProfileFixedVersionComponent() {
214        super();
215      }
216
217    /**
218     * Constructor
219     */
220      public ExpansionProfileFixedVersionComponent(UriType system, StringType version, Enumeration<SystemVersionProcessingMode> mode) {
221        super();
222        this.system = system;
223        this.version = version;
224        this.mode = mode;
225      }
226
227        /**
228         * @return {@link #system} (The specific system for which to fix the version.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
229         */
230        public UriType getSystemElement() { 
231          if (this.system == null)
232            if (Configuration.errorOnAutoCreate())
233              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.system");
234            else if (Configuration.doAutoCreate())
235              this.system = new UriType(); // bb
236          return this.system;
237        }
238
239        public boolean hasSystemElement() { 
240          return this.system != null && !this.system.isEmpty();
241        }
242
243        public boolean hasSystem() { 
244          return this.system != null && !this.system.isEmpty();
245        }
246
247        /**
248         * @param value {@link #system} (The specific system for which to fix the version.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
249         */
250        public ExpansionProfileFixedVersionComponent setSystemElement(UriType value) { 
251          this.system = value;
252          return this;
253        }
254
255        /**
256         * @return The specific system for which to fix the version.
257         */
258        public String getSystem() { 
259          return this.system == null ? null : this.system.getValue();
260        }
261
262        /**
263         * @param value The specific system for which to fix the version.
264         */
265        public ExpansionProfileFixedVersionComponent setSystem(String value) { 
266            if (this.system == null)
267              this.system = new UriType();
268            this.system.setValue(value);
269          return this;
270        }
271
272        /**
273         * @return {@link #version} (The version of the code system from which codes in the expansion should be included.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
274         */
275        public StringType getVersionElement() { 
276          if (this.version == null)
277            if (Configuration.errorOnAutoCreate())
278              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.version");
279            else if (Configuration.doAutoCreate())
280              this.version = new StringType(); // bb
281          return this.version;
282        }
283
284        public boolean hasVersionElement() { 
285          return this.version != null && !this.version.isEmpty();
286        }
287
288        public boolean hasVersion() { 
289          return this.version != null && !this.version.isEmpty();
290        }
291
292        /**
293         * @param value {@link #version} (The version of the code system from which codes in the expansion should be included.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
294         */
295        public ExpansionProfileFixedVersionComponent setVersionElement(StringType value) { 
296          this.version = value;
297          return this;
298        }
299
300        /**
301         * @return The version of the code system from which codes in the expansion should be included.
302         */
303        public String getVersion() { 
304          return this.version == null ? null : this.version.getValue();
305        }
306
307        /**
308         * @param value The version of the code system from which codes in the expansion should be included.
309         */
310        public ExpansionProfileFixedVersionComponent setVersion(String value) { 
311            if (this.version == null)
312              this.version = new StringType();
313            this.version.setValue(value);
314          return this;
315        }
316
317        /**
318         * @return {@link #mode} (How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
319         */
320        public Enumeration<SystemVersionProcessingMode> getModeElement() { 
321          if (this.mode == null)
322            if (Configuration.errorOnAutoCreate())
323              throw new Error("Attempt to auto-create ExpansionProfileFixedVersionComponent.mode");
324            else if (Configuration.doAutoCreate())
325              this.mode = new Enumeration<SystemVersionProcessingMode>(new SystemVersionProcessingModeEnumFactory()); // bb
326          return this.mode;
327        }
328
329        public boolean hasModeElement() { 
330          return this.mode != null && !this.mode.isEmpty();
331        }
332
333        public boolean hasMode() { 
334          return this.mode != null && !this.mode.isEmpty();
335        }
336
337        /**
338         * @param value {@link #mode} (How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
339         */
340        public ExpansionProfileFixedVersionComponent setModeElement(Enumeration<SystemVersionProcessingMode> value) { 
341          this.mode = value;
342          return this;
343        }
344
345        /**
346         * @return How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
347         */
348        public SystemVersionProcessingMode getMode() { 
349          return this.mode == null ? null : this.mode.getValue();
350        }
351
352        /**
353         * @param value How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.
354         */
355        public ExpansionProfileFixedVersionComponent setMode(SystemVersionProcessingMode value) { 
356            if (this.mode == null)
357              this.mode = new Enumeration<SystemVersionProcessingMode>(new SystemVersionProcessingModeEnumFactory());
358            this.mode.setValue(value);
359          return this;
360        }
361
362        protected void listChildren(List<Property> children) {
363          super.listChildren(children);
364          children.add(new Property("system", "uri", "The specific system for which to fix the version.", 0, 1, system));
365          children.add(new Property("version", "string", "The version of the code system from which codes in the expansion should be included.", 0, 1, version));
366          children.add(new Property("mode", "code", "How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.", 0, 1, mode));
367        }
368
369        @Override
370        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
371          switch (_hash) {
372          case -887328209: /*system*/  return new Property("system", "uri", "The specific system for which to fix the version.", 0, 1, system);
373          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system from which codes in the expansion should be included.", 0, 1, version);
374          case 3357091: /*mode*/  return new Property("mode", "code", "How to manage the intersection between a fixed version in a value set, and this fixed version of the system in the expansion profile.", 0, 1, mode);
375          default: return super.getNamedProperty(_hash, _name, _checkValid);
376          }
377
378        }
379
380      @Override
381      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
382        switch (hash) {
383        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
384        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
385        case 3357091: /*mode*/ return this.mode == null ? new Base[0] : new Base[] {this.mode}; // Enumeration<SystemVersionProcessingMode>
386        default: return super.getProperty(hash, name, checkValid);
387        }
388
389      }
390
391      @Override
392      public Base setProperty(int hash, String name, Base value) throws FHIRException {
393        switch (hash) {
394        case -887328209: // system
395          this.system = castToUri(value); // UriType
396          return value;
397        case 351608024: // version
398          this.version = castToString(value); // StringType
399          return value;
400        case 3357091: // mode
401          value = new SystemVersionProcessingModeEnumFactory().fromType(castToCode(value));
402          this.mode = (Enumeration) value; // Enumeration<SystemVersionProcessingMode>
403          return value;
404        default: return super.setProperty(hash, name, value);
405        }
406
407      }
408
409      @Override
410      public Base setProperty(String name, Base value) throws FHIRException {
411        if (name.equals("system")) {
412          this.system = castToUri(value); // UriType
413        } else if (name.equals("version")) {
414          this.version = castToString(value); // StringType
415        } else if (name.equals("mode")) {
416          value = new SystemVersionProcessingModeEnumFactory().fromType(castToCode(value));
417          this.mode = (Enumeration) value; // Enumeration<SystemVersionProcessingMode>
418        } else
419          return super.setProperty(name, value);
420        return value;
421      }
422
423      @Override
424      public Base makeProperty(int hash, String name) throws FHIRException {
425        switch (hash) {
426        case -887328209:  return getSystemElement();
427        case 351608024:  return getVersionElement();
428        case 3357091:  return getModeElement();
429        default: return super.makeProperty(hash, name);
430        }
431
432      }
433
434      @Override
435      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
436        switch (hash) {
437        case -887328209: /*system*/ return new String[] {"uri"};
438        case 351608024: /*version*/ return new String[] {"string"};
439        case 3357091: /*mode*/ return new String[] {"code"};
440        default: return super.getTypesForProperty(hash, name);
441        }
442
443      }
444
445      @Override
446      public Base addChild(String name) throws FHIRException {
447        if (name.equals("system")) {
448          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.system");
449        }
450        else if (name.equals("version")) {
451          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
452        }
453        else if (name.equals("mode")) {
454          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.mode");
455        }
456        else
457          return super.addChild(name);
458      }
459
460      public ExpansionProfileFixedVersionComponent copy() {
461        ExpansionProfileFixedVersionComponent dst = new ExpansionProfileFixedVersionComponent();
462        copyValues(dst);
463        dst.system = system == null ? null : system.copy();
464        dst.version = version == null ? null : version.copy();
465        dst.mode = mode == null ? null : mode.copy();
466        return dst;
467      }
468
469      @Override
470      public boolean equalsDeep(Base other_) {
471        if (!super.equalsDeep(other_))
472          return false;
473        if (!(other_ instanceof ExpansionProfileFixedVersionComponent))
474          return false;
475        ExpansionProfileFixedVersionComponent o = (ExpansionProfileFixedVersionComponent) other_;
476        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(mode, o.mode, true)
477          ;
478      }
479
480      @Override
481      public boolean equalsShallow(Base other_) {
482        if (!super.equalsShallow(other_))
483          return false;
484        if (!(other_ instanceof ExpansionProfileFixedVersionComponent))
485          return false;
486        ExpansionProfileFixedVersionComponent o = (ExpansionProfileFixedVersionComponent) other_;
487        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(mode, o.mode, true)
488          ;
489      }
490
491      public boolean isEmpty() {
492        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version, mode);
493      }
494
495  public String fhirType() {
496    return "ExpansionProfile.fixedVersion";
497
498  }
499
500  }
501
502    @Block()
503    public static class ExpansionProfileExcludedSystemComponent extends BackboneElement implements IBaseBackboneElement {
504        /**
505         * An absolute URI which is the code system to be excluded.
506         */
507        @Child(name = "system", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=true)
508        @Description(shortDefinition="The specific code system to be excluded", formalDefinition="An absolute URI which is the code system to be excluded." )
509        protected UriType system;
510
511        /**
512         * The version of the code system from which codes in the expansion should be excluded.
513         */
514        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
515        @Description(shortDefinition="Specific version of the code system referred to", formalDefinition="The version of the code system from which codes in the expansion should be excluded." )
516        protected StringType version;
517
518        private static final long serialVersionUID = 1145288774L;
519
520    /**
521     * Constructor
522     */
523      public ExpansionProfileExcludedSystemComponent() {
524        super();
525      }
526
527    /**
528     * Constructor
529     */
530      public ExpansionProfileExcludedSystemComponent(UriType system) {
531        super();
532        this.system = system;
533      }
534
535        /**
536         * @return {@link #system} (An absolute URI which is the code system to be excluded.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
537         */
538        public UriType getSystemElement() { 
539          if (this.system == null)
540            if (Configuration.errorOnAutoCreate())
541              throw new Error("Attempt to auto-create ExpansionProfileExcludedSystemComponent.system");
542            else if (Configuration.doAutoCreate())
543              this.system = new UriType(); // bb
544          return this.system;
545        }
546
547        public boolean hasSystemElement() { 
548          return this.system != null && !this.system.isEmpty();
549        }
550
551        public boolean hasSystem() { 
552          return this.system != null && !this.system.isEmpty();
553        }
554
555        /**
556         * @param value {@link #system} (An absolute URI which is the code system to be excluded.). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
557         */
558        public ExpansionProfileExcludedSystemComponent setSystemElement(UriType value) { 
559          this.system = value;
560          return this;
561        }
562
563        /**
564         * @return An absolute URI which is the code system to be excluded.
565         */
566        public String getSystem() { 
567          return this.system == null ? null : this.system.getValue();
568        }
569
570        /**
571         * @param value An absolute URI which is the code system to be excluded.
572         */
573        public ExpansionProfileExcludedSystemComponent setSystem(String value) { 
574            if (this.system == null)
575              this.system = new UriType();
576            this.system.setValue(value);
577          return this;
578        }
579
580        /**
581         * @return {@link #version} (The version of the code system from which codes in the expansion should be excluded.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
582         */
583        public StringType getVersionElement() { 
584          if (this.version == null)
585            if (Configuration.errorOnAutoCreate())
586              throw new Error("Attempt to auto-create ExpansionProfileExcludedSystemComponent.version");
587            else if (Configuration.doAutoCreate())
588              this.version = new StringType(); // bb
589          return this.version;
590        }
591
592        public boolean hasVersionElement() { 
593          return this.version != null && !this.version.isEmpty();
594        }
595
596        public boolean hasVersion() { 
597          return this.version != null && !this.version.isEmpty();
598        }
599
600        /**
601         * @param value {@link #version} (The version of the code system from which codes in the expansion should be excluded.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
602         */
603        public ExpansionProfileExcludedSystemComponent setVersionElement(StringType value) { 
604          this.version = value;
605          return this;
606        }
607
608        /**
609         * @return The version of the code system from which codes in the expansion should be excluded.
610         */
611        public String getVersion() { 
612          return this.version == null ? null : this.version.getValue();
613        }
614
615        /**
616         * @param value The version of the code system from which codes in the expansion should be excluded.
617         */
618        public ExpansionProfileExcludedSystemComponent setVersion(String value) { 
619          if (Utilities.noString(value))
620            this.version = null;
621          else {
622            if (this.version == null)
623              this.version = new StringType();
624            this.version.setValue(value);
625          }
626          return this;
627        }
628
629        protected void listChildren(List<Property> children) {
630          super.listChildren(children);
631          children.add(new Property("system", "uri", "An absolute URI which is the code system to be excluded.", 0, 1, system));
632          children.add(new Property("version", "string", "The version of the code system from which codes in the expansion should be excluded.", 0, 1, version));
633        }
634
635        @Override
636        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
637          switch (_hash) {
638          case -887328209: /*system*/  return new Property("system", "uri", "An absolute URI which is the code system to be excluded.", 0, 1, system);
639          case 351608024: /*version*/  return new Property("version", "string", "The version of the code system from which codes in the expansion should be excluded.", 0, 1, version);
640          default: return super.getNamedProperty(_hash, _name, _checkValid);
641          }
642
643        }
644
645      @Override
646      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
647        switch (hash) {
648        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
649        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
650        default: return super.getProperty(hash, name, checkValid);
651        }
652
653      }
654
655      @Override
656      public Base setProperty(int hash, String name, Base value) throws FHIRException {
657        switch (hash) {
658        case -887328209: // system
659          this.system = castToUri(value); // UriType
660          return value;
661        case 351608024: // version
662          this.version = castToString(value); // StringType
663          return value;
664        default: return super.setProperty(hash, name, value);
665        }
666
667      }
668
669      @Override
670      public Base setProperty(String name, Base value) throws FHIRException {
671        if (name.equals("system")) {
672          this.system = castToUri(value); // UriType
673        } else if (name.equals("version")) {
674          this.version = castToString(value); // StringType
675        } else
676          return super.setProperty(name, value);
677        return value;
678      }
679
680      @Override
681      public Base makeProperty(int hash, String name) throws FHIRException {
682        switch (hash) {
683        case -887328209:  return getSystemElement();
684        case 351608024:  return getVersionElement();
685        default: return super.makeProperty(hash, name);
686        }
687
688      }
689
690      @Override
691      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
692        switch (hash) {
693        case -887328209: /*system*/ return new String[] {"uri"};
694        case 351608024: /*version*/ return new String[] {"string"};
695        default: return super.getTypesForProperty(hash, name);
696        }
697
698      }
699
700      @Override
701      public Base addChild(String name) throws FHIRException {
702        if (name.equals("system")) {
703          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.system");
704        }
705        else if (name.equals("version")) {
706          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
707        }
708        else
709          return super.addChild(name);
710      }
711
712      public ExpansionProfileExcludedSystemComponent copy() {
713        ExpansionProfileExcludedSystemComponent dst = new ExpansionProfileExcludedSystemComponent();
714        copyValues(dst);
715        dst.system = system == null ? null : system.copy();
716        dst.version = version == null ? null : version.copy();
717        return dst;
718      }
719
720      @Override
721      public boolean equalsDeep(Base other_) {
722        if (!super.equalsDeep(other_))
723          return false;
724        if (!(other_ instanceof ExpansionProfileExcludedSystemComponent))
725          return false;
726        ExpansionProfileExcludedSystemComponent o = (ExpansionProfileExcludedSystemComponent) other_;
727        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true);
728      }
729
730      @Override
731      public boolean equalsShallow(Base other_) {
732        if (!super.equalsShallow(other_))
733          return false;
734        if (!(other_ instanceof ExpansionProfileExcludedSystemComponent))
735          return false;
736        ExpansionProfileExcludedSystemComponent o = (ExpansionProfileExcludedSystemComponent) other_;
737        return compareValues(system, o.system, true) && compareValues(version, o.version, true);
738      }
739
740      public boolean isEmpty() {
741        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(system, version);
742      }
743
744  public String fhirType() {
745    return "ExpansionProfile.excludedSystem";
746
747  }
748
749  }
750
751    @Block()
752    public static class ExpansionProfileDesignationComponent extends BackboneElement implements IBaseBackboneElement {
753        /**
754         * Designations to be included.
755         */
756        @Child(name = "include", type = {}, order=1, min=0, max=1, modifier=false, summary=true)
757        @Description(shortDefinition="Designations to be included", formalDefinition="Designations to be included." )
758        protected DesignationIncludeComponent include;
759
760        /**
761         * Designations to be excluded.
762         */
763        @Child(name = "exclude", type = {}, order=2, min=0, max=1, modifier=false, summary=true)
764        @Description(shortDefinition="Designations to be excluded", formalDefinition="Designations to be excluded." )
765        protected DesignationExcludeComponent exclude;
766
767        private static final long serialVersionUID = -2080476436L;
768
769    /**
770     * Constructor
771     */
772      public ExpansionProfileDesignationComponent() {
773        super();
774      }
775
776        /**
777         * @return {@link #include} (Designations to be included.)
778         */
779        public DesignationIncludeComponent getInclude() { 
780          if (this.include == null)
781            if (Configuration.errorOnAutoCreate())
782              throw new Error("Attempt to auto-create ExpansionProfileDesignationComponent.include");
783            else if (Configuration.doAutoCreate())
784              this.include = new DesignationIncludeComponent(); // cc
785          return this.include;
786        }
787
788        public boolean hasInclude() { 
789          return this.include != null && !this.include.isEmpty();
790        }
791
792        /**
793         * @param value {@link #include} (Designations to be included.)
794         */
795        public ExpansionProfileDesignationComponent setInclude(DesignationIncludeComponent value)  { 
796          this.include = value;
797          return this;
798        }
799
800        /**
801         * @return {@link #exclude} (Designations to be excluded.)
802         */
803        public DesignationExcludeComponent getExclude() { 
804          if (this.exclude == null)
805            if (Configuration.errorOnAutoCreate())
806              throw new Error("Attempt to auto-create ExpansionProfileDesignationComponent.exclude");
807            else if (Configuration.doAutoCreate())
808              this.exclude = new DesignationExcludeComponent(); // cc
809          return this.exclude;
810        }
811
812        public boolean hasExclude() { 
813          return this.exclude != null && !this.exclude.isEmpty();
814        }
815
816        /**
817         * @param value {@link #exclude} (Designations to be excluded.)
818         */
819        public ExpansionProfileDesignationComponent setExclude(DesignationExcludeComponent value)  { 
820          this.exclude = value;
821          return this;
822        }
823
824        protected void listChildren(List<Property> children) {
825          super.listChildren(children);
826          children.add(new Property("include", "", "Designations to be included.", 0, 1, include));
827          children.add(new Property("exclude", "", "Designations to be excluded.", 0, 1, exclude));
828        }
829
830        @Override
831        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
832          switch (_hash) {
833          case 1942574248: /*include*/  return new Property("include", "", "Designations to be included.", 0, 1, include);
834          case -1321148966: /*exclude*/  return new Property("exclude", "", "Designations to be excluded.", 0, 1, exclude);
835          default: return super.getNamedProperty(_hash, _name, _checkValid);
836          }
837
838        }
839
840      @Override
841      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
842        switch (hash) {
843        case 1942574248: /*include*/ return this.include == null ? new Base[0] : new Base[] {this.include}; // DesignationIncludeComponent
844        case -1321148966: /*exclude*/ return this.exclude == null ? new Base[0] : new Base[] {this.exclude}; // DesignationExcludeComponent
845        default: return super.getProperty(hash, name, checkValid);
846        }
847
848      }
849
850      @Override
851      public Base setProperty(int hash, String name, Base value) throws FHIRException {
852        switch (hash) {
853        case 1942574248: // include
854          this.include = (DesignationIncludeComponent) value; // DesignationIncludeComponent
855          return value;
856        case -1321148966: // exclude
857          this.exclude = (DesignationExcludeComponent) value; // DesignationExcludeComponent
858          return value;
859        default: return super.setProperty(hash, name, value);
860        }
861
862      }
863
864      @Override
865      public Base setProperty(String name, Base value) throws FHIRException {
866        if (name.equals("include")) {
867          this.include = (DesignationIncludeComponent) value; // DesignationIncludeComponent
868        } else if (name.equals("exclude")) {
869          this.exclude = (DesignationExcludeComponent) value; // DesignationExcludeComponent
870        } else
871          return super.setProperty(name, value);
872        return value;
873      }
874
875      @Override
876      public Base makeProperty(int hash, String name) throws FHIRException {
877        switch (hash) {
878        case 1942574248:  return getInclude(); 
879        case -1321148966:  return getExclude(); 
880        default: return super.makeProperty(hash, name);
881        }
882
883      }
884
885      @Override
886      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
887        switch (hash) {
888        case 1942574248: /*include*/ return new String[] {};
889        case -1321148966: /*exclude*/ return new String[] {};
890        default: return super.getTypesForProperty(hash, name);
891        }
892
893      }
894
895      @Override
896      public Base addChild(String name) throws FHIRException {
897        if (name.equals("include")) {
898          this.include = new DesignationIncludeComponent();
899          return this.include;
900        }
901        else if (name.equals("exclude")) {
902          this.exclude = new DesignationExcludeComponent();
903          return this.exclude;
904        }
905        else
906          return super.addChild(name);
907      }
908
909      public ExpansionProfileDesignationComponent copy() {
910        ExpansionProfileDesignationComponent dst = new ExpansionProfileDesignationComponent();
911        copyValues(dst);
912        dst.include = include == null ? null : include.copy();
913        dst.exclude = exclude == null ? null : exclude.copy();
914        return dst;
915      }
916
917      @Override
918      public boolean equalsDeep(Base other_) {
919        if (!super.equalsDeep(other_))
920          return false;
921        if (!(other_ instanceof ExpansionProfileDesignationComponent))
922          return false;
923        ExpansionProfileDesignationComponent o = (ExpansionProfileDesignationComponent) other_;
924        return compareDeep(include, o.include, true) && compareDeep(exclude, o.exclude, true);
925      }
926
927      @Override
928      public boolean equalsShallow(Base other_) {
929        if (!super.equalsShallow(other_))
930          return false;
931        if (!(other_ instanceof ExpansionProfileDesignationComponent))
932          return false;
933        ExpansionProfileDesignationComponent o = (ExpansionProfileDesignationComponent) other_;
934        return true;
935      }
936
937      public boolean isEmpty() {
938        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(include, exclude);
939      }
940
941  public String fhirType() {
942    return "ExpansionProfile.designation";
943
944  }
945
946  }
947
948    @Block()
949    public static class DesignationIncludeComponent extends BackboneElement implements IBaseBackboneElement {
950        /**
951         * A data group for each designation to be included.
952         */
953        @Child(name = "designation", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
954        @Description(shortDefinition="The designation to be included", formalDefinition="A data group for each designation to be included." )
955        protected List<DesignationIncludeDesignationComponent> designation;
956
957        private static final long serialVersionUID = -1989669274L;
958
959    /**
960     * Constructor
961     */
962      public DesignationIncludeComponent() {
963        super();
964      }
965
966        /**
967         * @return {@link #designation} (A data group for each designation to be included.)
968         */
969        public List<DesignationIncludeDesignationComponent> getDesignation() { 
970          if (this.designation == null)
971            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
972          return this.designation;
973        }
974
975        /**
976         * @return Returns a reference to <code>this</code> for easy method chaining
977         */
978        public DesignationIncludeComponent setDesignation(List<DesignationIncludeDesignationComponent> theDesignation) { 
979          this.designation = theDesignation;
980          return this;
981        }
982
983        public boolean hasDesignation() { 
984          if (this.designation == null)
985            return false;
986          for (DesignationIncludeDesignationComponent item : this.designation)
987            if (!item.isEmpty())
988              return true;
989          return false;
990        }
991
992        public DesignationIncludeDesignationComponent addDesignation() { //3
993          DesignationIncludeDesignationComponent t = new DesignationIncludeDesignationComponent();
994          if (this.designation == null)
995            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
996          this.designation.add(t);
997          return t;
998        }
999
1000        public DesignationIncludeComponent addDesignation(DesignationIncludeDesignationComponent t) { //3
1001          if (t == null)
1002            return this;
1003          if (this.designation == null)
1004            this.designation = new ArrayList<DesignationIncludeDesignationComponent>();
1005          this.designation.add(t);
1006          return this;
1007        }
1008
1009        /**
1010         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist
1011         */
1012        public DesignationIncludeDesignationComponent getDesignationFirstRep() { 
1013          if (getDesignation().isEmpty()) {
1014            addDesignation();
1015          }
1016          return getDesignation().get(0);
1017        }
1018
1019        protected void listChildren(List<Property> children) {
1020          super.listChildren(children);
1021          children.add(new Property("designation", "", "A data group for each designation to be included.", 0, java.lang.Integer.MAX_VALUE, designation));
1022        }
1023
1024        @Override
1025        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1026          switch (_hash) {
1027          case -900931593: /*designation*/  return new Property("designation", "", "A data group for each designation to be included.", 0, java.lang.Integer.MAX_VALUE, designation);
1028          default: return super.getNamedProperty(_hash, _name, _checkValid);
1029          }
1030
1031        }
1032
1033      @Override
1034      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1035        switch (hash) {
1036        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // DesignationIncludeDesignationComponent
1037        default: return super.getProperty(hash, name, checkValid);
1038        }
1039
1040      }
1041
1042      @Override
1043      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1044        switch (hash) {
1045        case -900931593: // designation
1046          this.getDesignation().add((DesignationIncludeDesignationComponent) value); // DesignationIncludeDesignationComponent
1047          return value;
1048        default: return super.setProperty(hash, name, value);
1049        }
1050
1051      }
1052
1053      @Override
1054      public Base setProperty(String name, Base value) throws FHIRException {
1055        if (name.equals("designation")) {
1056          this.getDesignation().add((DesignationIncludeDesignationComponent) value);
1057        } else
1058          return super.setProperty(name, value);
1059        return value;
1060      }
1061
1062      @Override
1063      public Base makeProperty(int hash, String name) throws FHIRException {
1064        switch (hash) {
1065        case -900931593:  return addDesignation(); 
1066        default: return super.makeProperty(hash, name);
1067        }
1068
1069      }
1070
1071      @Override
1072      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1073        switch (hash) {
1074        case -900931593: /*designation*/ return new String[] {};
1075        default: return super.getTypesForProperty(hash, name);
1076        }
1077
1078      }
1079
1080      @Override
1081      public Base addChild(String name) throws FHIRException {
1082        if (name.equals("designation")) {
1083          return addDesignation();
1084        }
1085        else
1086          return super.addChild(name);
1087      }
1088
1089      public DesignationIncludeComponent copy() {
1090        DesignationIncludeComponent dst = new DesignationIncludeComponent();
1091        copyValues(dst);
1092        if (designation != null) {
1093          dst.designation = new ArrayList<DesignationIncludeDesignationComponent>();
1094          for (DesignationIncludeDesignationComponent i : designation)
1095            dst.designation.add(i.copy());
1096        };
1097        return dst;
1098      }
1099
1100      @Override
1101      public boolean equalsDeep(Base other_) {
1102        if (!super.equalsDeep(other_))
1103          return false;
1104        if (!(other_ instanceof DesignationIncludeComponent))
1105          return false;
1106        DesignationIncludeComponent o = (DesignationIncludeComponent) other_;
1107        return compareDeep(designation, o.designation, true);
1108      }
1109
1110      @Override
1111      public boolean equalsShallow(Base other_) {
1112        if (!super.equalsShallow(other_))
1113          return false;
1114        if (!(other_ instanceof DesignationIncludeComponent))
1115          return false;
1116        DesignationIncludeComponent o = (DesignationIncludeComponent) other_;
1117        return true;
1118      }
1119
1120      public boolean isEmpty() {
1121        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(designation);
1122      }
1123
1124  public String fhirType() {
1125    return "ExpansionProfile.designation.include";
1126
1127  }
1128
1129  }
1130
1131    @Block()
1132    public static class DesignationIncludeDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1133        /**
1134         * The language this designation is defined for.
1135         */
1136        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1137        @Description(shortDefinition="Human language of the designation to be included", formalDefinition="The language this designation is defined for." )
1138        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1139        protected CodeType language;
1140
1141        /**
1142         * Which kinds of designation to include in the expansion.
1143         */
1144        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=true)
1145        @Description(shortDefinition="What kind of Designation to include", formalDefinition="Which kinds of designation to include in the expansion." )
1146        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1147        protected Coding use;
1148
1149        private static final long serialVersionUID = 242239292L;
1150
1151    /**
1152     * Constructor
1153     */
1154      public DesignationIncludeDesignationComponent() {
1155        super();
1156      }
1157
1158        /**
1159         * @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
1160         */
1161        public CodeType getLanguageElement() { 
1162          if (this.language == null)
1163            if (Configuration.errorOnAutoCreate())
1164              throw new Error("Attempt to auto-create DesignationIncludeDesignationComponent.language");
1165            else if (Configuration.doAutoCreate())
1166              this.language = new CodeType(); // bb
1167          return this.language;
1168        }
1169
1170        public boolean hasLanguageElement() { 
1171          return this.language != null && !this.language.isEmpty();
1172        }
1173
1174        public boolean hasLanguage() { 
1175          return this.language != null && !this.language.isEmpty();
1176        }
1177
1178        /**
1179         * @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
1180         */
1181        public DesignationIncludeDesignationComponent setLanguageElement(CodeType value) { 
1182          this.language = value;
1183          return this;
1184        }
1185
1186        /**
1187         * @return The language this designation is defined for.
1188         */
1189        public String getLanguage() { 
1190          return this.language == null ? null : this.language.getValue();
1191        }
1192
1193        /**
1194         * @param value The language this designation is defined for.
1195         */
1196        public DesignationIncludeDesignationComponent setLanguage(String value) { 
1197          if (Utilities.noString(value))
1198            this.language = null;
1199          else {
1200            if (this.language == null)
1201              this.language = new CodeType();
1202            this.language.setValue(value);
1203          }
1204          return this;
1205        }
1206
1207        /**
1208         * @return {@link #use} (Which kinds of designation to include in the expansion.)
1209         */
1210        public Coding getUse() { 
1211          if (this.use == null)
1212            if (Configuration.errorOnAutoCreate())
1213              throw new Error("Attempt to auto-create DesignationIncludeDesignationComponent.use");
1214            else if (Configuration.doAutoCreate())
1215              this.use = new Coding(); // cc
1216          return this.use;
1217        }
1218
1219        public boolean hasUse() { 
1220          return this.use != null && !this.use.isEmpty();
1221        }
1222
1223        /**
1224         * @param value {@link #use} (Which kinds of designation to include in the expansion.)
1225         */
1226        public DesignationIncludeDesignationComponent setUse(Coding value)  { 
1227          this.use = value;
1228          return this;
1229        }
1230
1231        protected void listChildren(List<Property> children) {
1232          super.listChildren(children);
1233          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1234          children.add(new Property("use", "Coding", "Which kinds of designation to include in the expansion.", 0, 1, use));
1235        }
1236
1237        @Override
1238        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1239          switch (_hash) {
1240          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1241          case 116103: /*use*/  return new Property("use", "Coding", "Which kinds of designation to include in the expansion.", 0, 1, use);
1242          default: return super.getNamedProperty(_hash, _name, _checkValid);
1243          }
1244
1245        }
1246
1247      @Override
1248      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1249        switch (hash) {
1250        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1251        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1252        default: return super.getProperty(hash, name, checkValid);
1253        }
1254
1255      }
1256
1257      @Override
1258      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1259        switch (hash) {
1260        case -1613589672: // language
1261          this.language = castToCode(value); // CodeType
1262          return value;
1263        case 116103: // use
1264          this.use = castToCoding(value); // Coding
1265          return value;
1266        default: return super.setProperty(hash, name, value);
1267        }
1268
1269      }
1270
1271      @Override
1272      public Base setProperty(String name, Base value) throws FHIRException {
1273        if (name.equals("language")) {
1274          this.language = castToCode(value); // CodeType
1275        } else if (name.equals("use")) {
1276          this.use = castToCoding(value); // Coding
1277        } else
1278          return super.setProperty(name, value);
1279        return value;
1280      }
1281
1282      @Override
1283      public Base makeProperty(int hash, String name) throws FHIRException {
1284        switch (hash) {
1285        case -1613589672:  return getLanguageElement();
1286        case 116103:  return getUse(); 
1287        default: return super.makeProperty(hash, name);
1288        }
1289
1290      }
1291
1292      @Override
1293      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1294        switch (hash) {
1295        case -1613589672: /*language*/ return new String[] {"code"};
1296        case 116103: /*use*/ return new String[] {"Coding"};
1297        default: return super.getTypesForProperty(hash, name);
1298        }
1299
1300      }
1301
1302      @Override
1303      public Base addChild(String name) throws FHIRException {
1304        if (name.equals("language")) {
1305          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.language");
1306        }
1307        else if (name.equals("use")) {
1308          this.use = new Coding();
1309          return this.use;
1310        }
1311        else
1312          return super.addChild(name);
1313      }
1314
1315      public DesignationIncludeDesignationComponent copy() {
1316        DesignationIncludeDesignationComponent dst = new DesignationIncludeDesignationComponent();
1317        copyValues(dst);
1318        dst.language = language == null ? null : language.copy();
1319        dst.use = use == null ? null : use.copy();
1320        return dst;
1321      }
1322
1323      @Override
1324      public boolean equalsDeep(Base other_) {
1325        if (!super.equalsDeep(other_))
1326          return false;
1327        if (!(other_ instanceof DesignationIncludeDesignationComponent))
1328          return false;
1329        DesignationIncludeDesignationComponent o = (DesignationIncludeDesignationComponent) other_;
1330        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true);
1331      }
1332
1333      @Override
1334      public boolean equalsShallow(Base other_) {
1335        if (!super.equalsShallow(other_))
1336          return false;
1337        if (!(other_ instanceof DesignationIncludeDesignationComponent))
1338          return false;
1339        DesignationIncludeDesignationComponent o = (DesignationIncludeDesignationComponent) other_;
1340        return compareValues(language, o.language, true);
1341      }
1342
1343      public boolean isEmpty() {
1344        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use);
1345      }
1346
1347  public String fhirType() {
1348    return "ExpansionProfile.designation.include.designation";
1349
1350  }
1351
1352  }
1353
1354    @Block()
1355    public static class DesignationExcludeComponent extends BackboneElement implements IBaseBackboneElement {
1356        /**
1357         * A data group for each designation to be excluded.
1358         */
1359        @Child(name = "designation", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1360        @Description(shortDefinition="The designation to be excluded", formalDefinition="A data group for each designation to be excluded." )
1361        protected List<DesignationExcludeDesignationComponent> designation;
1362
1363        private static final long serialVersionUID = 1045849752L;
1364
1365    /**
1366     * Constructor
1367     */
1368      public DesignationExcludeComponent() {
1369        super();
1370      }
1371
1372        /**
1373         * @return {@link #designation} (A data group for each designation to be excluded.)
1374         */
1375        public List<DesignationExcludeDesignationComponent> getDesignation() { 
1376          if (this.designation == null)
1377            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1378          return this.designation;
1379        }
1380
1381        /**
1382         * @return Returns a reference to <code>this</code> for easy method chaining
1383         */
1384        public DesignationExcludeComponent setDesignation(List<DesignationExcludeDesignationComponent> theDesignation) { 
1385          this.designation = theDesignation;
1386          return this;
1387        }
1388
1389        public boolean hasDesignation() { 
1390          if (this.designation == null)
1391            return false;
1392          for (DesignationExcludeDesignationComponent item : this.designation)
1393            if (!item.isEmpty())
1394              return true;
1395          return false;
1396        }
1397
1398        public DesignationExcludeDesignationComponent addDesignation() { //3
1399          DesignationExcludeDesignationComponent t = new DesignationExcludeDesignationComponent();
1400          if (this.designation == null)
1401            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1402          this.designation.add(t);
1403          return t;
1404        }
1405
1406        public DesignationExcludeComponent addDesignation(DesignationExcludeDesignationComponent t) { //3
1407          if (t == null)
1408            return this;
1409          if (this.designation == null)
1410            this.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1411          this.designation.add(t);
1412          return this;
1413        }
1414
1415        /**
1416         * @return The first repetition of repeating field {@link #designation}, creating it if it does not already exist
1417         */
1418        public DesignationExcludeDesignationComponent getDesignationFirstRep() { 
1419          if (getDesignation().isEmpty()) {
1420            addDesignation();
1421          }
1422          return getDesignation().get(0);
1423        }
1424
1425        protected void listChildren(List<Property> children) {
1426          super.listChildren(children);
1427          children.add(new Property("designation", "", "A data group for each designation to be excluded.", 0, java.lang.Integer.MAX_VALUE, designation));
1428        }
1429
1430        @Override
1431        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1432          switch (_hash) {
1433          case -900931593: /*designation*/  return new Property("designation", "", "A data group for each designation to be excluded.", 0, java.lang.Integer.MAX_VALUE, designation);
1434          default: return super.getNamedProperty(_hash, _name, _checkValid);
1435          }
1436
1437        }
1438
1439      @Override
1440      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1441        switch (hash) {
1442        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : this.designation.toArray(new Base[this.designation.size()]); // DesignationExcludeDesignationComponent
1443        default: return super.getProperty(hash, name, checkValid);
1444        }
1445
1446      }
1447
1448      @Override
1449      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1450        switch (hash) {
1451        case -900931593: // designation
1452          this.getDesignation().add((DesignationExcludeDesignationComponent) value); // DesignationExcludeDesignationComponent
1453          return value;
1454        default: return super.setProperty(hash, name, value);
1455        }
1456
1457      }
1458
1459      @Override
1460      public Base setProperty(String name, Base value) throws FHIRException {
1461        if (name.equals("designation")) {
1462          this.getDesignation().add((DesignationExcludeDesignationComponent) value);
1463        } else
1464          return super.setProperty(name, value);
1465        return value;
1466      }
1467
1468      @Override
1469      public Base makeProperty(int hash, String name) throws FHIRException {
1470        switch (hash) {
1471        case -900931593:  return addDesignation(); 
1472        default: return super.makeProperty(hash, name);
1473        }
1474
1475      }
1476
1477      @Override
1478      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1479        switch (hash) {
1480        case -900931593: /*designation*/ return new String[] {};
1481        default: return super.getTypesForProperty(hash, name);
1482        }
1483
1484      }
1485
1486      @Override
1487      public Base addChild(String name) throws FHIRException {
1488        if (name.equals("designation")) {
1489          return addDesignation();
1490        }
1491        else
1492          return super.addChild(name);
1493      }
1494
1495      public DesignationExcludeComponent copy() {
1496        DesignationExcludeComponent dst = new DesignationExcludeComponent();
1497        copyValues(dst);
1498        if (designation != null) {
1499          dst.designation = new ArrayList<DesignationExcludeDesignationComponent>();
1500          for (DesignationExcludeDesignationComponent i : designation)
1501            dst.designation.add(i.copy());
1502        };
1503        return dst;
1504      }
1505
1506      @Override
1507      public boolean equalsDeep(Base other_) {
1508        if (!super.equalsDeep(other_))
1509          return false;
1510        if (!(other_ instanceof DesignationExcludeComponent))
1511          return false;
1512        DesignationExcludeComponent o = (DesignationExcludeComponent) other_;
1513        return compareDeep(designation, o.designation, true);
1514      }
1515
1516      @Override
1517      public boolean equalsShallow(Base other_) {
1518        if (!super.equalsShallow(other_))
1519          return false;
1520        if (!(other_ instanceof DesignationExcludeComponent))
1521          return false;
1522        DesignationExcludeComponent o = (DesignationExcludeComponent) other_;
1523        return true;
1524      }
1525
1526      public boolean isEmpty() {
1527        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(designation);
1528      }
1529
1530  public String fhirType() {
1531    return "ExpansionProfile.designation.exclude";
1532
1533  }
1534
1535  }
1536
1537    @Block()
1538    public static class DesignationExcludeDesignationComponent extends BackboneElement implements IBaseBackboneElement {
1539        /**
1540         * The language this designation is defined for.
1541         */
1542        @Child(name = "language", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1543        @Description(shortDefinition="Human language of the designation to be excluded", formalDefinition="The language this designation is defined for." )
1544        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1545        protected CodeType language;
1546
1547        /**
1548         * Which kinds of designation to exclude from the expansion.
1549         */
1550        @Child(name = "use", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=true)
1551        @Description(shortDefinition="What kind of Designation to exclude", formalDefinition="Which kinds of designation to exclude from the expansion." )
1552        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/designation-use")
1553        protected Coding use;
1554
1555        private static final long serialVersionUID = 242239292L;
1556
1557    /**
1558     * Constructor
1559     */
1560      public DesignationExcludeDesignationComponent() {
1561        super();
1562      }
1563
1564        /**
1565         * @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
1566         */
1567        public CodeType getLanguageElement() { 
1568          if (this.language == null)
1569            if (Configuration.errorOnAutoCreate())
1570              throw new Error("Attempt to auto-create DesignationExcludeDesignationComponent.language");
1571            else if (Configuration.doAutoCreate())
1572              this.language = new CodeType(); // bb
1573          return this.language;
1574        }
1575
1576        public boolean hasLanguageElement() { 
1577          return this.language != null && !this.language.isEmpty();
1578        }
1579
1580        public boolean hasLanguage() { 
1581          return this.language != null && !this.language.isEmpty();
1582        }
1583
1584        /**
1585         * @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
1586         */
1587        public DesignationExcludeDesignationComponent setLanguageElement(CodeType value) { 
1588          this.language = value;
1589          return this;
1590        }
1591
1592        /**
1593         * @return The language this designation is defined for.
1594         */
1595        public String getLanguage() { 
1596          return this.language == null ? null : this.language.getValue();
1597        }
1598
1599        /**
1600         * @param value The language this designation is defined for.
1601         */
1602        public DesignationExcludeDesignationComponent setLanguage(String value) { 
1603          if (Utilities.noString(value))
1604            this.language = null;
1605          else {
1606            if (this.language == null)
1607              this.language = new CodeType();
1608            this.language.setValue(value);
1609          }
1610          return this;
1611        }
1612
1613        /**
1614         * @return {@link #use} (Which kinds of designation to exclude from the expansion.)
1615         */
1616        public Coding getUse() { 
1617          if (this.use == null)
1618            if (Configuration.errorOnAutoCreate())
1619              throw new Error("Attempt to auto-create DesignationExcludeDesignationComponent.use");
1620            else if (Configuration.doAutoCreate())
1621              this.use = new Coding(); // cc
1622          return this.use;
1623        }
1624
1625        public boolean hasUse() { 
1626          return this.use != null && !this.use.isEmpty();
1627        }
1628
1629        /**
1630         * @param value {@link #use} (Which kinds of designation to exclude from the expansion.)
1631         */
1632        public DesignationExcludeDesignationComponent setUse(Coding value)  { 
1633          this.use = value;
1634          return this;
1635        }
1636
1637        protected void listChildren(List<Property> children) {
1638          super.listChildren(children);
1639          children.add(new Property("language", "code", "The language this designation is defined for.", 0, 1, language));
1640          children.add(new Property("use", "Coding", "Which kinds of designation to exclude from the expansion.", 0, 1, use));
1641        }
1642
1643        @Override
1644        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1645          switch (_hash) {
1646          case -1613589672: /*language*/  return new Property("language", "code", "The language this designation is defined for.", 0, 1, language);
1647          case 116103: /*use*/  return new Property("use", "Coding", "Which kinds of designation to exclude from the expansion.", 0, 1, use);
1648          default: return super.getNamedProperty(_hash, _name, _checkValid);
1649          }
1650
1651        }
1652
1653      @Override
1654      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1655        switch (hash) {
1656        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeType
1657        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Coding
1658        default: return super.getProperty(hash, name, checkValid);
1659        }
1660
1661      }
1662
1663      @Override
1664      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1665        switch (hash) {
1666        case -1613589672: // language
1667          this.language = castToCode(value); // CodeType
1668          return value;
1669        case 116103: // use
1670          this.use = castToCoding(value); // Coding
1671          return value;
1672        default: return super.setProperty(hash, name, value);
1673        }
1674
1675      }
1676
1677      @Override
1678      public Base setProperty(String name, Base value) throws FHIRException {
1679        if (name.equals("language")) {
1680          this.language = castToCode(value); // CodeType
1681        } else if (name.equals("use")) {
1682          this.use = castToCoding(value); // Coding
1683        } else
1684          return super.setProperty(name, value);
1685        return value;
1686      }
1687
1688      @Override
1689      public Base makeProperty(int hash, String name) throws FHIRException {
1690        switch (hash) {
1691        case -1613589672:  return getLanguageElement();
1692        case 116103:  return getUse(); 
1693        default: return super.makeProperty(hash, name);
1694        }
1695
1696      }
1697
1698      @Override
1699      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1700        switch (hash) {
1701        case -1613589672: /*language*/ return new String[] {"code"};
1702        case 116103: /*use*/ return new String[] {"Coding"};
1703        default: return super.getTypesForProperty(hash, name);
1704        }
1705
1706      }
1707
1708      @Override
1709      public Base addChild(String name) throws FHIRException {
1710        if (name.equals("language")) {
1711          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.language");
1712        }
1713        else if (name.equals("use")) {
1714          this.use = new Coding();
1715          return this.use;
1716        }
1717        else
1718          return super.addChild(name);
1719      }
1720
1721      public DesignationExcludeDesignationComponent copy() {
1722        DesignationExcludeDesignationComponent dst = new DesignationExcludeDesignationComponent();
1723        copyValues(dst);
1724        dst.language = language == null ? null : language.copy();
1725        dst.use = use == null ? null : use.copy();
1726        return dst;
1727      }
1728
1729      @Override
1730      public boolean equalsDeep(Base other_) {
1731        if (!super.equalsDeep(other_))
1732          return false;
1733        if (!(other_ instanceof DesignationExcludeDesignationComponent))
1734          return false;
1735        DesignationExcludeDesignationComponent o = (DesignationExcludeDesignationComponent) other_;
1736        return compareDeep(language, o.language, true) && compareDeep(use, o.use, true);
1737      }
1738
1739      @Override
1740      public boolean equalsShallow(Base other_) {
1741        if (!super.equalsShallow(other_))
1742          return false;
1743        if (!(other_ instanceof DesignationExcludeDesignationComponent))
1744          return false;
1745        DesignationExcludeDesignationComponent o = (DesignationExcludeDesignationComponent) other_;
1746        return compareValues(language, o.language, true);
1747      }
1748
1749      public boolean isEmpty() {
1750        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, use);
1751      }
1752
1753  public String fhirType() {
1754    return "ExpansionProfile.designation.exclude.designation";
1755
1756  }
1757
1758  }
1759
1760    /**
1761     * A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.
1762     */
1763    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=1, modifier=false, summary=true)
1764    @Description(shortDefinition="Additional identifier for the expansion profile", formalDefinition="A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance." )
1765    protected Identifier identifier;
1766
1767    /**
1768     * Fix use of a particular code system to a particular version.
1769     */
1770    @Child(name = "fixedVersion", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1771    @Description(shortDefinition="Fix use of a code system to a particular version", formalDefinition="Fix use of a particular code system to a particular version." )
1772    protected List<ExpansionProfileFixedVersionComponent> fixedVersion;
1773
1774    /**
1775     * Code system, or a particular version of a code system to be excluded from value set expansions.
1776     */
1777    @Child(name = "excludedSystem", type = {}, order=2, min=0, max=1, modifier=false, summary=true)
1778    @Description(shortDefinition="Systems/Versions to be exclude", formalDefinition="Code system, or a particular version of a code system to be excluded from value set expansions." )
1779    protected ExpansionProfileExcludedSystemComponent excludedSystem;
1780
1781    /**
1782     * Controls whether concept designations are to be included or excluded in value set expansions.
1783     */
1784    @Child(name = "includeDesignations", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1785    @Description(shortDefinition="Whether the expansion should include concept designations", formalDefinition="Controls whether concept designations are to be included or excluded in value set expansions." )
1786    protected BooleanType includeDesignations;
1787
1788    /**
1789     * A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.
1790     */
1791    @Child(name = "designation", type = {}, order=4, min=0, max=1, modifier=false, summary=true)
1792    @Description(shortDefinition="When the expansion profile imposes designation contraints", formalDefinition="A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations." )
1793    protected ExpansionProfileDesignationComponent designation;
1794
1795    /**
1796     * Controls whether the value set definition is included or excluded in value set expansions.
1797     */
1798    @Child(name = "includeDefinition", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1799    @Description(shortDefinition="Include or exclude the value set definition in the expansion", formalDefinition="Controls whether the value set definition is included or excluded in value set expansions." )
1800    protected BooleanType includeDefinition;
1801
1802    /**
1803     * Controls whether inactive concepts are included or excluded in value set expansions.
1804     */
1805    @Child(name = "activeOnly", type = {BooleanType.class}, order=6, min=0, max=1, modifier=false, summary=true)
1806    @Description(shortDefinition="Include or exclude inactive concepts in the expansion", formalDefinition="Controls whether inactive concepts are included or excluded in value set expansions." )
1807    protected BooleanType activeOnly;
1808
1809    /**
1810     * Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
1811     */
1812    @Child(name = "excludeNested", type = {BooleanType.class}, order=7, min=0, max=1, modifier=false, summary=true)
1813    @Description(shortDefinition="Nested codes in the expansion or not", formalDefinition="Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains)." )
1814    protected BooleanType excludeNested;
1815
1816    /**
1817     * Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
1818     */
1819    @Child(name = "excludeNotForUI", type = {BooleanType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1820    @Description(shortDefinition="Include or exclude codes which cannot be rendered in user interfaces in the value set expansion", formalDefinition="Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces." )
1821    protected BooleanType excludeNotForUI;
1822
1823    /**
1824     * Controls whether or not the value set expansion includes post coordinated codes.
1825     */
1826    @Child(name = "excludePostCoordinated", type = {BooleanType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1827    @Description(shortDefinition="Include or exclude codes which are post coordinated expressions in the value set expansion", formalDefinition="Controls whether or not the value set expansion includes post coordinated codes." )
1828    protected BooleanType excludePostCoordinated;
1829
1830    /**
1831     * Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
1832     */
1833    @Child(name = "displayLanguage", type = {CodeType.class}, order=10, min=0, max=1, modifier=false, summary=true)
1834    @Description(shortDefinition="Specify the language for the display element of codes in the value set expansion", formalDefinition="Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display." )
1835    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
1836    protected CodeType displayLanguage;
1837
1838    /**
1839     * If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
1840     */
1841    @Child(name = "limitedExpansion", type = {BooleanType.class}, order=11, min=0, max=1, modifier=false, summary=true)
1842    @Description(shortDefinition="Controls behaviour of the value set expand operation when value sets are too large to be completely expanded", formalDefinition="If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html)." )
1843    protected BooleanType limitedExpansion;
1844
1845    private static final long serialVersionUID = 1067457001L;
1846
1847  /**
1848   * Constructor
1849   */
1850    public ExpansionProfile() {
1851      super();
1852    }
1853
1854  /**
1855   * Constructor
1856   */
1857    public ExpansionProfile(Enumeration<PublicationStatus> status) {
1858      super();
1859      this.status = status;
1860    }
1861
1862    /**
1863     * @return {@link #url} (An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. 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
1864     */
1865    public UriType getUrlElement() { 
1866      if (this.url == null)
1867        if (Configuration.errorOnAutoCreate())
1868          throw new Error("Attempt to auto-create ExpansionProfile.url");
1869        else if (Configuration.doAutoCreate())
1870          this.url = new UriType(); // bb
1871      return this.url;
1872    }
1873
1874    public boolean hasUrlElement() { 
1875      return this.url != null && !this.url.isEmpty();
1876    }
1877
1878    public boolean hasUrl() { 
1879      return this.url != null && !this.url.isEmpty();
1880    }
1881
1882    /**
1883     * @param value {@link #url} (An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. 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
1884     */
1885    public ExpansionProfile setUrlElement(UriType value) { 
1886      this.url = value;
1887      return this;
1888    }
1889
1890    /**
1891     * @return An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. For more information see [Technical and Business Versions](resource.html#versions).
1892     */
1893    public String getUrl() { 
1894      return this.url == null ? null : this.url.getValue();
1895    }
1896
1897    /**
1898     * @param value An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. For more information see [Technical and Business Versions](resource.html#versions).
1899     */
1900    public ExpansionProfile setUrl(String value) { 
1901      if (Utilities.noString(value))
1902        this.url = null;
1903      else {
1904        if (this.url == null)
1905          this.url = new UriType();
1906        this.url.setValue(value);
1907      }
1908      return this;
1909    }
1910
1911    /**
1912     * @return {@link #identifier} (A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1913     */
1914    public Identifier getIdentifier() { 
1915      if (this.identifier == null)
1916        if (Configuration.errorOnAutoCreate())
1917          throw new Error("Attempt to auto-create ExpansionProfile.identifier");
1918        else if (Configuration.doAutoCreate())
1919          this.identifier = new Identifier(); // cc
1920      return this.identifier;
1921    }
1922
1923    public boolean hasIdentifier() { 
1924      return this.identifier != null && !this.identifier.isEmpty();
1925    }
1926
1927    /**
1928     * @param value {@link #identifier} (A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.)
1929     */
1930    public ExpansionProfile setIdentifier(Identifier value)  { 
1931      this.identifier = value;
1932      return this;
1933    }
1934
1935    /**
1936     * @return {@link #version} (The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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
1937     */
1938    public StringType getVersionElement() { 
1939      if (this.version == null)
1940        if (Configuration.errorOnAutoCreate())
1941          throw new Error("Attempt to auto-create ExpansionProfile.version");
1942        else if (Configuration.doAutoCreate())
1943          this.version = new StringType(); // bb
1944      return this.version;
1945    }
1946
1947    public boolean hasVersionElement() { 
1948      return this.version != null && !this.version.isEmpty();
1949    }
1950
1951    public boolean hasVersion() { 
1952      return this.version != null && !this.version.isEmpty();
1953    }
1954
1955    /**
1956     * @param value {@link #version} (The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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
1957     */
1958    public ExpansionProfile setVersionElement(StringType value) { 
1959      this.version = value;
1960      return this;
1961    }
1962
1963    /**
1964     * @return The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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.
1965     */
1966    public String getVersion() { 
1967      return this.version == null ? null : this.version.getValue();
1968    }
1969
1970    /**
1971     * @param value The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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.
1972     */
1973    public ExpansionProfile setVersion(String value) { 
1974      if (Utilities.noString(value))
1975        this.version = null;
1976      else {
1977        if (this.version == null)
1978          this.version = new StringType();
1979        this.version.setValue(value);
1980      }
1981      return this;
1982    }
1983
1984    /**
1985     * @return {@link #name} (A natural language name identifying the expansion profile. 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
1986     */
1987    public StringType getNameElement() { 
1988      if (this.name == null)
1989        if (Configuration.errorOnAutoCreate())
1990          throw new Error("Attempt to auto-create ExpansionProfile.name");
1991        else if (Configuration.doAutoCreate())
1992          this.name = new StringType(); // bb
1993      return this.name;
1994    }
1995
1996    public boolean hasNameElement() { 
1997      return this.name != null && !this.name.isEmpty();
1998    }
1999
2000    public boolean hasName() { 
2001      return this.name != null && !this.name.isEmpty();
2002    }
2003
2004    /**
2005     * @param value {@link #name} (A natural language name identifying the expansion profile. 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
2006     */
2007    public ExpansionProfile setNameElement(StringType value) { 
2008      this.name = value;
2009      return this;
2010    }
2011
2012    /**
2013     * @return A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2014     */
2015    public String getName() { 
2016      return this.name == null ? null : this.name.getValue();
2017    }
2018
2019    /**
2020     * @param value A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.
2021     */
2022    public ExpansionProfile setName(String value) { 
2023      if (Utilities.noString(value))
2024        this.name = null;
2025      else {
2026        if (this.name == null)
2027          this.name = new StringType();
2028        this.name.setValue(value);
2029      }
2030      return this;
2031    }
2032
2033    /**
2034     * @return {@link #status} (The status of this expansion profile. 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
2035     */
2036    public Enumeration<PublicationStatus> getStatusElement() { 
2037      if (this.status == null)
2038        if (Configuration.errorOnAutoCreate())
2039          throw new Error("Attempt to auto-create ExpansionProfile.status");
2040        else if (Configuration.doAutoCreate())
2041          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
2042      return this.status;
2043    }
2044
2045    public boolean hasStatusElement() { 
2046      return this.status != null && !this.status.isEmpty();
2047    }
2048
2049    public boolean hasStatus() { 
2050      return this.status != null && !this.status.isEmpty();
2051    }
2052
2053    /**
2054     * @param value {@link #status} (The status of this expansion profile. 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
2055     */
2056    public ExpansionProfile setStatusElement(Enumeration<PublicationStatus> value) { 
2057      this.status = value;
2058      return this;
2059    }
2060
2061    /**
2062     * @return The status of this expansion profile. Enables tracking the life-cycle of the content.
2063     */
2064    public PublicationStatus getStatus() { 
2065      return this.status == null ? null : this.status.getValue();
2066    }
2067
2068    /**
2069     * @param value The status of this expansion profile. Enables tracking the life-cycle of the content.
2070     */
2071    public ExpansionProfile setStatus(PublicationStatus value) { 
2072        if (this.status == null)
2073          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
2074        this.status.setValue(value);
2075      return this;
2076    }
2077
2078    /**
2079     * @return {@link #experimental} (A boolean value to indicate that this expansion profile 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
2080     */
2081    public BooleanType getExperimentalElement() { 
2082      if (this.experimental == null)
2083        if (Configuration.errorOnAutoCreate())
2084          throw new Error("Attempt to auto-create ExpansionProfile.experimental");
2085        else if (Configuration.doAutoCreate())
2086          this.experimental = new BooleanType(); // bb
2087      return this.experimental;
2088    }
2089
2090    public boolean hasExperimentalElement() { 
2091      return this.experimental != null && !this.experimental.isEmpty();
2092    }
2093
2094    public boolean hasExperimental() { 
2095      return this.experimental != null && !this.experimental.isEmpty();
2096    }
2097
2098    /**
2099     * @param value {@link #experimental} (A boolean value to indicate that this expansion profile 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
2100     */
2101    public ExpansionProfile setExperimentalElement(BooleanType value) { 
2102      this.experimental = value;
2103      return this;
2104    }
2105
2106    /**
2107     * @return A boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
2108     */
2109    public boolean getExperimental() { 
2110      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
2111    }
2112
2113    /**
2114     * @param value A boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
2115     */
2116    public ExpansionProfile setExperimental(boolean value) { 
2117        if (this.experimental == null)
2118          this.experimental = new BooleanType();
2119        this.experimental.setValue(value);
2120      return this;
2121    }
2122
2123    /**
2124     * @return {@link #date} (The date  (and optionally time) when the expansion profile 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 expansion profile changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2125     */
2126    public DateTimeType getDateElement() { 
2127      if (this.date == null)
2128        if (Configuration.errorOnAutoCreate())
2129          throw new Error("Attempt to auto-create ExpansionProfile.date");
2130        else if (Configuration.doAutoCreate())
2131          this.date = new DateTimeType(); // bb
2132      return this.date;
2133    }
2134
2135    public boolean hasDateElement() { 
2136      return this.date != null && !this.date.isEmpty();
2137    }
2138
2139    public boolean hasDate() { 
2140      return this.date != null && !this.date.isEmpty();
2141    }
2142
2143    /**
2144     * @param value {@link #date} (The date  (and optionally time) when the expansion profile 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 expansion profile changes.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2145     */
2146    public ExpansionProfile setDateElement(DateTimeType value) { 
2147      this.date = value;
2148      return this;
2149    }
2150
2151    /**
2152     * @return The date  (and optionally time) when the expansion profile 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 expansion profile changes.
2153     */
2154    public Date getDate() { 
2155      return this.date == null ? null : this.date.getValue();
2156    }
2157
2158    /**
2159     * @param value The date  (and optionally time) when the expansion profile 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 expansion profile changes.
2160     */
2161    public ExpansionProfile setDate(Date value) { 
2162      if (value == null)
2163        this.date = null;
2164      else {
2165        if (this.date == null)
2166          this.date = new DateTimeType();
2167        this.date.setValue(value);
2168      }
2169      return this;
2170    }
2171
2172    /**
2173     * @return {@link #publisher} (The name of the individual or organization that published the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2174     */
2175    public StringType getPublisherElement() { 
2176      if (this.publisher == null)
2177        if (Configuration.errorOnAutoCreate())
2178          throw new Error("Attempt to auto-create ExpansionProfile.publisher");
2179        else if (Configuration.doAutoCreate())
2180          this.publisher = new StringType(); // bb
2181      return this.publisher;
2182    }
2183
2184    public boolean hasPublisherElement() { 
2185      return this.publisher != null && !this.publisher.isEmpty();
2186    }
2187
2188    public boolean hasPublisher() { 
2189      return this.publisher != null && !this.publisher.isEmpty();
2190    }
2191
2192    /**
2193     * @param value {@link #publisher} (The name of the individual or organization that published the expansion profile.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
2194     */
2195    public ExpansionProfile setPublisherElement(StringType value) { 
2196      this.publisher = value;
2197      return this;
2198    }
2199
2200    /**
2201     * @return The name of the individual or organization that published the expansion profile.
2202     */
2203    public String getPublisher() { 
2204      return this.publisher == null ? null : this.publisher.getValue();
2205    }
2206
2207    /**
2208     * @param value The name of the individual or organization that published the expansion profile.
2209     */
2210    public ExpansionProfile setPublisher(String value) { 
2211      if (Utilities.noString(value))
2212        this.publisher = null;
2213      else {
2214        if (this.publisher == null)
2215          this.publisher = new StringType();
2216        this.publisher.setValue(value);
2217      }
2218      return this;
2219    }
2220
2221    /**
2222     * @return {@link #contact} (Contact details to assist a user in finding and communicating with the publisher.)
2223     */
2224    public List<ContactDetail> getContact() { 
2225      if (this.contact == null)
2226        this.contact = new ArrayList<ContactDetail>();
2227      return this.contact;
2228    }
2229
2230    /**
2231     * @return Returns a reference to <code>this</code> for easy method chaining
2232     */
2233    public ExpansionProfile setContact(List<ContactDetail> theContact) { 
2234      this.contact = theContact;
2235      return this;
2236    }
2237
2238    public boolean hasContact() { 
2239      if (this.contact == null)
2240        return false;
2241      for (ContactDetail item : this.contact)
2242        if (!item.isEmpty())
2243          return true;
2244      return false;
2245    }
2246
2247    public ContactDetail addContact() { //3
2248      ContactDetail t = new ContactDetail();
2249      if (this.contact == null)
2250        this.contact = new ArrayList<ContactDetail>();
2251      this.contact.add(t);
2252      return t;
2253    }
2254
2255    public ExpansionProfile addContact(ContactDetail t) { //3
2256      if (t == null)
2257        return this;
2258      if (this.contact == null)
2259        this.contact = new ArrayList<ContactDetail>();
2260      this.contact.add(t);
2261      return this;
2262    }
2263
2264    /**
2265     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist
2266     */
2267    public ContactDetail getContactFirstRep() { 
2268      if (getContact().isEmpty()) {
2269        addContact();
2270      }
2271      return getContact().get(0);
2272    }
2273
2274    /**
2275     * @return {@link #description} (A free text natural language description of the expansion profile from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2276     */
2277    public MarkdownType getDescriptionElement() { 
2278      if (this.description == null)
2279        if (Configuration.errorOnAutoCreate())
2280          throw new Error("Attempt to auto-create ExpansionProfile.description");
2281        else if (Configuration.doAutoCreate())
2282          this.description = new MarkdownType(); // bb
2283      return this.description;
2284    }
2285
2286    public boolean hasDescriptionElement() { 
2287      return this.description != null && !this.description.isEmpty();
2288    }
2289
2290    public boolean hasDescription() { 
2291      return this.description != null && !this.description.isEmpty();
2292    }
2293
2294    /**
2295     * @param value {@link #description} (A free text natural language description of the expansion profile from a consumer's perspective.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2296     */
2297    public ExpansionProfile setDescriptionElement(MarkdownType value) { 
2298      this.description = value;
2299      return this;
2300    }
2301
2302    /**
2303     * @return A free text natural language description of the expansion profile from a consumer's perspective.
2304     */
2305    public String getDescription() { 
2306      return this.description == null ? null : this.description.getValue();
2307    }
2308
2309    /**
2310     * @param value A free text natural language description of the expansion profile from a consumer's perspective.
2311     */
2312    public ExpansionProfile setDescription(String value) { 
2313      if (value == null)
2314        this.description = null;
2315      else {
2316        if (this.description == null)
2317          this.description = new MarkdownType();
2318        this.description.setValue(value);
2319      }
2320      return this;
2321    }
2322
2323    /**
2324     * @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 expansion profile instances.)
2325     */
2326    public List<UsageContext> getUseContext() { 
2327      if (this.useContext == null)
2328        this.useContext = new ArrayList<UsageContext>();
2329      return this.useContext;
2330    }
2331
2332    /**
2333     * @return Returns a reference to <code>this</code> for easy method chaining
2334     */
2335    public ExpansionProfile setUseContext(List<UsageContext> theUseContext) { 
2336      this.useContext = theUseContext;
2337      return this;
2338    }
2339
2340    public boolean hasUseContext() { 
2341      if (this.useContext == null)
2342        return false;
2343      for (UsageContext item : this.useContext)
2344        if (!item.isEmpty())
2345          return true;
2346      return false;
2347    }
2348
2349    public UsageContext addUseContext() { //3
2350      UsageContext t = new UsageContext();
2351      if (this.useContext == null)
2352        this.useContext = new ArrayList<UsageContext>();
2353      this.useContext.add(t);
2354      return t;
2355    }
2356
2357    public ExpansionProfile addUseContext(UsageContext t) { //3
2358      if (t == null)
2359        return this;
2360      if (this.useContext == null)
2361        this.useContext = new ArrayList<UsageContext>();
2362      this.useContext.add(t);
2363      return this;
2364    }
2365
2366    /**
2367     * @return The first repetition of repeating field {@link #useContext}, creating it if it does not already exist
2368     */
2369    public UsageContext getUseContextFirstRep() { 
2370      if (getUseContext().isEmpty()) {
2371        addUseContext();
2372      }
2373      return getUseContext().get(0);
2374    }
2375
2376    /**
2377     * @return {@link #jurisdiction} (A legal or geographic region in which the expansion profile is intended to be used.)
2378     */
2379    public List<CodeableConcept> getJurisdiction() { 
2380      if (this.jurisdiction == null)
2381        this.jurisdiction = new ArrayList<CodeableConcept>();
2382      return this.jurisdiction;
2383    }
2384
2385    /**
2386     * @return Returns a reference to <code>this</code> for easy method chaining
2387     */
2388    public ExpansionProfile setJurisdiction(List<CodeableConcept> theJurisdiction) { 
2389      this.jurisdiction = theJurisdiction;
2390      return this;
2391    }
2392
2393    public boolean hasJurisdiction() { 
2394      if (this.jurisdiction == null)
2395        return false;
2396      for (CodeableConcept item : this.jurisdiction)
2397        if (!item.isEmpty())
2398          return true;
2399      return false;
2400    }
2401
2402    public CodeableConcept addJurisdiction() { //3
2403      CodeableConcept t = new CodeableConcept();
2404      if (this.jurisdiction == null)
2405        this.jurisdiction = new ArrayList<CodeableConcept>();
2406      this.jurisdiction.add(t);
2407      return t;
2408    }
2409
2410    public ExpansionProfile addJurisdiction(CodeableConcept t) { //3
2411      if (t == null)
2412        return this;
2413      if (this.jurisdiction == null)
2414        this.jurisdiction = new ArrayList<CodeableConcept>();
2415      this.jurisdiction.add(t);
2416      return this;
2417    }
2418
2419    /**
2420     * @return The first repetition of repeating field {@link #jurisdiction}, creating it if it does not already exist
2421     */
2422    public CodeableConcept getJurisdictionFirstRep() { 
2423      if (getJurisdiction().isEmpty()) {
2424        addJurisdiction();
2425      }
2426      return getJurisdiction().get(0);
2427    }
2428
2429    /**
2430     * @return {@link #fixedVersion} (Fix use of a particular code system to a particular version.)
2431     */
2432    public List<ExpansionProfileFixedVersionComponent> getFixedVersion() { 
2433      if (this.fixedVersion == null)
2434        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2435      return this.fixedVersion;
2436    }
2437
2438    /**
2439     * @return Returns a reference to <code>this</code> for easy method chaining
2440     */
2441    public ExpansionProfile setFixedVersion(List<ExpansionProfileFixedVersionComponent> theFixedVersion) { 
2442      this.fixedVersion = theFixedVersion;
2443      return this;
2444    }
2445
2446    public boolean hasFixedVersion() { 
2447      if (this.fixedVersion == null)
2448        return false;
2449      for (ExpansionProfileFixedVersionComponent item : this.fixedVersion)
2450        if (!item.isEmpty())
2451          return true;
2452      return false;
2453    }
2454
2455    public ExpansionProfileFixedVersionComponent addFixedVersion() { //3
2456      ExpansionProfileFixedVersionComponent t = new ExpansionProfileFixedVersionComponent();
2457      if (this.fixedVersion == null)
2458        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2459      this.fixedVersion.add(t);
2460      return t;
2461    }
2462
2463    public ExpansionProfile addFixedVersion(ExpansionProfileFixedVersionComponent t) { //3
2464      if (t == null)
2465        return this;
2466      if (this.fixedVersion == null)
2467        this.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
2468      this.fixedVersion.add(t);
2469      return this;
2470    }
2471
2472    /**
2473     * @return The first repetition of repeating field {@link #fixedVersion}, creating it if it does not already exist
2474     */
2475    public ExpansionProfileFixedVersionComponent getFixedVersionFirstRep() { 
2476      if (getFixedVersion().isEmpty()) {
2477        addFixedVersion();
2478      }
2479      return getFixedVersion().get(0);
2480    }
2481
2482    /**
2483     * @return {@link #excludedSystem} (Code system, or a particular version of a code system to be excluded from value set expansions.)
2484     */
2485    public ExpansionProfileExcludedSystemComponent getExcludedSystem() { 
2486      if (this.excludedSystem == null)
2487        if (Configuration.errorOnAutoCreate())
2488          throw new Error("Attempt to auto-create ExpansionProfile.excludedSystem");
2489        else if (Configuration.doAutoCreate())
2490          this.excludedSystem = new ExpansionProfileExcludedSystemComponent(); // cc
2491      return this.excludedSystem;
2492    }
2493
2494    public boolean hasExcludedSystem() { 
2495      return this.excludedSystem != null && !this.excludedSystem.isEmpty();
2496    }
2497
2498    /**
2499     * @param value {@link #excludedSystem} (Code system, or a particular version of a code system to be excluded from value set expansions.)
2500     */
2501    public ExpansionProfile setExcludedSystem(ExpansionProfileExcludedSystemComponent value)  { 
2502      this.excludedSystem = value;
2503      return this;
2504    }
2505
2506    /**
2507     * @return {@link #includeDesignations} (Controls whether concept designations are to be included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDesignations" gives direct access to the value
2508     */
2509    public BooleanType getIncludeDesignationsElement() { 
2510      if (this.includeDesignations == null)
2511        if (Configuration.errorOnAutoCreate())
2512          throw new Error("Attempt to auto-create ExpansionProfile.includeDesignations");
2513        else if (Configuration.doAutoCreate())
2514          this.includeDesignations = new BooleanType(); // bb
2515      return this.includeDesignations;
2516    }
2517
2518    public boolean hasIncludeDesignationsElement() { 
2519      return this.includeDesignations != null && !this.includeDesignations.isEmpty();
2520    }
2521
2522    public boolean hasIncludeDesignations() { 
2523      return this.includeDesignations != null && !this.includeDesignations.isEmpty();
2524    }
2525
2526    /**
2527     * @param value {@link #includeDesignations} (Controls whether concept designations are to be included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDesignations" gives direct access to the value
2528     */
2529    public ExpansionProfile setIncludeDesignationsElement(BooleanType value) { 
2530      this.includeDesignations = value;
2531      return this;
2532    }
2533
2534    /**
2535     * @return Controls whether concept designations are to be included or excluded in value set expansions.
2536     */
2537    public boolean getIncludeDesignations() { 
2538      return this.includeDesignations == null || this.includeDesignations.isEmpty() ? false : this.includeDesignations.getValue();
2539    }
2540
2541    /**
2542     * @param value Controls whether concept designations are to be included or excluded in value set expansions.
2543     */
2544    public ExpansionProfile setIncludeDesignations(boolean value) { 
2545        if (this.includeDesignations == null)
2546          this.includeDesignations = new BooleanType();
2547        this.includeDesignations.setValue(value);
2548      return this;
2549    }
2550
2551    /**
2552     * @return {@link #designation} (A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.)
2553     */
2554    public ExpansionProfileDesignationComponent getDesignation() { 
2555      if (this.designation == null)
2556        if (Configuration.errorOnAutoCreate())
2557          throw new Error("Attempt to auto-create ExpansionProfile.designation");
2558        else if (Configuration.doAutoCreate())
2559          this.designation = new ExpansionProfileDesignationComponent(); // cc
2560      return this.designation;
2561    }
2562
2563    public boolean hasDesignation() { 
2564      return this.designation != null && !this.designation.isEmpty();
2565    }
2566
2567    /**
2568     * @param value {@link #designation} (A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.)
2569     */
2570    public ExpansionProfile setDesignation(ExpansionProfileDesignationComponent value)  { 
2571      this.designation = value;
2572      return this;
2573    }
2574
2575    /**
2576     * @return {@link #includeDefinition} (Controls whether the value set definition is included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDefinition" gives direct access to the value
2577     */
2578    public BooleanType getIncludeDefinitionElement() { 
2579      if (this.includeDefinition == null)
2580        if (Configuration.errorOnAutoCreate())
2581          throw new Error("Attempt to auto-create ExpansionProfile.includeDefinition");
2582        else if (Configuration.doAutoCreate())
2583          this.includeDefinition = new BooleanType(); // bb
2584      return this.includeDefinition;
2585    }
2586
2587    public boolean hasIncludeDefinitionElement() { 
2588      return this.includeDefinition != null && !this.includeDefinition.isEmpty();
2589    }
2590
2591    public boolean hasIncludeDefinition() { 
2592      return this.includeDefinition != null && !this.includeDefinition.isEmpty();
2593    }
2594
2595    /**
2596     * @param value {@link #includeDefinition} (Controls whether the value set definition is included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getIncludeDefinition" gives direct access to the value
2597     */
2598    public ExpansionProfile setIncludeDefinitionElement(BooleanType value) { 
2599      this.includeDefinition = value;
2600      return this;
2601    }
2602
2603    /**
2604     * @return Controls whether the value set definition is included or excluded in value set expansions.
2605     */
2606    public boolean getIncludeDefinition() { 
2607      return this.includeDefinition == null || this.includeDefinition.isEmpty() ? false : this.includeDefinition.getValue();
2608    }
2609
2610    /**
2611     * @param value Controls whether the value set definition is included or excluded in value set expansions.
2612     */
2613    public ExpansionProfile setIncludeDefinition(boolean value) { 
2614        if (this.includeDefinition == null)
2615          this.includeDefinition = new BooleanType();
2616        this.includeDefinition.setValue(value);
2617      return this;
2618    }
2619
2620    /**
2621     * @return {@link #activeOnly} (Controls whether inactive concepts are included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getActiveOnly" gives direct access to the value
2622     */
2623    public BooleanType getActiveOnlyElement() { 
2624      if (this.activeOnly == null)
2625        if (Configuration.errorOnAutoCreate())
2626          throw new Error("Attempt to auto-create ExpansionProfile.activeOnly");
2627        else if (Configuration.doAutoCreate())
2628          this.activeOnly = new BooleanType(); // bb
2629      return this.activeOnly;
2630    }
2631
2632    public boolean hasActiveOnlyElement() { 
2633      return this.activeOnly != null && !this.activeOnly.isEmpty();
2634    }
2635
2636    public boolean hasActiveOnly() { 
2637      return this.activeOnly != null && !this.activeOnly.isEmpty();
2638    }
2639
2640    /**
2641     * @param value {@link #activeOnly} (Controls whether inactive concepts are included or excluded in value set expansions.). This is the underlying object with id, value and extensions. The accessor "getActiveOnly" gives direct access to the value
2642     */
2643    public ExpansionProfile setActiveOnlyElement(BooleanType value) { 
2644      this.activeOnly = value;
2645      return this;
2646    }
2647
2648    /**
2649     * @return Controls whether inactive concepts are included or excluded in value set expansions.
2650     */
2651    public boolean getActiveOnly() { 
2652      return this.activeOnly == null || this.activeOnly.isEmpty() ? false : this.activeOnly.getValue();
2653    }
2654
2655    /**
2656     * @param value Controls whether inactive concepts are included or excluded in value set expansions.
2657     */
2658    public ExpansionProfile setActiveOnly(boolean value) { 
2659        if (this.activeOnly == null)
2660          this.activeOnly = new BooleanType();
2661        this.activeOnly.setValue(value);
2662      return this;
2663    }
2664
2665    /**
2666     * @return {@link #excludeNested} (Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).). This is the underlying object with id, value and extensions. The accessor "getExcludeNested" gives direct access to the value
2667     */
2668    public BooleanType getExcludeNestedElement() { 
2669      if (this.excludeNested == null)
2670        if (Configuration.errorOnAutoCreate())
2671          throw new Error("Attempt to auto-create ExpansionProfile.excludeNested");
2672        else if (Configuration.doAutoCreate())
2673          this.excludeNested = new BooleanType(); // bb
2674      return this.excludeNested;
2675    }
2676
2677    public boolean hasExcludeNestedElement() { 
2678      return this.excludeNested != null && !this.excludeNested.isEmpty();
2679    }
2680
2681    public boolean hasExcludeNested() { 
2682      return this.excludeNested != null && !this.excludeNested.isEmpty();
2683    }
2684
2685    /**
2686     * @param value {@link #excludeNested} (Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).). This is the underlying object with id, value and extensions. The accessor "getExcludeNested" gives direct access to the value
2687     */
2688    public ExpansionProfile setExcludeNestedElement(BooleanType value) { 
2689      this.excludeNested = value;
2690      return this;
2691    }
2692
2693    /**
2694     * @return Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
2695     */
2696    public boolean getExcludeNested() { 
2697      return this.excludeNested == null || this.excludeNested.isEmpty() ? false : this.excludeNested.getValue();
2698    }
2699
2700    /**
2701     * @param value Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).
2702     */
2703    public ExpansionProfile setExcludeNested(boolean value) { 
2704        if (this.excludeNested == null)
2705          this.excludeNested = new BooleanType();
2706        this.excludeNested.setValue(value);
2707      return this;
2708    }
2709
2710    /**
2711     * @return {@link #excludeNotForUI} (Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.). This is the underlying object with id, value and extensions. The accessor "getExcludeNotForUI" gives direct access to the value
2712     */
2713    public BooleanType getExcludeNotForUIElement() { 
2714      if (this.excludeNotForUI == null)
2715        if (Configuration.errorOnAutoCreate())
2716          throw new Error("Attempt to auto-create ExpansionProfile.excludeNotForUI");
2717        else if (Configuration.doAutoCreate())
2718          this.excludeNotForUI = new BooleanType(); // bb
2719      return this.excludeNotForUI;
2720    }
2721
2722    public boolean hasExcludeNotForUIElement() { 
2723      return this.excludeNotForUI != null && !this.excludeNotForUI.isEmpty();
2724    }
2725
2726    public boolean hasExcludeNotForUI() { 
2727      return this.excludeNotForUI != null && !this.excludeNotForUI.isEmpty();
2728    }
2729
2730    /**
2731     * @param value {@link #excludeNotForUI} (Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.). This is the underlying object with id, value and extensions. The accessor "getExcludeNotForUI" gives direct access to the value
2732     */
2733    public ExpansionProfile setExcludeNotForUIElement(BooleanType value) { 
2734      this.excludeNotForUI = value;
2735      return this;
2736    }
2737
2738    /**
2739     * @return Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
2740     */
2741    public boolean getExcludeNotForUI() { 
2742      return this.excludeNotForUI == null || this.excludeNotForUI.isEmpty() ? false : this.excludeNotForUI.getValue();
2743    }
2744
2745    /**
2746     * @param value Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.
2747     */
2748    public ExpansionProfile setExcludeNotForUI(boolean value) { 
2749        if (this.excludeNotForUI == null)
2750          this.excludeNotForUI = new BooleanType();
2751        this.excludeNotForUI.setValue(value);
2752      return this;
2753    }
2754
2755    /**
2756     * @return {@link #excludePostCoordinated} (Controls whether or not the value set expansion includes post coordinated codes.). This is the underlying object with id, value and extensions. The accessor "getExcludePostCoordinated" gives direct access to the value
2757     */
2758    public BooleanType getExcludePostCoordinatedElement() { 
2759      if (this.excludePostCoordinated == null)
2760        if (Configuration.errorOnAutoCreate())
2761          throw new Error("Attempt to auto-create ExpansionProfile.excludePostCoordinated");
2762        else if (Configuration.doAutoCreate())
2763          this.excludePostCoordinated = new BooleanType(); // bb
2764      return this.excludePostCoordinated;
2765    }
2766
2767    public boolean hasExcludePostCoordinatedElement() { 
2768      return this.excludePostCoordinated != null && !this.excludePostCoordinated.isEmpty();
2769    }
2770
2771    public boolean hasExcludePostCoordinated() { 
2772      return this.excludePostCoordinated != null && !this.excludePostCoordinated.isEmpty();
2773    }
2774
2775    /**
2776     * @param value {@link #excludePostCoordinated} (Controls whether or not the value set expansion includes post coordinated codes.). This is the underlying object with id, value and extensions. The accessor "getExcludePostCoordinated" gives direct access to the value
2777     */
2778    public ExpansionProfile setExcludePostCoordinatedElement(BooleanType value) { 
2779      this.excludePostCoordinated = value;
2780      return this;
2781    }
2782
2783    /**
2784     * @return Controls whether or not the value set expansion includes post coordinated codes.
2785     */
2786    public boolean getExcludePostCoordinated() { 
2787      return this.excludePostCoordinated == null || this.excludePostCoordinated.isEmpty() ? false : this.excludePostCoordinated.getValue();
2788    }
2789
2790    /**
2791     * @param value Controls whether or not the value set expansion includes post coordinated codes.
2792     */
2793    public ExpansionProfile setExcludePostCoordinated(boolean value) { 
2794        if (this.excludePostCoordinated == null)
2795          this.excludePostCoordinated = new BooleanType();
2796        this.excludePostCoordinated.setValue(value);
2797      return this;
2798    }
2799
2800    /**
2801     * @return {@link #displayLanguage} (Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.). This is the underlying object with id, value and extensions. The accessor "getDisplayLanguage" gives direct access to the value
2802     */
2803    public CodeType getDisplayLanguageElement() { 
2804      if (this.displayLanguage == null)
2805        if (Configuration.errorOnAutoCreate())
2806          throw new Error("Attempt to auto-create ExpansionProfile.displayLanguage");
2807        else if (Configuration.doAutoCreate())
2808          this.displayLanguage = new CodeType(); // bb
2809      return this.displayLanguage;
2810    }
2811
2812    public boolean hasDisplayLanguageElement() { 
2813      return this.displayLanguage != null && !this.displayLanguage.isEmpty();
2814    }
2815
2816    public boolean hasDisplayLanguage() { 
2817      return this.displayLanguage != null && !this.displayLanguage.isEmpty();
2818    }
2819
2820    /**
2821     * @param value {@link #displayLanguage} (Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.). This is the underlying object with id, value and extensions. The accessor "getDisplayLanguage" gives direct access to the value
2822     */
2823    public ExpansionProfile setDisplayLanguageElement(CodeType value) { 
2824      this.displayLanguage = value;
2825      return this;
2826    }
2827
2828    /**
2829     * @return Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
2830     */
2831    public String getDisplayLanguage() { 
2832      return this.displayLanguage == null ? null : this.displayLanguage.getValue();
2833    }
2834
2835    /**
2836     * @param value Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.
2837     */
2838    public ExpansionProfile setDisplayLanguage(String value) { 
2839      if (Utilities.noString(value))
2840        this.displayLanguage = null;
2841      else {
2842        if (this.displayLanguage == null)
2843          this.displayLanguage = new CodeType();
2844        this.displayLanguage.setValue(value);
2845      }
2846      return this;
2847    }
2848
2849    /**
2850     * @return {@link #limitedExpansion} (If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).). This is the underlying object with id, value and extensions. The accessor "getLimitedExpansion" gives direct access to the value
2851     */
2852    public BooleanType getLimitedExpansionElement() { 
2853      if (this.limitedExpansion == null)
2854        if (Configuration.errorOnAutoCreate())
2855          throw new Error("Attempt to auto-create ExpansionProfile.limitedExpansion");
2856        else if (Configuration.doAutoCreate())
2857          this.limitedExpansion = new BooleanType(); // bb
2858      return this.limitedExpansion;
2859    }
2860
2861    public boolean hasLimitedExpansionElement() { 
2862      return this.limitedExpansion != null && !this.limitedExpansion.isEmpty();
2863    }
2864
2865    public boolean hasLimitedExpansion() { 
2866      return this.limitedExpansion != null && !this.limitedExpansion.isEmpty();
2867    }
2868
2869    /**
2870     * @param value {@link #limitedExpansion} (If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).). This is the underlying object with id, value and extensions. The accessor "getLimitedExpansion" gives direct access to the value
2871     */
2872    public ExpansionProfile setLimitedExpansionElement(BooleanType value) { 
2873      this.limitedExpansion = value;
2874      return this;
2875    }
2876
2877    /**
2878     * @return If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
2879     */
2880    public boolean getLimitedExpansion() { 
2881      return this.limitedExpansion == null || this.limitedExpansion.isEmpty() ? false : this.limitedExpansion.getValue();
2882    }
2883
2884    /**
2885     * @param value If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).
2886     */
2887    public ExpansionProfile setLimitedExpansion(boolean value) { 
2888        if (this.limitedExpansion == null)
2889          this.limitedExpansion = new BooleanType();
2890        this.limitedExpansion.setValue(value);
2891      return this;
2892    }
2893
2894      protected void listChildren(List<Property> children) {
2895        super.listChildren(children);
2896        children.add(new Property("url", "uri", "An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. For more information see [Technical and Business Versions](resource.html#versions).", 0, 1, url));
2897        children.add(new Property("identifier", "Identifier", "A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, 1, identifier));
2898        children.add(new Property("version", "string", "The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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));
2899        children.add(new Property("name", "string", "A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name));
2900        children.add(new Property("status", "code", "The status of this expansion profile. Enables tracking the life-cycle of the content.", 0, 1, status));
2901        children.add(new Property("experimental", "boolean", "A boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental));
2902        children.add(new Property("date", "dateTime", "The date  (and optionally time) when the expansion profile 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 expansion profile changes.", 0, 1, date));
2903        children.add(new Property("publisher", "string", "The name of the individual or organization that published the expansion profile.", 0, 1, publisher));
2904        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));
2905        children.add(new Property("description", "markdown", "A free text natural language description of the expansion profile from a consumer's perspective.", 0, 1, description));
2906        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 expansion profile instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2907        children.add(new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the expansion profile is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction));
2908        children.add(new Property("fixedVersion", "", "Fix use of a particular code system to a particular version.", 0, java.lang.Integer.MAX_VALUE, fixedVersion));
2909        children.add(new Property("excludedSystem", "", "Code system, or a particular version of a code system to be excluded from value set expansions.", 0, 1, excludedSystem));
2910        children.add(new Property("includeDesignations", "boolean", "Controls whether concept designations are to be included or excluded in value set expansions.", 0, 1, includeDesignations));
2911        children.add(new Property("designation", "", "A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.", 0, 1, designation));
2912        children.add(new Property("includeDefinition", "boolean", "Controls whether the value set definition is included or excluded in value set expansions.", 0, 1, includeDefinition));
2913        children.add(new Property("activeOnly", "boolean", "Controls whether inactive concepts are included or excluded in value set expansions.", 0, 1, activeOnly));
2914        children.add(new Property("excludeNested", "boolean", "Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).", 0, 1, excludeNested));
2915        children.add(new Property("excludeNotForUI", "boolean", "Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.", 0, 1, excludeNotForUI));
2916        children.add(new Property("excludePostCoordinated", "boolean", "Controls whether or not the value set expansion includes post coordinated codes.", 0, 1, excludePostCoordinated));
2917        children.add(new Property("displayLanguage", "code", "Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.", 0, 1, displayLanguage));
2918        children.add(new Property("limitedExpansion", "boolean", "If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).", 0, 1, limitedExpansion));
2919      }
2920
2921      @Override
2922      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2923        switch (_hash) {
2924        case 116079: /*url*/  return new Property("url", "uri", "An absolute URI that is used to identify this expansion profile 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 expansion profile is (or will be) published. The URL SHOULD include the major version of the expansion profile. For more information see [Technical and Business Versions](resource.html#versions).", 0, 1, url);
2925        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A formal identifier that is used to identify this expansion profile when it is represented in other formats, or referenced in a specification, model, design or an instance.", 0, 1, identifier);
2926        case 351608024: /*version*/  return new Property("version", "string", "The identifier that is used to identify this version of the expansion profile when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the expansion profile 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);
2927        case 3373707: /*name*/  return new Property("name", "string", "A natural language name identifying the expansion profile. This name should be usable as an identifier for the module by machine processing applications such as code generation.", 0, 1, name);
2928        case -892481550: /*status*/  return new Property("status", "code", "The status of this expansion profile. Enables tracking the life-cycle of the content.", 0, 1, status);
2929        case -404562712: /*experimental*/  return new Property("experimental", "boolean", "A boolean value to indicate that this expansion profile is authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, 1, experimental);
2930        case 3076014: /*date*/  return new Property("date", "dateTime", "The date  (and optionally time) when the expansion profile 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 expansion profile changes.", 0, 1, date);
2931        case 1447404028: /*publisher*/  return new Property("publisher", "string", "The name of the individual or organization that published the expansion profile.", 0, 1, publisher);
2932        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);
2933        case -1724546052: /*description*/  return new Property("description", "markdown", "A free text natural language description of the expansion profile from a consumer's perspective.", 0, 1, description);
2934        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 expansion profile instances.", 0, java.lang.Integer.MAX_VALUE, useContext);
2935        case -507075711: /*jurisdiction*/  return new Property("jurisdiction", "CodeableConcept", "A legal or geographic region in which the expansion profile is intended to be used.", 0, java.lang.Integer.MAX_VALUE, jurisdiction);
2936        case 807748292: /*fixedVersion*/  return new Property("fixedVersion", "", "Fix use of a particular code system to a particular version.", 0, java.lang.Integer.MAX_VALUE, fixedVersion);
2937        case 2125282457: /*excludedSystem*/  return new Property("excludedSystem", "", "Code system, or a particular version of a code system to be excluded from value set expansions.", 0, 1, excludedSystem);
2938        case 461507620: /*includeDesignations*/  return new Property("includeDesignations", "boolean", "Controls whether concept designations are to be included or excluded in value set expansions.", 0, 1, includeDesignations);
2939        case -900931593: /*designation*/  return new Property("designation", "", "A set of criteria that provide the constraints imposed on the value set expansion by including or excluding designations.", 0, 1, designation);
2940        case 127972379: /*includeDefinition*/  return new Property("includeDefinition", "boolean", "Controls whether the value set definition is included or excluded in value set expansions.", 0, 1, includeDefinition);
2941        case 2043813842: /*activeOnly*/  return new Property("activeOnly", "boolean", "Controls whether inactive concepts are included or excluded in value set expansions.", 0, 1, activeOnly);
2942        case 424992625: /*excludeNested*/  return new Property("excludeNested", "boolean", "Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains).", 0, 1, excludeNested);
2943        case 667582980: /*excludeNotForUI*/  return new Property("excludeNotForUI", "boolean", "Controls whether or not the value set expansion includes codes which cannot be displayed in user interfaces.", 0, 1, excludeNotForUI);
2944        case 563335154: /*excludePostCoordinated*/  return new Property("excludePostCoordinated", "boolean", "Controls whether or not the value set expansion includes post coordinated codes.", 0, 1, excludePostCoordinated);
2945        case 1486237242: /*displayLanguage*/  return new Property("displayLanguage", "code", "Specifies the language to be used for description in the expansions i.e. the language to be used for ValueSet.expansion.contains.display.", 0, 1, displayLanguage);
2946        case 597771333: /*limitedExpansion*/  return new Property("limitedExpansion", "boolean", "If the value set being expanded is incomplete (because it is too big to expand), return a limited expansion (a subset) with an indicator that expansion is incomplete, using the extension [http://hl7.org/fhir/StructureDefinition/valueset-toocostly](extension-valueset-toocostly.html).", 0, 1, limitedExpansion);
2947        default: return super.getNamedProperty(_hash, _name, _checkValid);
2948        }
2949
2950      }
2951
2952      @Override
2953      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2954        switch (hash) {
2955        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2956        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
2957        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2958        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2959        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
2960        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2961        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2962        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2963        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2964        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // MarkdownType
2965        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2966        case -507075711: /*jurisdiction*/ return this.jurisdiction == null ? new Base[0] : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2967        case 807748292: /*fixedVersion*/ return this.fixedVersion == null ? new Base[0] : this.fixedVersion.toArray(new Base[this.fixedVersion.size()]); // ExpansionProfileFixedVersionComponent
2968        case 2125282457: /*excludedSystem*/ return this.excludedSystem == null ? new Base[0] : new Base[] {this.excludedSystem}; // ExpansionProfileExcludedSystemComponent
2969        case 461507620: /*includeDesignations*/ return this.includeDesignations == null ? new Base[0] : new Base[] {this.includeDesignations}; // BooleanType
2970        case -900931593: /*designation*/ return this.designation == null ? new Base[0] : new Base[] {this.designation}; // ExpansionProfileDesignationComponent
2971        case 127972379: /*includeDefinition*/ return this.includeDefinition == null ? new Base[0] : new Base[] {this.includeDefinition}; // BooleanType
2972        case 2043813842: /*activeOnly*/ return this.activeOnly == null ? new Base[0] : new Base[] {this.activeOnly}; // BooleanType
2973        case 424992625: /*excludeNested*/ return this.excludeNested == null ? new Base[0] : new Base[] {this.excludeNested}; // BooleanType
2974        case 667582980: /*excludeNotForUI*/ return this.excludeNotForUI == null ? new Base[0] : new Base[] {this.excludeNotForUI}; // BooleanType
2975        case 563335154: /*excludePostCoordinated*/ return this.excludePostCoordinated == null ? new Base[0] : new Base[] {this.excludePostCoordinated}; // BooleanType
2976        case 1486237242: /*displayLanguage*/ return this.displayLanguage == null ? new Base[0] : new Base[] {this.displayLanguage}; // CodeType
2977        case 597771333: /*limitedExpansion*/ return this.limitedExpansion == null ? new Base[0] : new Base[] {this.limitedExpansion}; // BooleanType
2978        default: return super.getProperty(hash, name, checkValid);
2979        }
2980
2981      }
2982
2983      @Override
2984      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2985        switch (hash) {
2986        case 116079: // url
2987          this.url = castToUri(value); // UriType
2988          return value;
2989        case -1618432855: // identifier
2990          this.identifier = castToIdentifier(value); // Identifier
2991          return value;
2992        case 351608024: // version
2993          this.version = castToString(value); // StringType
2994          return value;
2995        case 3373707: // name
2996          this.name = castToString(value); // StringType
2997          return value;
2998        case -892481550: // status
2999          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3000          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3001          return value;
3002        case -404562712: // experimental
3003          this.experimental = castToBoolean(value); // BooleanType
3004          return value;
3005        case 3076014: // date
3006          this.date = castToDateTime(value); // DateTimeType
3007          return value;
3008        case 1447404028: // publisher
3009          this.publisher = castToString(value); // StringType
3010          return value;
3011        case 951526432: // contact
3012          this.getContact().add(castToContactDetail(value)); // ContactDetail
3013          return value;
3014        case -1724546052: // description
3015          this.description = castToMarkdown(value); // MarkdownType
3016          return value;
3017        case -669707736: // useContext
3018          this.getUseContext().add(castToUsageContext(value)); // UsageContext
3019          return value;
3020        case -507075711: // jurisdiction
3021          this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
3022          return value;
3023        case 807748292: // fixedVersion
3024          this.getFixedVersion().add((ExpansionProfileFixedVersionComponent) value); // ExpansionProfileFixedVersionComponent
3025          return value;
3026        case 2125282457: // excludedSystem
3027          this.excludedSystem = (ExpansionProfileExcludedSystemComponent) value; // ExpansionProfileExcludedSystemComponent
3028          return value;
3029        case 461507620: // includeDesignations
3030          this.includeDesignations = castToBoolean(value); // BooleanType
3031          return value;
3032        case -900931593: // designation
3033          this.designation = (ExpansionProfileDesignationComponent) value; // ExpansionProfileDesignationComponent
3034          return value;
3035        case 127972379: // includeDefinition
3036          this.includeDefinition = castToBoolean(value); // BooleanType
3037          return value;
3038        case 2043813842: // activeOnly
3039          this.activeOnly = castToBoolean(value); // BooleanType
3040          return value;
3041        case 424992625: // excludeNested
3042          this.excludeNested = castToBoolean(value); // BooleanType
3043          return value;
3044        case 667582980: // excludeNotForUI
3045          this.excludeNotForUI = castToBoolean(value); // BooleanType
3046          return value;
3047        case 563335154: // excludePostCoordinated
3048          this.excludePostCoordinated = castToBoolean(value); // BooleanType
3049          return value;
3050        case 1486237242: // displayLanguage
3051          this.displayLanguage = castToCode(value); // CodeType
3052          return value;
3053        case 597771333: // limitedExpansion
3054          this.limitedExpansion = castToBoolean(value); // BooleanType
3055          return value;
3056        default: return super.setProperty(hash, name, value);
3057        }
3058
3059      }
3060
3061      @Override
3062      public Base setProperty(String name, Base value) throws FHIRException {
3063        if (name.equals("url")) {
3064          this.url = castToUri(value); // UriType
3065        } else if (name.equals("identifier")) {
3066          this.identifier = castToIdentifier(value); // Identifier
3067        } else if (name.equals("version")) {
3068          this.version = castToString(value); // StringType
3069        } else if (name.equals("name")) {
3070          this.name = castToString(value); // StringType
3071        } else if (name.equals("status")) {
3072          value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3073          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3074        } else if (name.equals("experimental")) {
3075          this.experimental = castToBoolean(value); // BooleanType
3076        } else if (name.equals("date")) {
3077          this.date = castToDateTime(value); // DateTimeType
3078        } else if (name.equals("publisher")) {
3079          this.publisher = castToString(value); // StringType
3080        } else if (name.equals("contact")) {
3081          this.getContact().add(castToContactDetail(value));
3082        } else if (name.equals("description")) {
3083          this.description = castToMarkdown(value); // MarkdownType
3084        } else if (name.equals("useContext")) {
3085          this.getUseContext().add(castToUsageContext(value));
3086        } else if (name.equals("jurisdiction")) {
3087          this.getJurisdiction().add(castToCodeableConcept(value));
3088        } else if (name.equals("fixedVersion")) {
3089          this.getFixedVersion().add((ExpansionProfileFixedVersionComponent) value);
3090        } else if (name.equals("excludedSystem")) {
3091          this.excludedSystem = (ExpansionProfileExcludedSystemComponent) value; // ExpansionProfileExcludedSystemComponent
3092        } else if (name.equals("includeDesignations")) {
3093          this.includeDesignations = castToBoolean(value); // BooleanType
3094        } else if (name.equals("designation")) {
3095          this.designation = (ExpansionProfileDesignationComponent) value; // ExpansionProfileDesignationComponent
3096        } else if (name.equals("includeDefinition")) {
3097          this.includeDefinition = castToBoolean(value); // BooleanType
3098        } else if (name.equals("activeOnly")) {
3099          this.activeOnly = castToBoolean(value); // BooleanType
3100        } else if (name.equals("excludeNested")) {
3101          this.excludeNested = castToBoolean(value); // BooleanType
3102        } else if (name.equals("excludeNotForUI")) {
3103          this.excludeNotForUI = castToBoolean(value); // BooleanType
3104        } else if (name.equals("excludePostCoordinated")) {
3105          this.excludePostCoordinated = castToBoolean(value); // BooleanType
3106        } else if (name.equals("displayLanguage")) {
3107          this.displayLanguage = castToCode(value); // CodeType
3108        } else if (name.equals("limitedExpansion")) {
3109          this.limitedExpansion = castToBoolean(value); // BooleanType
3110        } else
3111          return super.setProperty(name, value);
3112        return value;
3113      }
3114
3115      @Override
3116      public Base makeProperty(int hash, String name) throws FHIRException {
3117        switch (hash) {
3118        case 116079:  return getUrlElement();
3119        case -1618432855:  return getIdentifier(); 
3120        case 351608024:  return getVersionElement();
3121        case 3373707:  return getNameElement();
3122        case -892481550:  return getStatusElement();
3123        case -404562712:  return getExperimentalElement();
3124        case 3076014:  return getDateElement();
3125        case 1447404028:  return getPublisherElement();
3126        case 951526432:  return addContact(); 
3127        case -1724546052:  return getDescriptionElement();
3128        case -669707736:  return addUseContext(); 
3129        case -507075711:  return addJurisdiction(); 
3130        case 807748292:  return addFixedVersion(); 
3131        case 2125282457:  return getExcludedSystem(); 
3132        case 461507620:  return getIncludeDesignationsElement();
3133        case -900931593:  return getDesignation(); 
3134        case 127972379:  return getIncludeDefinitionElement();
3135        case 2043813842:  return getActiveOnlyElement();
3136        case 424992625:  return getExcludeNestedElement();
3137        case 667582980:  return getExcludeNotForUIElement();
3138        case 563335154:  return getExcludePostCoordinatedElement();
3139        case 1486237242:  return getDisplayLanguageElement();
3140        case 597771333:  return getLimitedExpansionElement();
3141        default: return super.makeProperty(hash, name);
3142        }
3143
3144      }
3145
3146      @Override
3147      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3148        switch (hash) {
3149        case 116079: /*url*/ return new String[] {"uri"};
3150        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3151        case 351608024: /*version*/ return new String[] {"string"};
3152        case 3373707: /*name*/ return new String[] {"string"};
3153        case -892481550: /*status*/ return new String[] {"code"};
3154        case -404562712: /*experimental*/ return new String[] {"boolean"};
3155        case 3076014: /*date*/ return new String[] {"dateTime"};
3156        case 1447404028: /*publisher*/ return new String[] {"string"};
3157        case 951526432: /*contact*/ return new String[] {"ContactDetail"};
3158        case -1724546052: /*description*/ return new String[] {"markdown"};
3159        case -669707736: /*useContext*/ return new String[] {"UsageContext"};
3160        case -507075711: /*jurisdiction*/ return new String[] {"CodeableConcept"};
3161        case 807748292: /*fixedVersion*/ return new String[] {};
3162        case 2125282457: /*excludedSystem*/ return new String[] {};
3163        case 461507620: /*includeDesignations*/ return new String[] {"boolean"};
3164        case -900931593: /*designation*/ return new String[] {};
3165        case 127972379: /*includeDefinition*/ return new String[] {"boolean"};
3166        case 2043813842: /*activeOnly*/ return new String[] {"boolean"};
3167        case 424992625: /*excludeNested*/ return new String[] {"boolean"};
3168        case 667582980: /*excludeNotForUI*/ return new String[] {"boolean"};
3169        case 563335154: /*excludePostCoordinated*/ return new String[] {"boolean"};
3170        case 1486237242: /*displayLanguage*/ return new String[] {"code"};
3171        case 597771333: /*limitedExpansion*/ return new String[] {"boolean"};
3172        default: return super.getTypesForProperty(hash, name);
3173        }
3174
3175      }
3176
3177      @Override
3178      public Base addChild(String name) throws FHIRException {
3179        if (name.equals("url")) {
3180          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.url");
3181        }
3182        else if (name.equals("identifier")) {
3183          this.identifier = new Identifier();
3184          return this.identifier;
3185        }
3186        else if (name.equals("version")) {
3187          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.version");
3188        }
3189        else if (name.equals("name")) {
3190          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.name");
3191        }
3192        else if (name.equals("status")) {
3193          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.status");
3194        }
3195        else if (name.equals("experimental")) {
3196          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.experimental");
3197        }
3198        else if (name.equals("date")) {
3199          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.date");
3200        }
3201        else if (name.equals("publisher")) {
3202          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.publisher");
3203        }
3204        else if (name.equals("contact")) {
3205          return addContact();
3206        }
3207        else if (name.equals("description")) {
3208          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.description");
3209        }
3210        else if (name.equals("useContext")) {
3211          return addUseContext();
3212        }
3213        else if (name.equals("jurisdiction")) {
3214          return addJurisdiction();
3215        }
3216        else if (name.equals("fixedVersion")) {
3217          return addFixedVersion();
3218        }
3219        else if (name.equals("excludedSystem")) {
3220          this.excludedSystem = new ExpansionProfileExcludedSystemComponent();
3221          return this.excludedSystem;
3222        }
3223        else if (name.equals("includeDesignations")) {
3224          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.includeDesignations");
3225        }
3226        else if (name.equals("designation")) {
3227          this.designation = new ExpansionProfileDesignationComponent();
3228          return this.designation;
3229        }
3230        else if (name.equals("includeDefinition")) {
3231          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.includeDefinition");
3232        }
3233        else if (name.equals("activeOnly")) {
3234          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.activeOnly");
3235        }
3236        else if (name.equals("excludeNested")) {
3237          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludeNested");
3238        }
3239        else if (name.equals("excludeNotForUI")) {
3240          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludeNotForUI");
3241        }
3242        else if (name.equals("excludePostCoordinated")) {
3243          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.excludePostCoordinated");
3244        }
3245        else if (name.equals("displayLanguage")) {
3246          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.displayLanguage");
3247        }
3248        else if (name.equals("limitedExpansion")) {
3249          throw new FHIRException("Cannot call addChild on a primitive type ExpansionProfile.limitedExpansion");
3250        }
3251        else
3252          return super.addChild(name);
3253      }
3254
3255  public String fhirType() {
3256    return "ExpansionProfile";
3257
3258  }
3259
3260      public ExpansionProfile copy() {
3261        ExpansionProfile dst = new ExpansionProfile();
3262        copyValues(dst);
3263        dst.url = url == null ? null : url.copy();
3264        dst.identifier = identifier == null ? null : identifier.copy();
3265        dst.version = version == null ? null : version.copy();
3266        dst.name = name == null ? null : name.copy();
3267        dst.status = status == null ? null : status.copy();
3268        dst.experimental = experimental == null ? null : experimental.copy();
3269        dst.date = date == null ? null : date.copy();
3270        dst.publisher = publisher == null ? null : publisher.copy();
3271        if (contact != null) {
3272          dst.contact = new ArrayList<ContactDetail>();
3273          for (ContactDetail i : contact)
3274            dst.contact.add(i.copy());
3275        };
3276        dst.description = description == null ? null : description.copy();
3277        if (useContext != null) {
3278          dst.useContext = new ArrayList<UsageContext>();
3279          for (UsageContext i : useContext)
3280            dst.useContext.add(i.copy());
3281        };
3282        if (jurisdiction != null) {
3283          dst.jurisdiction = new ArrayList<CodeableConcept>();
3284          for (CodeableConcept i : jurisdiction)
3285            dst.jurisdiction.add(i.copy());
3286        };
3287        if (fixedVersion != null) {
3288          dst.fixedVersion = new ArrayList<ExpansionProfileFixedVersionComponent>();
3289          for (ExpansionProfileFixedVersionComponent i : fixedVersion)
3290            dst.fixedVersion.add(i.copy());
3291        };
3292        dst.excludedSystem = excludedSystem == null ? null : excludedSystem.copy();
3293        dst.includeDesignations = includeDesignations == null ? null : includeDesignations.copy();
3294        dst.designation = designation == null ? null : designation.copy();
3295        dst.includeDefinition = includeDefinition == null ? null : includeDefinition.copy();
3296        dst.activeOnly = activeOnly == null ? null : activeOnly.copy();
3297        dst.excludeNested = excludeNested == null ? null : excludeNested.copy();
3298        dst.excludeNotForUI = excludeNotForUI == null ? null : excludeNotForUI.copy();
3299        dst.excludePostCoordinated = excludePostCoordinated == null ? null : excludePostCoordinated.copy();
3300        dst.displayLanguage = displayLanguage == null ? null : displayLanguage.copy();
3301        dst.limitedExpansion = limitedExpansion == null ? null : limitedExpansion.copy();
3302        return dst;
3303      }
3304
3305      protected ExpansionProfile typedCopy() {
3306        return copy();
3307      }
3308
3309      @Override
3310      public boolean equalsDeep(Base other_) {
3311        if (!super.equalsDeep(other_))
3312          return false;
3313        if (!(other_ instanceof ExpansionProfile))
3314          return false;
3315        ExpansionProfile o = (ExpansionProfile) other_;
3316        return compareDeep(identifier, o.identifier, true) && compareDeep(fixedVersion, o.fixedVersion, true)
3317           && compareDeep(excludedSystem, o.excludedSystem, true) && compareDeep(includeDesignations, o.includeDesignations, true)
3318           && compareDeep(designation, o.designation, true) && compareDeep(includeDefinition, o.includeDefinition, true)
3319           && compareDeep(activeOnly, o.activeOnly, true) && compareDeep(excludeNested, o.excludeNested, true)
3320           && compareDeep(excludeNotForUI, o.excludeNotForUI, true) && compareDeep(excludePostCoordinated, o.excludePostCoordinated, true)
3321           && compareDeep(displayLanguage, o.displayLanguage, true) && compareDeep(limitedExpansion, o.limitedExpansion, true)
3322          ;
3323      }
3324
3325      @Override
3326      public boolean equalsShallow(Base other_) {
3327        if (!super.equalsShallow(other_))
3328          return false;
3329        if (!(other_ instanceof ExpansionProfile))
3330          return false;
3331        ExpansionProfile o = (ExpansionProfile) other_;
3332        return compareValues(includeDesignations, o.includeDesignations, true) && compareValues(includeDefinition, o.includeDefinition, true)
3333           && compareValues(activeOnly, o.activeOnly, true) && compareValues(excludeNested, o.excludeNested, true)
3334           && compareValues(excludeNotForUI, o.excludeNotForUI, true) && compareValues(excludePostCoordinated, o.excludePostCoordinated, true)
3335           && compareValues(displayLanguage, o.displayLanguage, true) && compareValues(limitedExpansion, o.limitedExpansion, true)
3336          ;
3337      }
3338
3339      public boolean isEmpty() {
3340        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, fixedVersion, excludedSystem
3341          , includeDesignations, designation, includeDefinition, activeOnly, excludeNested, excludeNotForUI
3342          , excludePostCoordinated, displayLanguage, limitedExpansion);
3343      }
3344
3345  @Override
3346  public ResourceType getResourceType() {
3347    return ResourceType.ExpansionProfile;
3348   }
3349
3350 /**
3351   * Search parameter: <b>date</b>
3352   * <p>
3353   * Description: <b>The expansion profile publication date</b><br>
3354   * Type: <b>date</b><br>
3355   * Path: <b>ExpansionProfile.date</b><br>
3356   * </p>
3357   */
3358  @SearchParamDefinition(name="date", path="ExpansionProfile.date", description="The expansion profile publication date", type="date" )
3359  public static final String SP_DATE = "date";
3360 /**
3361   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3362   * <p>
3363   * Description: <b>The expansion profile publication date</b><br>
3364   * Type: <b>date</b><br>
3365   * Path: <b>ExpansionProfile.date</b><br>
3366   * </p>
3367   */
3368  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3369
3370 /**
3371   * Search parameter: <b>identifier</b>
3372   * <p>
3373   * Description: <b>External identifier for the expansion profile</b><br>
3374   * Type: <b>token</b><br>
3375   * Path: <b>ExpansionProfile.identifier</b><br>
3376   * </p>
3377   */
3378  @SearchParamDefinition(name="identifier", path="ExpansionProfile.identifier", description="External identifier for the expansion profile", type="token" )
3379  public static final String SP_IDENTIFIER = "identifier";
3380 /**
3381   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3382   * <p>
3383   * Description: <b>External identifier for the expansion profile</b><br>
3384   * Type: <b>token</b><br>
3385   * Path: <b>ExpansionProfile.identifier</b><br>
3386   * </p>
3387   */
3388  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3389
3390 /**
3391   * Search parameter: <b>jurisdiction</b>
3392   * <p>
3393   * Description: <b>Intended jurisdiction for the expansion profile</b><br>
3394   * Type: <b>token</b><br>
3395   * Path: <b>ExpansionProfile.jurisdiction</b><br>
3396   * </p>
3397   */
3398  @SearchParamDefinition(name="jurisdiction", path="ExpansionProfile.jurisdiction", description="Intended jurisdiction for the expansion profile", type="token" )
3399  public static final String SP_JURISDICTION = "jurisdiction";
3400 /**
3401   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3402   * <p>
3403   * Description: <b>Intended jurisdiction for the expansion profile</b><br>
3404   * Type: <b>token</b><br>
3405   * Path: <b>ExpansionProfile.jurisdiction</b><br>
3406   * </p>
3407   */
3408  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_JURISDICTION);
3409
3410 /**
3411   * Search parameter: <b>name</b>
3412   * <p>
3413   * Description: <b>Computationally friendly name of the expansion profile</b><br>
3414   * Type: <b>string</b><br>
3415   * Path: <b>ExpansionProfile.name</b><br>
3416   * </p>
3417   */
3418  @SearchParamDefinition(name="name", path="ExpansionProfile.name", description="Computationally friendly name of the expansion profile", type="string" )
3419  public static final String SP_NAME = "name";
3420 /**
3421   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3422   * <p>
3423   * Description: <b>Computationally friendly name of the expansion profile</b><br>
3424   * Type: <b>string</b><br>
3425   * Path: <b>ExpansionProfile.name</b><br>
3426   * </p>
3427   */
3428  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
3429
3430 /**
3431   * Search parameter: <b>description</b>
3432   * <p>
3433   * Description: <b>The description of the expansion profile</b><br>
3434   * Type: <b>string</b><br>
3435   * Path: <b>ExpansionProfile.description</b><br>
3436   * </p>
3437   */
3438  @SearchParamDefinition(name="description", path="ExpansionProfile.description", description="The description of the expansion profile", type="string" )
3439  public static final String SP_DESCRIPTION = "description";
3440 /**
3441   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3442   * <p>
3443   * Description: <b>The description of the expansion profile</b><br>
3444   * Type: <b>string</b><br>
3445   * Path: <b>ExpansionProfile.description</b><br>
3446   * </p>
3447   */
3448  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
3449
3450 /**
3451   * Search parameter: <b>publisher</b>
3452   * <p>
3453   * Description: <b>Name of the publisher of the expansion profile</b><br>
3454   * Type: <b>string</b><br>
3455   * Path: <b>ExpansionProfile.publisher</b><br>
3456   * </p>
3457   */
3458  @SearchParamDefinition(name="publisher", path="ExpansionProfile.publisher", description="Name of the publisher of the expansion profile", type="string" )
3459  public static final String SP_PUBLISHER = "publisher";
3460 /**
3461   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3462   * <p>
3463   * Description: <b>Name of the publisher of the expansion profile</b><br>
3464   * Type: <b>string</b><br>
3465   * Path: <b>ExpansionProfile.publisher</b><br>
3466   * </p>
3467   */
3468  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
3469
3470 /**
3471   * Search parameter: <b>version</b>
3472   * <p>
3473   * Description: <b>The business version of the expansion profile</b><br>
3474   * Type: <b>token</b><br>
3475   * Path: <b>ExpansionProfile.version</b><br>
3476   * </p>
3477   */
3478  @SearchParamDefinition(name="version", path="ExpansionProfile.version", description="The business version of the expansion profile", type="token" )
3479  public static final String SP_VERSION = "version";
3480 /**
3481   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3482   * <p>
3483   * Description: <b>The business version of the expansion profile</b><br>
3484   * Type: <b>token</b><br>
3485   * Path: <b>ExpansionProfile.version</b><br>
3486   * </p>
3487   */
3488  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
3489
3490 /**
3491   * Search parameter: <b>url</b>
3492   * <p>
3493   * Description: <b>The uri that identifies the expansion profile</b><br>
3494   * Type: <b>uri</b><br>
3495   * Path: <b>ExpansionProfile.url</b><br>
3496   * </p>
3497   */
3498  @SearchParamDefinition(name="url", path="ExpansionProfile.url", description="The uri that identifies the expansion profile", type="uri" )
3499  public static final String SP_URL = "url";
3500 /**
3501   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3502   * <p>
3503   * Description: <b>The uri that identifies the expansion profile</b><br>
3504   * Type: <b>uri</b><br>
3505   * Path: <b>ExpansionProfile.url</b><br>
3506   * </p>
3507   */
3508  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3509
3510 /**
3511   * Search parameter: <b>status</b>
3512   * <p>
3513   * Description: <b>The current status of the expansion profile</b><br>
3514   * Type: <b>token</b><br>
3515   * Path: <b>ExpansionProfile.status</b><br>
3516   * </p>
3517   */
3518  @SearchParamDefinition(name="status", path="ExpansionProfile.status", description="The current status of the expansion profile", type="token" )
3519  public static final String SP_STATUS = "status";
3520 /**
3521   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3522   * <p>
3523   * Description: <b>The current status of the expansion profile</b><br>
3524   * Type: <b>token</b><br>
3525   * Path: <b>ExpansionProfile.status</b><br>
3526   * </p>
3527   */
3528  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3529
3530
3531}
3532